Adds new sync options based on Bitcoin PR#9483:
-spv: if set to 1, rely on headers and fresh blocks to check transactions.
-autorequestblocks: if set to 0, do not download blocks that are older than your wallet.
Modes selectable through GUI settings:
- Full: -spv=0 -autorequestblocks=1 (default).
- Pruned: -spv=0 -autorequestblocks=1 -prune=200 (or whatever you select). Needs reindex to switch back from. Only there for the completion sake and is not recommended.
- Lightweight: -spv=1 -autorequestblocks=0. Full SPV mode, only new blocks requested.
- Hybrid: -spv=1 -autorequestblocks=1. All blocks requested, but you're good to go after headers and new blocks are downloaded. Allows flawless switching to/from full mode.
Naturally, -spv=0 -autorequestblocks=0 is not there since it's only useful for debug purposes.
Changes since the previous SPV snapshot:
- Fixed a crash upon receiving empty headers.
- SPV/non-SPV transaction state is now properly read from the wallet.
Changes since milestone 1:
- initial sync should no longer generate excess network traffic;
- even faster reindex;
- protobuf is now optional, BIP70 support is not built by default;
- compact blocks and HD keys support;
- significant improvements in memory management and network response time (the latter even helps old peers!).