This PR will allow auxiliary block requests. This will be required to run SPV wallets as well as this solves some other interesting use cases.
CAuxiliaryBlockRequest
- A new “lock-free” class that handles the auxiliary blocks-download/processing
- Contains a single global CAuxiliaryBlockRequest pointer (switching to a queue would be trivial).
SyncTransaction signal
- A new parameter will be added that defines if the transactions are coming from a validated or non-validated block
New RPC call “requestblocks”
Allows to request blocks, if available on disk, they will be optionally passed tough the SyncTransaction signal (Wallet/ZMQ). If some or all of the blocks are not available, they will be downloaded (prioritized over “normal” IBD downloads).
The blocks will be downloaded in parallel using the current block download mechanisms.
CAuxiliaryBlockRequest
will ensure that the blocks get processes in the correct order (as requested).
If someone has a good testplan for this, please stand up.