From 8b9a5048e24c9ca8714f97edad28695231d4c3a8 Mon Sep 17 00:00:00 2001 From: jnewbery Date: Wed, 5 Oct 2016 14:10:28 -0400 Subject: [PATCH 1/2] Add feefilter documentation --- _includes/devdoc/ref_p2p_networking.md | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/_includes/devdoc/ref_p2p_networking.md b/_includes/devdoc/ref_p2p_networking.md index 626dc59f..087e1650 100644 --- a/_includes/devdoc/ref_p2p_networking.md +++ b/_includes/devdoc/ref_p2p_networking.md @@ -792,6 +792,46 @@ alert.cpp] source code for the parameters of this message. {% endautocrossref %} +#### FeeFilter +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70013 as described by BIP133.* + +The `feefilter` message is a request to the receiving peer to not relay any +transaction inv messages to the sending peer where the fee rate for the +transaction is below the fee rate specified in the feefilter message. + +`feefilter` was introduced in V0.13.0 following the introduction +of mempool limiting in V0.12.0. Mempool limiting provides protection against +attacks and spam transactions that have low fee rates and are unlikely to be +included in mined blocks. The `feefilter` messages allows a node to inform its +peers that it will not accept transactions below a specified fee rate into +its mempool, and therefore that the peers can skip relaying inv messages for +transactions below that fee rate to that node. + +| Bytes | Name | Data Type | Description +|-------|---------|-----------|--------------- +| 8 | feerate | uint64_t | The fee rate (in Satoshis per kilobyte) under which transactions should not be relayed to this peer. + +The receiving peer may choose to ignore the message and not filter transaction +inv messages. + +The fee filter is additive with bloom filters. If an SPV client loads a bloom +filter and sends a feefilter message, transactions should only be relayed if +they pass both filters. + +Note however that feefilter has no effect on block propagation or responses to +getdata messages. For example, if a node requests a merkleblock from its peer +by sending a getdata message with inv type MSG_FILTERED_BLOCK and it has +previously sent a feefilter to that peer, the peer should respond with a +merkleblock containing *all* the transactions matching the bloom filter, even +if they are below the feefilter fee rate. + +inv messages generated from a mempool message are subject to a fee filter if it exists. + +{% endautocrossref %} #### FilterAdd {% include helpers/subhead-links.md %} From 2b32781db468290fb57007fb4769732f23a05c5d Mon Sep 17 00:00:00 2001 From: "David A. Harding" Date: Wed, 21 Dec 2016 21:21:38 -0500 Subject: [PATCH 2/2] Dev Docs: P2P feefilter: add extra details - Add annotated hex example - Add search box entry and autocrossref entry - Add Bitcoin Core 0.12/0.13 cross links --- _autocrossref.yaml | 2 ++ _config.yml | 1 + _includes/devdoc/ref_p2p_networking.md | 14 +++++++++++--- _includes/references.md | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/_autocrossref.yaml b/_autocrossref.yaml index 6cd6665f..3dddb596 100644 --- a/_autocrossref.yaml +++ b/_autocrossref.yaml @@ -27,6 +27,8 @@ DER-formatted: der ECDSA: epoch time: unix epoch time '`expires`': pp expires +'`feefilter` message': feefilter message +'`feefilter` messages': feefilter message fiat: '`filteradd` message': filteradd message '`filteradd` messages': filteradd message diff --git a/_config.yml b/_config.yml index c4296515..82cf25db 100644 --- a/_config.yml +++ b/_config.yml @@ -532,6 +532,7 @@ devsearches: - "addr": "/en/developer-reference#addr" - "alert": "/en/developer-reference#alert" - "block": "/en/developer-reference#block" + - "feefilter": "/en/developer-reference#feefilter" - "filteradd": "/en/developer-reference#filteradd" - "filterclear": "/en/developer-reference#filterclear" - "filterload": "/en/developer-reference#filterload" diff --git a/_includes/devdoc/ref_p2p_networking.md b/_includes/devdoc/ref_p2p_networking.md index 087e1650..3c84133d 100644 --- a/_includes/devdoc/ref_p2p_networking.md +++ b/_includes/devdoc/ref_p2p_networking.md @@ -803,8 +803,8 @@ The `feefilter` message is a request to the receiving peer to not relay any transaction inv messages to the sending peer where the fee rate for the transaction is below the fee rate specified in the feefilter message. -`feefilter` was introduced in V0.13.0 following the introduction -of mempool limiting in V0.12.0. Mempool limiting provides protection against +`feefilter` was introduced in Bitcoin Core 0.13.0 following the introduction +of mempool limiting in Bitcoin Core 0.12.0. Mempool limiting provides protection against attacks and spam transactions that have low fee rates and are unlikely to be included in mined blocks. The `feefilter` messages allows a node to inform its peers that it will not accept transactions below a specified fee rate into @@ -813,7 +813,7 @@ transactions below that fee rate to that node. | Bytes | Name | Data Type | Description |-------|---------|-----------|--------------- -| 8 | feerate | uint64_t | The fee rate (in Satoshis per kilobyte) under which transactions should not be relayed to this peer. +| 8 | feerate | uint64_t | The fee rate (in satoshis per kilobyte) below which transactions should not be relayed to this peer. The receiving peer may choose to ignore the message and not filter transaction inv messages. @@ -831,8 +831,16 @@ if they are below the feefilter fee rate. inv messages generated from a mempool message are subject to a fee filter if it exists. +The annotated hexdump below shows a `feefilter` message. (The message +header has been omitted.) + {% endautocrossref %} +{% highlight text %} +7cbd000000000000 ... satoshis per kilobyte: 48,508 +{% endhighlight %} + + #### FilterAdd {% include helpers/subhead-links.md %} diff --git a/_includes/references.md b/_includes/references.md index c03c04c4..ff10e477 100644 --- a/_includes/references.md +++ b/_includes/references.md @@ -180,6 +180,7 @@ http://opensource.org/licenses/MIT. [addr message]: /en/developer-reference#addr "The P2P network message which relays IP addresses and port numbers of active nodes to other nodes and clients, allowing decentralized peer discovery." [alert message]: /en/developer-reference#alert "The P2P network message which sends alerts in case of major software problems." [block message]: /en/developer-reference#block "The P2P network message which sends a serialized block" +[feefilter message]: /en/developer-reference#feefilter "The P2P network message which requests the receiving peer not relay any transactions below the specified fee rate" [filteradd message]: /en/developer-reference#filteradd "A P2P protocol message used to add a data element to an existing bloom filter." [filterclear message]: /en/developer-reference#filterclear "A P2P protocol message used to remove an existing bloom filter." [filterload message]: /en/developer-reference#filterclear "A P2P protocol message used to send a filter to a remote peer, requesting that they only send transactions which match the filter."