Broadcasting and Bootstrapping
The former is pretty much done. The latter needs work. Here's how bitcoin does it (more detail). We will probably use their inventory/header system:
- Ask a node to get you up to speed
- Compare blocks with the node until you find one you both have
- Receive headers for all blocks between that block and the current block
- Download actual block data Right now the bootstrapping code asks for blocks at a specific height, instead of with a specific hash. I imagine there's a reason Bitcoin does it the other way; maybe you have some thoughts?