Revisiting NODE_BLOOM: Proposed BIP



Summary:

In a discussion regarding the NODE_BLOOM service bit, Matt Corallo suggests adding an option to select service bits to DNS seeds as soon as possible. However, he warns that relying on seeds every time you start your node is a bad idea. Nodes should be doing caching and proper gossip protocol participation whenever possible. He believes that any protocol change that would split blocks themselves into multiples is the only kind of solution that could make the blockchain itself have reasonable scalability. Corallo further notes that repeated Bloom filter requests can lead to DoS attacks and references attacks that Bitcoin XT nodes are undergoing. While so far those attacks are being directed only at XT nodes, obviously this is a potential issue for Core nodes as well. Hence, it is critical that miners aren't affected by these attacks; nodes serving SPV wallet clients are much less latency sensitive, so having two classes of nodes out there "in the wild" could be a good DoS attack mitigation strategy.The NODE_BLOOM service bit is intended to allow peers to advertise that they support bloom filters explicitly. It also bumps the protocol version to allow peers to identify old nodes which allow bloom filtering of the connection despite lacking the new service bit. BIP 37 did not specify a service bit for the bloom filter service, thus implicitly assuming that all nodes that serve peers data support it. However, the connection filtering algorithm proposed in BIP 37 has been shown to provide little to no privacy, as well as being a large DoS risk on some nodes. Thus, allowing node operators to disable connection bloom filtering is a much-needed feature.The increase in protocol version is for backward compatibility. In initial implementations, old nodes which are not yet aware of NODE_BLOOM and use a protocol version below 70011 will function with a node without NODE_BLOOM. This feature may be removed after there are sufficient NODE_BLOOM nodes available and SPV clients have upgraded, allowing node operators to fully close the bloom-related DoS vectors. The reference implementation for NODE_BLOOM service bit can be found at https://github.com/bitcoin/bitcoin/pull/6579.


Updated on: 2023-06-10T20:46:14.689045+00:00