From 311c085cab2929754c79dd6e330bf888ec000e73 Mon Sep 17 00:00:00 2001 From: Gleb Naumenko Date: Wed, 25 Sep 2019 14:11:03 +0300 Subject: [PATCH 01/10] bip for erlay messages --- bip-reconcil.mediawiki | 296 +++++++++++++++++++++++++++ bip-reconcil/bisection.png | Bin 0 -> 60787 bytes bip-reconcil/minisketch.py | 157 ++++++++++++++ bip-reconcil/recon_scheme_merged.png | Bin 0 -> 113169 bytes 4 files changed, 453 insertions(+) create mode 100644 bip-reconcil.mediawiki create mode 100644 bip-reconcil/bisection.png create mode 100755 bip-reconcil/minisketch.py create mode 100644 bip-reconcil/recon_scheme_merged.png diff --git a/bip-reconcil.mediawiki b/bip-reconcil.mediawiki new file mode 100644 index 00000000..be34c554 --- /dev/null +++ b/bip-reconcil.mediawiki @@ -0,0 +1,296 @@ +
+  BIP: ???
+  Layer: Peer Services
+  Title: Transaction announcements reconciliation
+  Author: Gleb Naumenko , Pieter Wuille 
+  Comments-Summary: ???
+  Comments-URI: ???
+  Status: Draft
+  Type: Standards Track
+  Created: 2010-00-00
+  License: PD
+
+ +==Abstract== + +This document specifies a P2P protocol extension for reconciliation of transaction announcements between 2 nodes, which is a building block for efficient transaction relay protocols (e.g., [https://arxiv.org/pdf/1905.10518.pdf Erlay]). This is a step towards increasing the connectivity of the network for almost no bandwidth cost. + +==Motivation== + +Currently in the Bitcoin network, every 32-byte transaction ID is announced in at least one direction between every pair of connected peers, via INV messages. This results in high cost of announcing transactions: ''O(nodes * connections_per_node)''. + +A reconciliation-based protocol which uses the technique suggested in this document can have better scaling properties than INV-based flooding. + +Increasing the connectivity of the network makes the network more robust to partitioning attacks; thus, improving the bandwidth scaling of transaction relay to ''O(nodes)'' (and without a high constant overhead) would allow us to improve the security of the network by increasing connectivity. It would also reduce the bandwidth required to run a Bitcoin node and potentially enable more users to run full nodes. + +===Erlay=== + +[https://arxiv.org/pdf/1905.10518.pdf Erlay] is an example of a high-level transaction relay protocol which employs set reconciliation for bandwidth efficiency. + +Erlay uses both flooding (announcing using INV messages to all peers) and reconciliation to announce transactions. +Flooding is expensive, so Erlay seeks to use it sparingly and in strategic locations - only well-connected publicly reachable nodes flood transactions to other publicly reachable nodes via outbound connections. +Since every unreachable node is directly connected to several reachable nodes, this policy ensures that a transaction is quickly propagated to be within one hop from most of the nodes in the network. + +All transactions not propagated through flooding are propagated through efficient set reconciliation. +To do this, every node keeps a reconciliation set for each peer, in which transactions are placed which would have been announced using INV messages absent this protocol. Every 2 seconds every node chooses a peer from its outbound connections in a predetermined order to reconcile with, resulting in both sides learning the transactions known to the other side. After every reconciliation round, the corresponding reconciliation set is cleared. +A more detailed description of a set reconciliation round and other implementation details can be found in the paper. + +Erlay allows us to: +* save 40% of the bandwidth consumed by a node, given typical network connectivity as of July 2019. +* achieve similar latency +* increase network connectivity for almost no bandwidth or latency cost +* improves privacy as a side-effect + +This document proposes a P2P-layer extension which is required to enable efficient reconciliation-based protocols (like Erlay) for transaction relay. + +==Specification== + +===New data structures=== + +Several new data structures are introduced to the P2P protocol first, to aid with efficient transaction relay. + +====32-bit short transaction IDs==== + +During reconciliation, significantly abbreviated transaction IDs are used of just 32 bits in size. To prevent attackers from constructing sets of transactions that cause network-wide collisions, the short ID computation is salted on a per-link basis using 64 bits of entropy contributed by both communication partners. + +Short IDs are computed as follows: +* Let ''salt1'' and ''salt2'' be the entropy contributed by both sides; see the "sendrecon" message further for details how they are exchanged. +* Sort the two salts such that ''salt1 ≤ salt2'' (which side sent what doesn't matter). +* Compute ''h = SHA256("Tx Relay Salting" || salt1 || salt2)'', where the two salts are encoded in 64-bit little-endian byte order. +* Let ''k0'' be the 64-bit integer obtained by interpreting the first 8 bytes of ''h'' in little-endian byte order. +* Let ''k1'' be the 64-bit integer obtained by interpreting the second 8 bytes of ''h'' in little-endian byte order. +* Let ''s = SipHash-2-4((k0,k1),wtxid)'', where ''wtxid'' is the transaction hash including witness data as defined by BIP141. +* The short ID is equal to ''1 + (s mod 0xFFFFFFFF)''. + +This results in approximately uniformly distributed IDs in the range ''[1..0xFFFFFFFF]'', which is a requirement for using them as elements in 32-bit sketches. See the next paragraph for details. + +====Short transaction ID sketches==== + +Reconciliation-based relay uses [https://www.cs.bu.edu/~reyzin/code/fuzzy.html PinSketch] BCH-based secure sketches as introduced by the [https://www.cs.bu.edu/~reyzin/fuzzy.html Fuzzy Extractors paper]. They are a form of set checksums with the following properties: +* Sketches have a predetermined capacity, and when the number of elements in the set does not exceed the capacity, it is always possible to recover the entire set from the sketch by decoding the sketch. A sketch of nonzero b-bit elements with capacity c can be stored in bc bits. +* A sketch of the [https://en.wikipedia.org/wiki/Symmetric_difference symmetric difference] between the two sets (i.e., all elements that occur in one but not both input sets), can be obtained by combining the sketches of those sets. + +The sketches used here consists of elements of the [https://en.wikipedia.org/wiki/Finite_field finite field] ''GF(232)''. Specifically, we represent finite field elements as polynomials in ''x'' over ''GF(2)'' modulo ''x327 + x3 + x2 + 1''. To map integers to finite field elements, simply treat each bit ''i'' (with value ''2i'') in the integer as the coefficient of ''xi'' in the polynomial representation. For example the integer ''101 = 26 + 25 + 22 + 1'' is mapped to field element ''x6 + x5 + x2 + 1''. These field elements can be added and multiplied together, but the specifics of that are out of scope for this document. + +A short ID sketch with capacity ''c'' consists of a sequence of ''c'' field elements. The first is the sum of all short IDs in the set, the second is the sum of the 3rd powers of all short IDs, the third is the sum of the 5th powers etc., up to the last element with is the sum of the ''(2c-1)''th powers. These elements are then encoded as 32-bit integers in little endian byte order, resulting in a ''4c''-byte serialization. + +The following Python 3.2+ code implements the creation of sketches:
+FIELD_BITS = 32
+FIELD_MODULUS = (1 << FIELD_BITS) + 0b10001101
+
+def mul2(x):
+    """Compute 2*x in GF(2^FIELD_BITS)"""
+    return (x << 1) ^ (FIELD_MODULUS if x.bit_length() >= FIELD_BITS else 0)
+
+def mul(x, y):
+    """Compute x*y in GF(2^FIELD_BITS)"""
+    ret = 0
+    for bit in [(x >> i) & 1 for i in range(x.bit_length())]:
+        ret, y = ret ^ bit * y, mul2(y)
+    return ret
+
+def create_sketch(shortids, capacity):
+    """Compute the bytes of a sketch for given shortids and given capacity."""
+    odd_sums = [0 for _ in range(capacity)]
+    for shortid in shortids:
+        squared = mul(shortid, shortid)
+        for i in range(capacity):
+            odd_sums[i] ^= shortid
+            shortid = mul(shortid, squared)
+    return b''.join(elem.to_bytes(4, 'little') for elem in odd_sums)
+
+ +The [https://github.com/sipa/minisketch/ minisketch] library implements the construction, merging, and decoding of these sketches efficiently. + +====Truncated transaction IDs==== + +For announcing and relaying transaction outside of reconciliation, we need an unambiguous, unsalted way to refer to transactions to deduplicate transaction requests. As we're introducing a new scheme anyway, this is a good opportunity to switch to wtxid-based requests rather than txid-based ones. While using full 256-bit wtxids is possible, this is overkill as they contribute significantly to the total bandwidth as well. Instead, we truncate the wtxid to just their first 128 bits. These are referred to as truncated IDs. + +===Intended Protocol Flow=== + +Set reconciliation primarily consists of the transmission and decoding of a reconciliation set sketch upon request. + +[[File:bip-reconcil/recon_scheme_merged.png|framed|center|Set reconciliation protocol flow]] + +====Bisection==== + +If a node is unable to reconstruct the set difference from the received sketch, the node then makes an additional reconciliation request, similar to the initial one, but this request is applied to only a fraction of possible transactions (e.g., in the range 0x0–0x8). Because of the linearity of sketches, a sketch of a subset of transactions would allow the node to compute a sketch for the remainder, which saves bandwidth. + +[[File:bip-reconcil/bisection.png|framed|300px|center|Bisection]] + +===New messages=== +Several new protocol messages are added: sendrecon, reqreconcil, sketch, reqbisec, reconcildiff, invtx, gettx. This section describes their serialization, contents, and semantics. + +In what follows, all integers are serialized in little-endian byte order. Boolean values are encoded as a single byte that must be 0 or 1 exactly. Arrays are serialized with the CompactSize prefix that encodes their length, as is common in other P2P messages. + +====sendrecon==== +The sendrecon message announces support for the reconciliation protocol. It is expected to be only sent once, and ignored by nodes that don't support it. + +Its payload consists of: +{|class="wikitable" +! Data type !! Name !! Description +|- +| bool || sender || Indicates whether the sender will send "reqreconcil" message +|- +| bool || responder || Indicates whether the sender will respond to "reqreconcil" messages. +|- +| uint32 || version || Must be exactly 1 currently. +|- +| uint64 || salt || The salt used in the short transaction ID computation. +|} + +"reqreconcil" messages can only be sent if the sender has sent a "sendrecon" message with sender=true, and the receiver has sent a "sendrecon" message with responder=true. + +====reqreconcil==== +The reqreconcil message initiates a reconciliation round. + +{|class="wikitable" +! Data type !! Name !! Description +|- +| uint16 || set_size || Size of the sender's reconciliation set, used to estimate set difference. +|- +| uint8 || q || Coefficient used to estimate set difference. +|} + +Upon receipt of a "reqreconcil" message, the receiver: +* Constructs and sends a "sketch" message (see below), with a sketch of capacity computed as ``|set_size - local_set_size| + q * (set_size + local_set_size) + c'', where ''local_set_size'' represents size of the receiver's reconciliation set. +* Makes a snapshot of their current reconciliation set, and clears the set itself. The snapshot is kept until a "reconcildiff" message is received by the node. + +It is suggested to use ''c=1'' to avoid sending empty sketches and reduce the overhead caused by under-estimations. + +Intuitively, ''q'' represents the discrepancy in sets: the closer the sets are, the lower optimal ''q'' is. +As suggested by Erlay, ''q'' should be derived as an optimal ''q'' value for the previous reconciliation with a given peer, once the actual set sizes and set difference are known. Alternatively, ''q=0.1'' should be used as a default value. +For example, if in previous round ''set_size=30'' and ''local_set_size=20'', and the *actual* difference was ''4'', then a node should compute ''q'' as following: +''q=(|30-20| - 1) / (30+20)=0.18'' +The derivation of ''q'' can be changed according to the version of the protocol. + +No new "reqreconcil" message can be sent until a "reconcildiff" message is sent. + +====sketch==== +The sketch message is used to communicate a sketch required to perform set reconciliation. + +{|class="wikitable" +! Data type !! Name !! Description +|- +| byte[] || skdata || The sketch of the sender's reconciliation snapshot +|} + +Upon receipt of a "sketch" message, a node computes the set difference by combining the receiver sketch with a sketch computed locally for a corresponding reconciliation set. If this is the 2nd time for this round a "sketch" message was received, the bisection approach is used, and by combining the new sketch with the previous one, two difference sketches are obtained, one for the first half and one for the second half of the short id range. The receiving node then tries to decode this sketch (or sketches), and based on the result: +* If decoding fails, a "reconcildiff" message is sent with the failure flag set (success=false). If this was the first "sketch" in the round, a "reqbisec" message may be sent instead. +* If decoding succeeds, a "reconcildiff" message is sent with the truncated IDs of all locally known transactions that appear in the decode result, and the short IDs of the unrecognized ones. + +The receiver also makes snapshot of their current reconciliation set, and clears the set itself. The snapshot is kept until a "reconcildiff" message is sent by the node. + +====reqbisec==== +The reqbisec message is used to signal that set reconciliation has failed and an extra sketch is needed to find set difference. + +It has an empty payload. + +Upon receipt of a "reqbisec" message, a node responds to it with a "sketch" message, which contains a sketch of a subset of corresponding reconciliation set snapshot (stored when "reqreconcil" message for the current round was processed) (values in range ''[0..(2^31)]''). + +====reconcildiff==== +The reconcildiff message is used to announce transactions which are found to be missing during set reconciliation on the sender's side. + +{|class="wikitable" +! Data type !! Name !! Description +|- +| uint8 || success || Indicates whether sender of the message succeeded at set difference decoding. +|- +| uint32[] || ask_shortids || The short IDs that the sender did not have. +|} + +Upon receipt a "reconcildiff" message with ''success=1'', a node sends a "invtx" message for the transactions requested by 32-bit IDs (first vector) containing their 128-bit truncated IDs (with parent transactions occuring before their dependencies), and can request announced transactions (second vector) it does not have via a "gettx" message. +Otherwise if ''success=0'', receiver should request bisection via ''reqbisec'' (if failure happened for the first time). +If failure happened for the second time, receiver should announce the transactions from the reconciliation set via an "invtx" message, excluding the transactions announced from the sender. + +The snapshot of the corresponding reconciliation set is cleared by the sender and the receiver of the message. + +The sender should also send their own "invtx" message along with the reconcildiff message to announce transactions which are missing on the receiver's side. + +====invtx==== +The invtx message is used to announce transactions (both along with reconcildiff message and as a response to the reconcildiff message). It is the truncated ID analogue of "inv" (which cannot be used because it has 256-bit elements). + +{|class="wikitable" +! Data type !! Name !! Description +|- +| uint128[] || inv_truncids || The truncated IDs of transactions the sender believes the receiver does not have. +|} + +Upon receipt a "invtx" message, a node requests announced transactions it does not have. +The snapshot of the corresponding reconciliation set is cleared by the sender of the message. + +====gettx==== +The gettx message is used to request transactions by 128-bit truncated IDs. It is the truncated ID analogue of "getdata". + +{|class="wikitable" +! Data type !! Name !! Description +|- +| uint128[] || ask_truncids || The truncated IDs of transactions the sender wants the full transaction data for. +|} + +Upon receipt a "gettx" message, a node sends "tx" messages for the requested transactions. + +==Local state== + +This BIP suggests a stateful protocol and it requires storing several variables at every node to operate properly. + +====Reconciliation sets==== +Every node stores sets of 128-bit truncated IDs per every peer, representing the transactions which would have been sent according to the regular flooding protocol. +Incoming transactions are added to sets when those transactions are received (if they satisfy the policies such as minimum fee set by a peer). +A reconciliation set is moved to the corresponding set snapshot after the transmission of the initial sketch. + +====Reconciliation set snapshot==== +After the transmitting of the initial sketch (either sending or receiving of reconcildiff message), every node should store the snapshot of the current reconciliation set, and clear the set. +This is important to make bisection more stable during the reconciliation round (bisection should be applied to the snapshot). +The snapshot is also used to efficiently lookup the transactions requested by short ID. +The snapshot is cleared after the end of the reconciliation round (sending or receiving of the reconcildiff message). + +====q-coefficient==== +The q value should be stored to make efficient difference estimation. It is shared across peers and changed after every reconciliation. +q-coefficient represents the discrepancy in sets: the closer the sets are, the lower optimal ''q'' is. +In future implementations, q could vary across different peers or become static. + + +==Backward compatibility== + +Older clients remain fully compatible and interoperable after this change. + +Clients which do not implement this protocol remain fully compatible after this change using existing protocols, because transaction announcement reconciliation is used only for peers that negotiate support for it. + +==Rationale== + +====Why using PinSketch for set reconciliation?==== + +To the best of our knowledge, PinSketch is more bandwidth efficient than IBLT, especially for the small differences in sets we expect to operate over. +PinSketch is as bandwidth efficient as CPISync, but PinSketch has quadratic decoding complexity, while CPISync have cubic decoding complexity. This makes PinSketch significantly faster. + +====Why using 32-bit short transaction IDs?==== + +To use Minisketch in practice, transaction IDs should be shortened (ideally, not more than 64 bits per element). +Small number of bits per transaction also allows to save extra bandwidth and make operations over sketches faster. +According to our estimates, 32 bits provides low collision rate in a non-adversarial model (which is enabled by using independent salts per-link). + +====Why using 128-bit short IDs?==== + +To avoid problems caused by the delays in the network, our protocol requires extra round of announcing unsalted transaction IDs. [https://arxiv.org/pdf/1905.10518.pdf Erlay] protocol on top of this work also requires announcing unsalted transaction IDs for flooding. +Both of these measures allow to deduplicate transaction announcements across the peers. +However, using full 256-bit IDs to uniquely identify transactions seems to be an overkill. +128 is the highest power of 2 which provides good enough collision-resistance in an adversarial model, and trivially saves a significant portion of the bandwidth related to these announcements. + +====Why using bisection instead of extending the sketch?==== + +Unlike extended sketches, bisection does not require operating over sketches of higher order. +This allows to avoid the high computational cost caused by quadratic decoding complexity. + +==Implementation== + +TODO + +==Acknowledgments== + +A large fraction of this proposal was done during designing Erlay with Gregory Maxwell, Sasha Fedorova and Ivan Beschastnikh. +We would like to thank Ben Woosley for contributions to the high-level description of the idea. + +==Copyright== + +This document is placed in the public domain. diff --git a/bip-reconcil/bisection.png b/bip-reconcil/bisection.png new file mode 100644 index 0000000000000000000000000000000000000000..70f37e8853621b65a9bcee55ec391f3ff5c51ab7 GIT binary patch literal 60787 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 Nl(?K&$-7U!{~u^bTa*9* literal 0 HcmV?d00001 diff --git a/bip-reconcil/minisketch.py b/bip-reconcil/minisketch.py new file mode 100755 index 00000000..f64286fd --- /dev/null +++ b/bip-reconcil/minisketch.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 + +######## ENCODING and DECODING ######## + +FIELD_BITS = 32 +FIELD_MODULUS = (1 << FIELD_BITS) + 0b10001101 + +def mul2(x): + """Compute 2*x in GF(2^FIELD_BITS)""" + return (x << 1) ^ (FIELD_MODULUS if x.bit_length() >= FIELD_BITS else 0) + +def mul(x, y): + """Compute x*y in GF(2^FIELD_BITS)""" + ret = 0 + for bit in [(x >> i) & 1 for i in range(x.bit_length())]: + ret ^= bit * y + y = mul2(y) + return ret + +######## ENCODING only ######## + +def sketch(shortids, capacity): + """Compute the bytes of a sketch for given shortids and given capacity.""" + odd_sums = [0 for _ in range(capacity)] + for shortid in shortids: + squared = mul(shortid, shortid) + for i in range(capacity): + odd_sums[i] ^= shortid + shortid = mul(shortid, squared) + return b''.join(elem.to_bytes(4, 'little') for elem in odd_sums) + +######## DECODING only ######## + +import random + +def inv(x): + """Compute 1/x in GF(2^FIELD_BITS)""" + t = x + for i in range(FIELD_BITS - 2): + t = mul(mul(t, t), x) + return mul(t, t) + + +def berlekamp_massey(s): + """Given a sequence of LFSR outputs, find the coefficients of the LFSR.""" + C, B, L, m, b = [1], [1], 0, 1, 1 + for n in range(len(s)): + d = s[n] + for i in range(1, L + 1): + d ^= mul(C[i], s[n - i]) + if d == 0: + m += 1 + else: + T = list(C) + while len(C) <= len(B) + m: + C += [0] + t = mul(d, inv(b)) + for i in range(len(B)): + C[i + m] ^= mul(t, B[i]) + if 2 * L <= n: + L, B, b, m = n + 1 - L, T, d, 1 + else: + m += 1 + return C[0:L + 1] + +def poly_monic(p): + """Return the monic multiple of p, or 0 if the input is 0.""" + if len(p) == 0: + return [] + i = inv(p[-1]) + return [mul(v, i) for v in p] + +def poly_divmod(m, p): + """Compute the polynomial quotient p/m, and replace p with p mod m.""" + assert(len(m) > 0 and m[-1] == 1) + div = [0 for _ in range(len(p) - len(m) + 1)] + while len(p) >= len(m): + div[len(p) - len(m)] = p[-1] + for i in range(len(m)): + p[len(p) - len(m) + i] ^= mul(p[-1], m[i]) + assert(p[-1] == 0) + p.pop() + while (len(p) > 0 and p[-1] == 0): + p.pop() + return div + +def poly_gcd(a, b): + """Compute the GCD of a and b (destroys the inputs).""" + if len(a) < len(b): + a, b = b, a + while len(b): + if len(b) == 1: + return [1] + b = poly_monic(b) + poly_divmod(b, a) + a, b = b, a + return a + +def poly_sqr(p): + """Compute the coefficients of the square of polynomial with coefficients p.""" + return [0 if i & 1 else mul(p[i // 2], p[i // 2]) for i in range(2 * len(p))] + +def poly_trace(m, a): + """Compute the coefficients of the trace polynomial of (a*x) mod m.""" + out = [0, a] + for i in range(FIELD_BITS - 1): + out = poly_sqr(out) + while len(out) < 2: + out += [0] + out[1] = a + poly_divmod(m, out) + return out + +def find_roots_inner(p, a): + """Recursive helper function for find_roots (destroys p). a is randomizer.""" + # p must be monic + assert(len(p) > 0 and p[-1] == 1) + # Deal with degree 0 and degree 1 inputs + if len(p) == 1: + return [] + elif len(p) == 2: + return [p[0]] + # Otherwise, split p in left*right using paramater a_vals[0]. + t = poly_monic(poly_trace(p, a)) + left = poly_gcd(list(p), t) + right = poly_divmod(list(left), p) + # Invoke recursion with the remaining a_vals. + ret_right = find_roots_inner(right, mul2(a)) + ret_left = find_roots_inner(left, mul2(a)) + # Concatenate roots + return ret_left + ret_right + +def find_roots(p): + """Find the roots of polynomial with coefficients p.""" + # Compute x^(2^FIELD_BITS)+x mod p in a roundabout way. + t = poly_trace(p, 1) + t2 = poly_sqr(t) + for i in range(len(t)): + t2[i] ^= t[i] + poly_divmod(p, t2) + # If distinct from 0, p is not fully factorizable into non-repeating roots. + if len(t2): + return None + # Invoke the recursive splitting algorithm + return find_roots_inner(list(p), random.randrange(1, 2**32-1)) + +def decode(sketch): + """Recover the shortids from a sketch.""" + odd_sums = [int.from_bytes(sketch[i*4:(i+1)*4], 'little') for i in range(len(sketch) // 4)] + sums = [] + for i in range(len(odd_sums) * 2): + if i & 1: + sums.append(mul(sums[(i-1)//2], sums[(i-1)//2])) + else: + sums.append(odd_sums[(i+1)//2]) + return find_roots(list(reversed(berlekamp_massey(sums)))) + diff --git a/bip-reconcil/recon_scheme_merged.png b/bip-reconcil/recon_scheme_merged.png new file mode 100644 index 0000000000000000000000000000000000000000..11d155927dbdb9121328fa7468eba66d5527acd0 GIT binary patch literal 113169 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 Date: Wed, 25 Sep 2019 08:33:20 -0400 Subject: [PATCH 02/10] bip-reconcil: Switch PD "license" to CC0 See https://github.com/bitcoin/bips/blob/master/bip-0002.mediawiki#recommended-licenses --- bip-reconcil.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-reconcil.mediawiki b/bip-reconcil.mediawiki index be34c554..54dc9f0c 100644 --- a/bip-reconcil.mediawiki +++ b/bip-reconcil.mediawiki @@ -8,7 +8,7 @@ Status: Draft Type: Standards Track Created: 2010-00-00 - License: PD + License: CC0-1.0 ==Abstract== @@ -293,4 +293,4 @@ We would like to thank Ben Woosley for contributions to the high-level descripti ==Copyright== -This document is placed in the public domain. +This document is licensed under the Creative Commons CC0 1.0 Universal license. From 630052355d203bb718f2e2cc8e0e1c6b709d0a68 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Wed, 25 Sep 2019 15:47:11 -0400 Subject: [PATCH 03/10] Update bip-reconcil.mediawiki Fix mediawiki syntax for italic text --- bip-reconcil.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bip-reconcil.mediawiki b/bip-reconcil.mediawiki index 54dc9f0c..e4454ce6 100644 --- a/bip-reconcil.mediawiki +++ b/bip-reconcil.mediawiki @@ -153,7 +153,7 @@ The reqreconcil message initiates a reconciliation round. |} Upon receipt of a "reqreconcil" message, the receiver: -* Constructs and sends a "sketch" message (see below), with a sketch of capacity computed as ``|set_size - local_set_size| + q * (set_size + local_set_size) + c'', where ''local_set_size'' represents size of the receiver's reconciliation set. +* Constructs and sends a "sketch" message (see below), with a sketch of capacity computed as ''|set_size - local_set_size| + q * (set_size + local_set_size) + c'', where ''local_set_size'' represents size of the receiver's reconciliation set. * Makes a snapshot of their current reconciliation set, and clears the set itself. The snapshot is kept until a "reconcildiff" message is received by the node. It is suggested to use ''c=1'' to avoid sending empty sketches and reduce the overhead caused by under-estimations. From 0ee067c70e23aafa8ba433179adabf37181ab13e Mon Sep 17 00:00:00 2001 From: Gleb Naumenko Date: Thu, 26 Sep 2019 07:59:06 +0300 Subject: [PATCH 04/10] Acknowledge suhas' contributions --- bip-reconcil.mediawiki | 1 + 1 file changed, 1 insertion(+) diff --git a/bip-reconcil.mediawiki b/bip-reconcil.mediawiki index 54dc9f0c..cf53776a 100644 --- a/bip-reconcil.mediawiki +++ b/bip-reconcil.mediawiki @@ -289,6 +289,7 @@ TODO ==Acknowledgments== A large fraction of this proposal was done during designing Erlay with Gregory Maxwell, Sasha Fedorova and Ivan Beschastnikh. +We would like to thank Suhas Daftuar for contributions to the design and BIP structure. We would like to thank Ben Woosley for contributions to the high-level description of the idea. ==Copyright== From 32af098957cce3845c02d199483adf4e3948eb57 Mon Sep 17 00:00:00 2001 From: Gleb Naumenko Date: Mon, 30 Sep 2019 11:49:54 +0300 Subject: [PATCH 05/10] minor fixes Co-authored-by: Rusty Russel --- bip-reconcil.mediawiki | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bip-reconcil.mediawiki b/bip-reconcil.mediawiki index cf53776a..61d3968f 100644 --- a/bip-reconcil.mediawiki +++ b/bip-reconcil.mediawiki @@ -134,7 +134,7 @@ Its payload consists of: |- | bool || responder || Indicates whether the sender will respond to "reqreconcil" messages. |- -| uint32 || version || Must be exactly 1 currently. +| uint32 || version || Sender must set this to 1 currently, otherwise receiver should ignore the message. |- | uint64 || salt || The salt used in the short transaction ID computation. |} @@ -149,7 +149,7 @@ The reqreconcil message initiates a reconciliation round. |- | uint16 || set_size || Size of the sender's reconciliation set, used to estimate set difference. |- -| uint8 || q || Coefficient used to estimate set difference. +| uint8 || q || Coefficient used to estimate set difference. Multiplied by PRECISION=2^6 and rounded up by the sender and divided by PRECISION by the receiver. |} Upon receipt of a "reqreconcil" message, the receiver: @@ -235,7 +235,7 @@ Upon receipt a "gettx" message, a node sends "tx" messages for the requested tra This BIP suggests a stateful protocol and it requires storing several variables at every node to operate properly. ====Reconciliation sets==== -Every node stores sets of 128-bit truncated IDs per every peer, representing the transactions which would have been sent according to the regular flooding protocol. +Every node stores a set of 128-bit truncated IDs for every peer which supports transaction reconciliation, representing the transactions which would have been sent according to the regular flooding protocol. Incoming transactions are added to sets when those transactions are received (if they satisfy the policies such as minimum fee set by a peer). A reconciliation set is moved to the corresponding set snapshot after the transmission of the initial sketch. @@ -261,7 +261,7 @@ Clients which do not implement this protocol remain fully compatible after this ====Why using PinSketch for set reconciliation?==== -To the best of our knowledge, PinSketch is more bandwidth efficient than IBLT, especially for the small differences in sets we expect to operate over. +PinSketch is more bandwidth efficient than IBLT, especially for the small differences in sets we expect to operate over. PinSketch is as bandwidth efficient as CPISync, but PinSketch has quadratic decoding complexity, while CPISync have cubic decoding complexity. This makes PinSketch significantly faster. ====Why using 32-bit short transaction IDs?==== From aae7384c46407ac6b63598956b4d1fba27e23c88 Mon Sep 17 00:00:00 2001 From: User Date: Mon, 4 Nov 2019 13:24:24 -0500 Subject: [PATCH 06/10] Assigned a number, separated lines for authors, added License-Code field. --- {bip-reconcil => bip-0330}/bisection.png | Bin {bip-reconcil => bip-0330}/minisketch.py | 0 {bip-reconcil => bip-0330}/recon_scheme_merged.png | Bin bip-reconcil.mediawiki => bip-330.mediawiki | 10 ++++++---- 4 files changed, 6 insertions(+), 4 deletions(-) rename {bip-reconcil => bip-0330}/bisection.png (100%) rename {bip-reconcil => bip-0330}/minisketch.py (100%) rename {bip-reconcil => bip-0330}/recon_scheme_merged.png (100%) rename bip-reconcil.mediawiki => bip-330.mediawiki (98%) diff --git a/bip-reconcil/bisection.png b/bip-0330/bisection.png similarity index 100% rename from bip-reconcil/bisection.png rename to bip-0330/bisection.png diff --git a/bip-reconcil/minisketch.py b/bip-0330/minisketch.py similarity index 100% rename from bip-reconcil/minisketch.py rename to bip-0330/minisketch.py diff --git a/bip-reconcil/recon_scheme_merged.png b/bip-0330/recon_scheme_merged.png similarity index 100% rename from bip-reconcil/recon_scheme_merged.png rename to bip-0330/recon_scheme_merged.png diff --git a/bip-reconcil.mediawiki b/bip-330.mediawiki similarity index 98% rename from bip-reconcil.mediawiki rename to bip-330.mediawiki index 61d3968f..83b35580 100644 --- a/bip-reconcil.mediawiki +++ b/bip-330.mediawiki @@ -1,14 +1,16 @@
-  BIP: ???
+  BIP: 330
   Layer: Peer Services
   Title: Transaction announcements reconciliation
-  Author: Gleb Naumenko , Pieter Wuille 
+  Author: Gleb Naumenko 
+          Pieter Wuille 
   Comments-Summary: ???
   Comments-URI: ???
   Status: Draft
   Type: Standards Track
   Created: 2010-00-00
   License: CC0-1.0
+  License-Code: MIT
 
==Abstract== @@ -110,13 +112,13 @@ For announcing and relaying transaction outside of reconciliation, we need an un Set reconciliation primarily consists of the transmission and decoding of a reconciliation set sketch upon request. -[[File:bip-reconcil/recon_scheme_merged.png|framed|center|Set reconciliation protocol flow]] +[[File:bip-330/recon_scheme_merged.png|framed|center|Set reconciliation protocol flow]] ====Bisection==== If a node is unable to reconstruct the set difference from the received sketch, the node then makes an additional reconciliation request, similar to the initial one, but this request is applied to only a fraction of possible transactions (e.g., in the range 0x0–0x8). Because of the linearity of sketches, a sketch of a subset of transactions would allow the node to compute a sketch for the remainder, which saves bandwidth. -[[File:bip-reconcil/bisection.png|framed|300px|center|Bisection]] +[[File:bip-330/bisection.png|framed|300px|center|Bisection]] ===New messages=== Several new protocol messages are added: sendrecon, reqreconcil, sketch, reqbisec, reconcildiff, invtx, gettx. This section describes their serialization, contents, and semantics. From 2e7dab87ef6822d2ed81df0eaa8e4fa9a665e86c Mon Sep 17 00:00:00 2001 From: User Date: Mon, 4 Nov 2019 13:30:08 -0500 Subject: [PATCH 07/10] added missing leading zero --- bip-330.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bip-330.mediawiki b/bip-330.mediawiki index 36dbdd40..197f94ef 100644 --- a/bip-330.mediawiki +++ b/bip-330.mediawiki @@ -112,13 +112,13 @@ For announcing and relaying transaction outside of reconciliation, we need an un Set reconciliation primarily consists of the transmission and decoding of a reconciliation set sketch upon request. -[[File:bip-330/recon_scheme_merged.png|framed|center|Set reconciliation protocol flow]] +[[File:bip-0330/recon_scheme_merged.png|framed|center|Set reconciliation protocol flow]] ====Bisection==== If a node is unable to reconstruct the set difference from the received sketch, the node then makes an additional reconciliation request, similar to the initial one, but this request is applied to only a fraction of possible transactions (e.g., in the range 0x0–0x8). Because of the linearity of sketches, a sketch of a subset of transactions would allow the node to compute a sketch for the remainder, which saves bandwidth. -[[File:bip-330/bisection.png|framed|300px|center|Bisection]] +[[File:bip-0330/bisection.png|framed|300px|center|Bisection]] ===New messages=== Several new protocol messages are added: sendrecon, reqreconcil, sketch, reqbisec, reconcildiff, invtx, gettx. This section describes their serialization, contents, and semantics. From 7f9ad3ebe53290b22d3a809d3ef1566d12fbceab Mon Sep 17 00:00:00 2001 From: User Date: Mon, 4 Nov 2019 13:39:01 -0500 Subject: [PATCH 08/10] add trailing zero to the file name --- bip-330.mediawiki => bip-0330.mediawiki | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bip-330.mediawiki => bip-0330.mediawiki (100%) diff --git a/bip-330.mediawiki b/bip-0330.mediawiki similarity index 100% rename from bip-330.mediawiki rename to bip-0330.mediawiki From affe5cb8810b4009e249b05abe5cb193b05d86a4 Mon Sep 17 00:00:00 2001 From: User Date: Tue, 5 Nov 2019 11:55:26 -0500 Subject: [PATCH 09/10] Add comments links and created date. --- bip-0330.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bip-0330.mediawiki b/bip-0330.mediawiki index 197f94ef..581b6aef 100644 --- a/bip-0330.mediawiki +++ b/bip-0330.mediawiki @@ -4,11 +4,11 @@ Title: Transaction announcements reconciliation Author: Gleb Naumenko Pieter Wuille - Comments-Summary: ??? - Comments-URI: ??? + Comments-Summary: No comments yet. + Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0330 Status: Draft Type: Standards Track - Created: 2010-00-00 + Created: 2019-09-25 License: CC0-1.0 License-Code: MIT From 544e883488831d67b54f84214006eb8ad761f87b Mon Sep 17 00:00:00 2001 From: User Date: Tue, 5 Nov 2019 12:38:51 -0500 Subject: [PATCH 10/10] update readme --- README.mediawiki | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.mediawiki b/README.mediawiki index de98f05c..b081c5e1 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -910,6 +910,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Karl-Johan Alm | Standard | Draft +|- +| [[bip-0330.mediawiki|330]] +| Peer Services +| Transaction announcements reconciliation +| Gleb Naumenko, Pieter Wuille +| Standard +| Draft |}