From 7131c30c33c980f0ba1d37dfc6a3fbe8c319813e Mon Sep 17 00:00:00 2001 From: Bitflash Date: Sat, 1 Aug 2026 12:56:16 -0300 Subject: wallet: generate keys ahead of use so a backup outlives the next block (#85) The wallet made a key per address and per block mined, so a backup only ever contained the keys that existed the moment it was taken -- mine one block and the coin lands on a key the backup has never heard of. The README warned about it, which is an admission rather than a fix. Keys are now generated a hundred at a time and handed out one at a time, each written to wallet.dat before it can be pointed at. A backup covers the next hundred addresses. Deterministic derivation (#47) stays open; this buys back the distance between a backup and the next mistake. --- src/db.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/db.h') diff --git a/src/db.h b/src/db.h index 22efc77..f51047e 100644 --- a/src/db.h +++ b/src/db.h @@ -386,6 +386,19 @@ public: return Write(string("defaultkey"), vchPubKey); } + // Keys generated ahead of time and not yet handed out. The private key of + // each is already stored under its own "key" record by AddKey; a "pool" + // record only says that this one is still unspoken for. + bool WritePool(int64 nIndex, const vector& vchPubKey) + { + return Write(make_pair(string("pool"), nIndex), vchPubKey); + } + + bool ErasePool(int64 nIndex) + { + return Erase(make_pair(string("pool"), nIndex)); + } + template bool ReadSetting(const string& strKey, T& value) { -- cgit v1.2.3