public inbox for bitcoindev@googlegroups.com
 help / color / mirror / Atom feed
From: Gleb Naumenko <naumenko.gs@gmail•com>
To: bitcoin-dev@lists•linuxfoundation.org
Subject: [bitcoin-dev] Low-bandwidth transaction relay
Date: Mon, 2 Apr 2018 15:18:07 -0700	[thread overview]
Message-ID: <9ab6e32e-db51-4ce4-8f3c-3a77f7b1f9bd@Spark> (raw)

[-- Attachment #1: Type: text/plain, Size: 1771 bytes --]

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


[-- Attachment #2: Type: text/html, Size: 2489 bytes --]

             reply	other threads:[~2018-04-02 22:18 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-02 22:18 Gleb Naumenko [this message]
2018-04-03 17:45 ` Jim Posen
2018-04-04  2:10   ` Gleb Naumenko
2018-04-03 19:05 ` Gregory Maxwell
     [not found] ` <CAAS2fgSYG+jrLM4=DXVpLTh9diMEbX0gWG-wC0-2gBRio+Lo0Q@mail.gmail.com>
2018-04-04  4:55   ` Gleb Naumenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9ab6e32e-db51-4ce4-8f3c-3a77f7b1f9bd@Spark \
    --to=naumenko.gs@gmail$(echo .)com \
    --cc=bitcoin-dev@lists$(echo .)linuxfoundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox