Re: On IRC bootstrapping

Figures: Xunie

We all talk about bootstrapping systems, how ever, my idea might be a bit better.

A user starts bitcoin on a host for the first time, and it will initially download a list of nodes that it will connect to. (until, of course, we have a lot of static nodes we can hard code into bitcoin…) Then, the client tries to connects to those IPs on that list it downloaded, or when it already has a list downloaded from the last time it started bitcoin, connect to those. When we’re connected, the client asks every node for a list of nodes they know and updates its node list. Once a complete list is obtained, it is saved on the hard drive and a copy is kept in memory. (This is because we want to have a list of nodes without actually connect to that indexing server.) And finally, the node is completely connected to the network. When a new node connects (when it receives a “new node packet”), the list is both updated in memory and saved to the hard drive again. To make updating the list with new nodes so bandwidth friendly as possible, I suggest that every node “echoes” the IP of a new node connecting to the network to all the nodes it knows…

Pros:

  • Has bootstrapping in mind.
  • Is distributed for clients that have a node list

Cons:

  • Every new client needs to connect to a server to get a new node list until we’re done with bootstrapping.

This, in my eyes, seems like the best solution to our bootstrapping problem… PS: If we implement this, we might just wanna check if the “new node packet” we received contains bogus IPs, or IPs that resolve to .gov domains! 😛