Skip to content

Commit 919ae8b

Browse files
committed
[doc] current rbf policy
1 parent 8c0bd87 commit 919ae8b

File tree

2 files changed

+76
-2
lines changed

2 files changed

+76
-2
lines changed

doc/policy/README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
# Transaction Relay Policy
22

3-
Policy is a set of validation rules, in addition to consensus, enforced for unconfirmed
4-
transactions.
3+
**Policy** (Mempool or Transaction Relay Policy) is the node's set of validation rules, in addition
4+
to consensus, enforced for unconfirmed transactions before submitting them to the mempool. These
5+
rules are local to the node and configurable (e.g. `-minrelaytxfee`, `-limitancestorsize`,
6+
`-incrementalRelayFee`). Policy may include restrictions on the transaction itself, the transaction
7+
in relation to the current chain tip, and the transaction in relation to the node's mempool
8+
contents. Policy is *not* applied to transactions in blocks.
59

610
This documentation is not an exhaustive list of all policy rules.
711

12+
- [Mempool Replacements](mempool-replacements.md)
813
- [Packages](packages.md)
914

1015

doc/policy/mempool-replacements.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Mempool Replacements
2+
3+
## Current Replace-by-Fee Policy
4+
5+
A transaction conflicts with an in-mempool transaction ("directly conflicting transaction") if they
6+
spend one or more of the same inputs. A transaction may conflict with multiple in-mempool
7+
transactions.
8+
9+
A transaction ("replacement transaction") may replace its directly conflicting transactions and
10+
their in-mempool descendants (together, "original transactions") if, in addition to passing all
11+
other consensus and policy rules, each of the following conditions are met:
12+
13+
1. The directly conflicting transactions all signal replaceability explicitly. A transaction is
14+
signaling replaceability if any of its inputs have an nSequence number less than (0xffffffff - 1).
15+
16+
*Rationale*: See [BIP125
17+
explanation](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki#motivation).
18+
19+
2. The replacement transaction only include an unconfirmed input if that input was included in
20+
one of the directly conflicting transactions. An unconfirmed input spends an output from a
21+
currently-unconfirmed transaction.
22+
23+
*Rationale*: When RBF was originally implemented, the mempool did not keep track of
24+
ancestor feerates yet. This rule was suggested as a temporary restriction.
25+
26+
3. The replacement transaction pays an absolute fee of at least the sum paid by the original
27+
transactions.
28+
29+
*Rationale*: Only requiring the replacement transaction to have a higher feerate could allow an
30+
attacker to bypass node minimum relay feerate requirements and cause the network to repeatedly
31+
relay slightly smaller replacement transactions without adding any more fees. Additionally, if
32+
any of the original transactions would be included in the next block assembled by an economically
33+
rational miner, a replacement policy allowing the replacement transaction to decrease the absolute
34+
fees in the next block would be incentive-incompatible.
35+
36+
4. The additional fees (difference between absolute fee paid by the replacement transaction and the
37+
sum paid by the original transactions) pays for the replacement transaction's bandwidth at or
38+
above the rate set by the node's incremental relay feerate. For example, if the incremental relay
39+
feerate is 1 satoshi/vB and the replacement transaction is 500 virtual bytes total, then the
40+
replacement pays a fee at least 500 satoshis higher than the sum of the original transactions.
41+
42+
*Rationale*: Try to prevent DoS attacks where an attacker causes the network to repeatedly relay
43+
transactions each paying a tiny additional amount in fees, e.g. just 1 satoshi.
44+
45+
5. The number of original transactions does not exceed 100. More precisely, the sum of all
46+
directly conflicting transactions' descendant counts (number of transactions inclusive of itself
47+
and its descendants) must not exceed 100; it is possible that this overestimates the true number
48+
of original transactions.
49+
50+
*Rationale*: Try to prevent DoS attacks where an attacker is able to easily occupy and flush out
51+
significant portions of the node's mempool using replacements with multiple directly conflicting
52+
transactions, each with large descendant sets.
53+
54+
This set of rules is similar but distinct from BIP125.
55+
56+
## History
57+
58+
* Opt-in full replace-by-fee (without inherited signaling) honoured in mempool and mining as of
59+
**v0.12.0** ([PR 6871](https://github.com/bitcoin/bitcoin/pull/6871)).
60+
61+
* [BIP125](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki) defined based on
62+
Bitcoin Core implementation.
63+
64+
* The incremental relay feerate used to calculate the required additional fees is distinct from
65+
`minRelayTxFee` and configurable using `-incrementalrelayfee`
66+
([PR #9380](https://github.com/bitcoin/bitcoin/pull/9380)).
67+
68+
* RBF enabled by default in the wallet GUI as of **v0.18.1** ([PR
69+
#11605](https://github.com/bitcoin/bitcoin/pull/11605)).

0 commit comments

Comments
 (0)