mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 14:59:39 -04:00
Merge bitcoin/bitcoin#30493: policy: enable full-rbf by default
590456e3f1
policy: enable full-rbf by default (Peter Todd)195e98ea8e
doc: add release notes for full-rbf (Peter Todd) Pull request description: This pull request enables full rbf (mempool policy) by default. #28132 was closed recently with this [comment](https://github.com/bitcoin/bitcoin/pull/28132#issuecomment-2225369634). --- Rationale: - Full RBF config option was added in July 2022: https://github.com/bitcoin/bitcoin/pull/25353 - It is used regularly: https://mempool.space/rbf#fullrbf - Most mining pools are using it: https://github.com/bitcoin/bitcoin/pull/28132#issuecomment-2059120917 ACKs for top commit: petertodd: ACK590456e3f1
instagibbs: reACK590456e3f1
glozow: reACK590456e3f1
achow101: ACK590456e3f1
ariard: tested ACK590456e3
murchandamus: reACK590456e3f1
Tree-SHA512: 83fceef9961021687e6ff979041f89be0c616f7a49cc28a5d7edf7d8ad064fcb9c0e2af0c31f4f89867a9f6dff4e40ef8ad4dbd624e7d6a4e00ac1f1c1f66c7a
This commit is contained in:
commit
902dd14382
6 changed files with 15 additions and 4 deletions
4
doc/release-notes-30493.md
Normal file
4
doc/release-notes-30493.md
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Full Replace-By-Fee
|
||||||
|
===================
|
||||||
|
|
||||||
|
`mempoolfullrbf=1` is now set by default.
|
|
@ -22,7 +22,7 @@ static constexpr unsigned int DEFAULT_BLOCKSONLY_MAX_MEMPOOL_SIZE_MB{5};
|
||||||
/** Default for -mempoolexpiry, expiration time for mempool transactions in hours */
|
/** Default for -mempoolexpiry, expiration time for mempool transactions in hours */
|
||||||
static constexpr unsigned int DEFAULT_MEMPOOL_EXPIRY_HOURS{336};
|
static constexpr unsigned int DEFAULT_MEMPOOL_EXPIRY_HOURS{336};
|
||||||
/** Default for -mempoolfullrbf, if the transaction replaceability signaling is ignored */
|
/** Default for -mempoolfullrbf, if the transaction replaceability signaling is ignored */
|
||||||
static constexpr bool DEFAULT_MEMPOOL_FULL_RBF{false};
|
static constexpr bool DEFAULT_MEMPOOL_FULL_RBF{true};
|
||||||
/** Whether to fall back to legacy V1 serialization when writing mempool.dat */
|
/** Whether to fall back to legacy V1 serialization when writing mempool.dat */
|
||||||
static constexpr bool DEFAULT_PERSIST_V1_DAT{false};
|
static constexpr bool DEFAULT_PERSIST_V1_DAT{false};
|
||||||
/** Default for -acceptnonstdtxn */
|
/** Default for -acceptnonstdtxn */
|
||||||
|
|
|
@ -26,15 +26,18 @@ class ReplaceByFeeTest(BitcoinTestFramework):
|
||||||
|
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.num_nodes = 2
|
self.num_nodes = 2
|
||||||
|
# both nodes disable full-rbf to test BIP125 signaling
|
||||||
self.extra_args = [
|
self.extra_args = [
|
||||||
[
|
[
|
||||||
|
"-mempoolfullrbf=0",
|
||||||
"-limitancestorcount=50",
|
"-limitancestorcount=50",
|
||||||
"-limitancestorsize=101",
|
"-limitancestorsize=101",
|
||||||
"-limitdescendantcount=200",
|
"-limitdescendantcount=200",
|
||||||
"-limitdescendantsize=101",
|
"-limitdescendantsize=101",
|
||||||
],
|
],
|
||||||
# second node has default mempool parameters
|
# second node has default mempool parameters, besides mempoolfullrbf being disabled
|
||||||
[
|
[
|
||||||
|
"-mempoolfullrbf=0",
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
self.supports_cli = False
|
self.supports_cli = False
|
||||||
|
|
|
@ -55,6 +55,7 @@ class MempoolAcceptanceTest(BitcoinTestFramework):
|
||||||
self.num_nodes = 1
|
self.num_nodes = 1
|
||||||
self.extra_args = [[
|
self.extra_args = [[
|
||||||
'-txindex','-permitbaremultisig=0',
|
'-txindex','-permitbaremultisig=0',
|
||||||
|
'-mempoolfullrbf=0',
|
||||||
]] * self.num_nodes
|
]] * self.num_nodes
|
||||||
self.supports_cli = False
|
self.supports_cli = False
|
||||||
|
|
||||||
|
|
|
@ -162,7 +162,7 @@ class MempoolTRUC(BitcoinTestFramework):
|
||||||
self.check_mempool([tx_v3_bip125_rbf_v2["txid"], tx_v3_parent["txid"], tx_v3_child["txid"]])
|
self.check_mempool([tx_v3_bip125_rbf_v2["txid"], tx_v3_parent["txid"], tx_v3_child["txid"]])
|
||||||
|
|
||||||
|
|
||||||
@cleanup(extra_args=None)
|
@cleanup(extra_args=["-mempoolfullrbf=0"])
|
||||||
def test_truc_bip125(self):
|
def test_truc_bip125(self):
|
||||||
node = self.nodes[0]
|
node = self.nodes[0]
|
||||||
self.log.info("Test TRUC transactions that don't signal BIP125 are replaceable")
|
self.log.info("Test TRUC transactions that don't signal BIP125 are replaceable")
|
||||||
|
|
|
@ -119,6 +119,9 @@ class P2PPermissionsTests(BitcoinTestFramework):
|
||||||
|
|
||||||
self.log.debug("Check that node[1] will not send an invalid tx to node[0]")
|
self.log.debug("Check that node[1] will not send an invalid tx to node[0]")
|
||||||
tx.vout[0].nValue += 1
|
tx.vout[0].nValue += 1
|
||||||
|
# add dust to cause policy rejection but no disconnection
|
||||||
|
tx.vout.append(tx.vout[0])
|
||||||
|
tx.vout[-1].nValue = 0
|
||||||
txid = tx.rehash()
|
txid = tx.rehash()
|
||||||
# Send the transaction twice. The first time, it'll be rejected by ATMP because it conflicts
|
# Send the transaction twice. The first time, it'll be rejected by ATMP because it conflicts
|
||||||
# with a mempool transaction. The second time, it'll be in the m_lazy_recent_rejects filter.
|
# with a mempool transaction. The second time, it'll be in the m_lazy_recent_rejects filter.
|
||||||
|
@ -126,7 +129,7 @@ class P2PPermissionsTests(BitcoinTestFramework):
|
||||||
[tx],
|
[tx],
|
||||||
self.nodes[1],
|
self.nodes[1],
|
||||||
success=False,
|
success=False,
|
||||||
reject_reason='{} (wtxid={}) from peer=0 was not accepted: txn-mempool-conflict'.format(txid, tx.getwtxid())
|
reject_reason='{} (wtxid={}) from peer=0 was not accepted: dust'.format(txid, tx.getwtxid())
|
||||||
)
|
)
|
||||||
|
|
||||||
p2p_rebroadcast_wallet.send_txs_and_test(
|
p2p_rebroadcast_wallet.send_txs_and_test(
|
||||||
|
|
Loading…
Add table
Reference in a new issue