genswiftsyncbitmap, chaincfg, blockchain: implement swiftsync #2478
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Change Description
This is a first implementation of SwiftSync for btcd. SwiftSync enables fast UTXO set bootstrapping during initial block download by using a precomputed bitmap that indicates which transaction outputs have been spent.
Instead of replaying and validating all historical transactions from genesis, nodes can use the bitmap to directly construct the UTXO set:
The main benefit is performance improvement during ibd. On this PR when testing on signet, it was 3.3x faster than on master.
Without SwiftSync on master to block height 285,205 took 22m 59s.
Ran with command:
pprof:

With SwiftSync on this PR to block height 285,205 took 6m 56s.
Ran with command:
One caveat is that we can't generate the SpendJournals for the blocks that are processed with SwiftSync.
Note that the aggregator part of SwiftSync is not yet implemented which makes this not safe to run for production uses.
This is a first pass at the implementation and is not final. Feedback welcome.
Steps to Test
Steps for reviewers to follow to test the change.
Pull Request Checklist
Testing
Code Style and Documentation
📝 Please see our Contribution Guidelines for further guidance.