upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/selftest.cpp
diff options
context:
space:
mode:
authorbitflash <admin@bitflash.network>2026-08-17 17:45:01 -0300
committerbitflash <admin@bitflash.network>2026-08-17 17:45:01 -0300
commit2a2b9d74f8fb6b5d86d750e6e5d18c942738f95c (patch)
tree0e372514ce835c74e912d6d7094fb7b84c6a94a0 /src/selftest.cpp
parenta6eb8dab830be3135c054ae3ae442886f1867b4e (diff)
wallet: run the node on a SQLite backend (opt-in)
Adds -walletbackend=sqlite: an opt-in flag that runs the node on <datadir>/wallet.sqlite instead of wallet.dat. It requires an export to exist first (no silent migration) and prints a step-by-step guide when one does not; wallet.dat is never opened or touched, so a plain restart goes back to Berkeley DB. - LoadWalletFromSQLiteRuntime opens the export read-write, keeps the handle open as the active backend, loads records into memory through the same visitor/reconcile/finish path as the read-only staging load, and never fabricates a default key. - Shutdown checkpoints and closes the SQLite backend; a kill before that loses nothing because WAL + synchronous=FULL already made every committed write durable. - Self-test proves runtime writes persist across a close and reopen. BDB stays the default: nothing activates the SQLite runtime unless the flag is given. One-shot audit/recovery commands still use Berkeley DB.
Diffstat (limited to 'src/selftest.cpp')
-rw-r--r--src/selftest.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/selftest.cpp b/src/selftest.cpp
index 9fa0938..098eed6 100644
--- a/src/selftest.cpp
+++ b/src/selftest.cpp
@@ -1230,6 +1230,31 @@ static int RunWalletSQLiteSelfTest()
1230 1230
1231 nFail += Check(!FileExists((strRuntimeDir + "/wallet.dat").c_str()), 1231 nFail += Check(!FileExists((strRuntimeDir + "/wallet.dat").c_str()),
1232 "active SQLite runtime does not create wallet.dat") ? 0 : 1; 1232 "active SQLite runtime does not create wallet.dat") ? 0 : 1;
1233
1234 // Durability: close the backend (checkpoints the WAL), reopen
1235 // the same file, and confirm what CWalletDB wrote is still
1236 // there. This is the write-survives-a-restart property the real
1237 // -walletbackend=sqlite node depends on.
1238 WalletSQLiteRuntimeClose();
1239 bool fReopened =
1240 WalletSQLiteRuntimeOpen(strRuntimePath, strError);
1241 nFail += Check(fReopened,
1242 "SQLite runtime wallet reopens after close") ? 0 : 1;
1243 if (fReopened)
1244 {
1245 int64 nPersisted = 0;
1246 CPrivKey vchPersistedPrivKey;
1247 vector<unsigned char> vchPersistedDefaultKey;
1248 nFail += Check(CWalletDB("r").ReadSetting("runtime-sqlite-setting",
1249 nPersisted) &&
1250 nPersisted == 909090 &&
1251 CWalletDB("r").ReadDefaultKey(vchPersistedDefaultKey) &&
1252 vchPersistedDefaultKey == vchRuntimePubKey &&
1253 CWalletDB("r").ReadKey(vchRuntimePubKey,
1254 vchPersistedPrivKey) &&
1255 vchPersistedPrivKey == vchRuntimePrivKey,
1256 "SQLite runtime writes persist across a close and reopen") ? 0 : 1;
1257 }
1233 } 1258 }
1234 1259
1235 WalletSQLiteRuntimeClose(); 1260 WalletSQLiteRuntimeClose();