Hi all,
I have a couple of ideas regarding transaction relay protocol and wanted to 
share it with and probably get some feedback.

I did some emulation and simulation and found out that around 90% of INV 
messages sent by public-IP nodes are idle (duplicate), obviously because each 
node creates 8 connections.  I also realized that sending INV messages is a 
significant part of the overall bandwidth consumed by a public-IP node. At a 
larger scale, this will result in people not able to run a public-IP node.

My idea is in some sense similar to BIP37 but applied to public-IP nodes. Here 
I want to emphasize that all the nodes will still receive *all* of the 
transactions. A new protocol should also keep the same zero-trust, robustness, 
decentralization guarantees and latency.

Idea: while joining the network, a new node agrees on some filter with each of 
8 nodes it connects to. So that NewNode <-> Node_A will be used to relay only a 
subset of transactions, NewNode <-> Node_B for another subset. This will 
significantly decrease the redundancy.

To keep the guarantees, I would keep some redundancy (for example, each 
transaction INV is sent over 2 links).

To make it robust to attacks, I have 2 extensions in my mind:
1. Set reconciliation (for a subset of transactions) with *other* nodes. 
Getting a bloom filter of a subset of the mempool transactions from Node_B may 
help to figure out whether Node_A is malicious, very slow, etc.
2. Rotating the filters every N minutes (N < 10)

I can see some issues with latency here, but I believe this problem has a 
solution.

Feedback is appreciated!

If you want to look at a draft of the proposal — please let me know.
If there were any similar ideas — please let me know.

Best,
Gleb

_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev

Reply via email to