While we continue research on the data sync layer, one of the important components we need to think of is the discovery method. How do data sync nodes find their peers? There are multiple methods we can go with for example Kademlia. However the actual discovery process is out of scope for this post. What I want to discuss here is how we determine the bootstrap nodes required for most of these peer discovery methods. In order for nodes to connect to the network and find peers they already need to know the address of another node so they can connect.
There are multiple processes that exist for knowing these first nodes:
- Static Bootstrap nodes
- Node operators sharing addresses with each other through some secondary service
The latter creates a hurdle for anyone trying to join a network whereas the former is not very democratic. Therefore, we should think of different schemes that make it easy to add new bootstrap nodes and obtain the addresses to these nodes. Ideally this process would be permissionless so anyone can submit their node as a bootstrap node (this brings along problems of its own).
My proposal for this would be a smart contract that allows the submission of a node by any participant of the network. To ensure nodes are not malicious, a vote would occur on every submission that requires
2/3 of the current bootstrap nodes to agree on the new node. A stake would also be submitted which could get slashed if the node is found to not be behaving as intended by the rules of the protocol.
New nodes that want to join the network then simply query the smart contract to find a bootstrap node to connect to.
Of course this idea is very early, comments are welcome to help improve the idea.