Well, here's another idea: we could shorten the tx hashes to about 4 to 6 bytes 
instead of 32.

Let's say we have a 1 GB mempool with 2M transactions in it. A 4 byte shorthash 
would have a 0.046% chance of resulting in a collision with another transaction 
in our mempool, assuming a random distribution of hash values.

Of course, an attacker might construct transactions specifically for 
collisions. To protect against that, we set up a different salt value for each 
connection, and for the INV message, we use a 4 to 6 byte salted hash instead 
of the full thing. In case a peer does have a collision with one salt value, 
there are still 7 other peers with different salt values. The probability that 
they all fail is about 2.2e-27 with a 4-byte hash for a single peer. If we have 
500,000 full nodes and 1M transactions per 10 minutes, the chance is 1.1e-15 
that even one peer misses even one transaction.

This strategy would come with about 12 bytes of additional memory overhead per 
peer per tx, or maybe a little more. In exchange for that 12 bytes per peer*tx, 
we would save up to 28 bytes per peer*tx of network bandwidth. In typical 
conditions (e.g. 100-ish MB mempool, 16 peers, 2 MB blocks, 500 B serialized tx 
size), that could result in 1.792 MB net traffic saved per block (7.7 GB/month) 
at the expense of 12 MB of RAM. Overall, this technique might have the ability 
to reduce INV traffic by 5-8x in the asymptotic case, or maybe 2-3x for a 
realistic case.

I know short hashes like this have been proposed many times before for block 
propagation (e.g. by Gavin in his O(1) scaling gist, or in XTB). Has anyone 
else thought of using them like this in INV messages? Can anyone think of any 
major problems with the idea?

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

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

Reply via email to