diff options
| author | bitflash <dev@bitflash.network> | 2026-08-18 14:33:40 -0300 |
|---|---|---|
| committer | bitflash <dev@bitflash.network> | 2026-08-18 14:33:40 -0300 |
| commit | 440d7f393d74f309d29e1d10ba1f11c41c869226 (patch) | |
| tree | 40c881b79ba7a2571cfd2bcfbb274031a5739071 /src/test_bip32.cpp | |
| parent | e58c4022e0ddd137b93cdb3464753bef5df1d456 (diff) | |
wallet: bracket WriteHDMaster in a SQLite runtime transaction
The SQLite runtime wrote each record as its own autocommit, so a group
that must land together -- hdmaster and hdchaincode, the two halves of an
HD seed -- could be left half-written by a failure or crash between them,
the incomplete-seed state -walletstoragecheck exists to catch. Berkeley DB
was no worse (it is not transactional here either) but no better.
Add WalletSQLiteRuntimeBeginTxn/CommitTxn/RollbackTxn -- no-ops that
succeed when the SQLite backend is not active, so Berkeley DB keeps its
existing per-write behaviour -- and wrap WriteHDMaster in them so the seed
lands all-or-nothing under SQLite. The one BDB-atomic wallet rewrite, the
encrypt path, is already matched by its own transaction in the SQLite
encrypt branch; every other wallet multi-write is ordering-based on both
backends by design.
wallet-sqlite self-test now proves the bracket: a rolled-back runtime
write leaves no record, a committed one persists, and WriteHDMaster lands
both halves of the seed.
Diffstat (limited to 'src/test_bip32.cpp')
0 files changed, 0 insertions, 0 deletions