Implement a Lazy Bootstrapping Client #995
Currently the bootstrapping process is active and tries to import the entire ledger to every node, account by account.
In order to ensure that the blocks are valid in the face of forks, many blocks have to be voted on during bootstrapping, which is slow, bandwidth intensive, and I/O intensive.
However, a more lazy approach can be taken. On the real-time peer-to-peer network, new blocks are constantly being voted on and, ultimately, confirmed by the network. Each block is a node, and likely a head, of a Merkle tree where each node has 1 or 2 preceding nodes (the "previous" block, unless its the first block in a chain, and also the "link" or "source" block, if it is a receiving block).
Therefore, the confirmation of a single block also confirms MANY other blocks -- on a highly-connected (on the Merkle tree) account, it can confirm a significant amount of blocks without additional voting.
This ticket is to implement the client portion of this bootstrapping into the Nano node.
When a new block is confirmed on the network, the bootstrapping client should:
Additionally, nodes may be interested in specific but not active accounts -- such as accounts belonging to one of their local wallets. For these accounts a new bootstrap command called "bulk_pull_account" is being created to request blocks related to these accounts. For now, this work does not yet include pulling in those accounts explicitly.