-
Notifications
You must be signed in to change notification settings - Fork 576
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
wallet+waddrmgr: sync and store up to MaxReorgDepth blocks #618
Commits on Jun 11, 2019
-
waddrmgr: maintain a maximum of MaxReorgDepth block hashes stored
In this commit, we modify the wallet's block hash index to only store up to MaxReorgDepth blocks. This allows us to reduce consumed storage, as we'd be mostly storing duplicate data. We choose to store up to MaxReorgDepth to ensure we can recover from a potential long reorg.
Configuration menu - View commit details
-
Copy full SHA for e548e76 - Browse repository at this point
Copy the full SHA e548e76View commit details -
waddrmgr: add migration to maintain MaxReorgDepth block hashes stored
In this commit, we add a migration that will be used by existing wallets to ensure they can adhere to the new requirement of storing up to MaxReorgDepth entries within the block hash index.
Configuration menu - View commit details
-
Copy full SHA for f2f46b6 - Browse repository at this point
Copy the full SHA f2f46b6View commit details
Commits on Jun 14, 2019
-
wallet: make wallet initial sync synchronous
This ensures the wallet can properly do an initial sync, a recovery, or detect if it's on a stale branch before attempting to process new blocks at tip. Since the rescan will be triggered synchronously as well, we'll need to catch the wallet's quit chan when handling rescan batches in order to allow for clean shutdowns.
Configuration menu - View commit details
-
Copy full SHA for 1ee2a23 - Browse repository at this point
Copy the full SHA 1ee2a23View commit details -
chain: add IsCurrent method to chain.Interface
IsCurrent allows us to determine if the chain backend considers itself "current" with the chain.
Configuration menu - View commit details
-
Copy full SHA for 39f81c6 - Browse repository at this point
Copy the full SHA 39f81c6View commit details -
wallet: wait until chain backend is current to begin wallet sync
This serves as groundwork for only storing up to MaxReorgDepth blocks upon initial sync. To do so, we want to make sure the chain backend considers itself current so that we can only fetch the latest MaxReorgDepth blocks from it.
Configuration menu - View commit details
-
Copy full SHA for 17efcdb - Browse repository at this point
Copy the full SHA 17efcdbView commit details -
wallet: locate birthday block without scanning chain from genesis
We do this as the wallet will no longer store blocks all the way from genesis to the tip of the chain. Instead, in order to find a reasonable birthday block, we resort to performing a binary search for a block timestamp that's within +/-2 hours of the birthday timestamp.
Configuration menu - View commit details
-
Copy full SHA for 2a6f24c - Browse repository at this point
Copy the full SHA 2a6f24cView commit details -
wallet: modify recovery logic to not start from genesis
This commit serves as another building point to allow the wallet to not store blocks all the way from genesis to the tip of chain. We modify the wallet's recovery logic to now start from either its birthday block, or the current reorg safe height if it's before the birthday, to ensure the wallet properly only stores MaxReorgDepth blocks. We also refactor things a bit in hopes of making the logic a bit more readable.
Configuration menu - View commit details
-
Copy full SHA for e754478 - Browse repository at this point
Copy the full SHA e754478View commit details -
wallet: store reorg safe height upon initial sync
Currently, wallet rescans start from its known tip of the chain. Since we no longer store blocks all the way from genesis to the tip of the chain, performing a rescan would cause us to scan blocks all the way from genesis, which we want to avoid. To prevent this, we set the wallet's tip to be the current reorg safe height. This ensures that we're unable to scan any blocks before it, and that we maintain MaxReorgDepth blocks stored.
Configuration menu - View commit details
-
Copy full SHA for fa65c1b - Browse repository at this point
Copy the full SHA fa65c1bView commit details -
Configuration menu - View commit details
-
Copy full SHA for 26bc5ab - Browse repository at this point
Copy the full SHA 26bc5abView commit details -
wallet: use locateBirthdayBlock within birthdaySanityCheck
We use the recently introduced locateBirthdayBlock function within birthdaySanityCheck as it serves as a more optimized alternative that achieves the same purpose.
Configuration menu - View commit details
-
Copy full SHA for fd8aa5d - Browse repository at this point
Copy the full SHA fd8aa5dView commit details -
wallet: improve error logging for unsuccessful notification handling
If a block arrives while the wallet is rescanning, users would be shown a log message that is confusing and not very helpful.
Configuration menu - View commit details
-
Copy full SHA for a9847c2 - Browse repository at this point
Copy the full SHA a9847c2View commit details -
chain: only allow bitcoind block notifications at tip after NotifyBlocks
One could argue that the behavior before this commit was incorrect, as the ChainClient interface expects a call to NotifyBlocks before notifying blocks at tip, so we decide to fix this. Since we now wait for the chain backend to be considered "current" before proceeding to sync the wallet with it, any blocks that were processed while waiting would result in being notified and scanned twice, once by processing it at tip, and another while rescanning the wallet, which is not desirable.
Configuration menu - View commit details
-
Copy full SHA for 4a913d0 - Browse repository at this point
Copy the full SHA 4a913d0View commit details