Skip to content

Commit 165bbb4

Browse files
fanquakevijaydasmp
authored andcommitted
Merge bitcoin#27832: doc: Clarify -datacarriersize, add -datacarriersize=2 tests
faafc35 doc: Clarify that -datacarriersize applies to the full raw scriptPubKey, not the data push (MarcoFalke) 55550e7 test: Add -datacarriersize=2 tests (MarcoFalke) Pull request description: Clarify with a test that `-datacarriersize` applies to the serialized size of the scriptPubKey, not the size of the pushed data. So for example, * `-datacarriersize=2` will reject a `raw(6a01aa)`, even though only one byte is pushed * `-datacarriersize=0` (or `-datacarrier=0`) will reject a `raw(6a)`, even though no byte is pushed * `-datacarriersize=0` (or `-datacarrier=0`) will reject a `raw(6a00)`, even though zero bytes are pushed ACKs for top commit: ajtowns: ACK faafc35 instagibbs: ACK bitcoin@faafc35 Tree-SHA512: f01ace02798f596ac2a02461e9f2a6ef91b3b37c976ea0b3bc860e2d3efb0ace0fd8b779dd18249cee7f84ebbe5fd21d8506afd3a15edadc00b843ff3b4aacc7
1 parent 68f4246 commit 165bbb4

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

src/init.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,11 @@ void SetupServerArgs(ArgsManager& argsman)
783783
argsman.AddArg("-incrementalrelayfee=<amt>", strprintf("Fee rate (in %s/kB) used to define cost of relay, used for mempool limiting. (default: %s)", CURRENCY_UNIT, FormatMoney(DEFAULT_INCREMENTAL_RELAY_FEE)), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::NODE_RELAY);
784784
argsman.AddArg("-bytespersigop", strprintf("Equivalent bytes per sigop in transactions for relay and mining (default: %u)", DEFAULT_BYTES_PER_SIGOP), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
785785
argsman.AddArg("-datacarrier", strprintf("Relay and mine data carrier transactions (default: %u)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
786-
argsman.AddArg("-datacarriersize", strprintf("Maximum size of data in data carrier transactions we relay and mine (default: %u)", MAX_OP_RETURN_RELAY), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
786+
argsman.AddArg("-datacarriersize",
787+
strprintf("Relay and mine transactions whose data-carrying raw scriptPubKey "
788+
"is of this size or less (default: %u)",
789+
MAX_OP_RETURN_RELAY),
790+
ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
787791
argsman.AddArg("-permitbaremultisig", strprintf("Relay non-P2SH multisig (default: %u)", DEFAULT_PERMIT_BAREMULTISIG), ArgsManager::ALLOW_ANY,
788792
OptionsCategory::NODE_RELAY);
789793
argsman.AddArg("-minrelaytxfee=<amt>", strprintf("Fees (in %s/kB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s)",

test/functional/mempool_datacarrier.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,18 @@
2222

2323
class DataCarrierTest(BitcoinTestFramework):
2424
def set_test_params(self):
25-
self.num_nodes = 3
25+
self.num_nodes = 4
2626
self.extra_args = [
2727
[],
2828
["-datacarrier=0"],
29-
["-datacarrier=1", f"-datacarriersize={MAX_OP_RETURN_RELAY - 1}"]
29+
["-datacarrier=1", f"-datacarriersize={MAX_OP_RETURN_RELAY - 1}"],
30+
["-datacarrier=1", f"-datacarriersize=2"],
3031
]
3132

32-
def test_null_data_transaction(self, node: TestNode, data: bytes, success: bool) -> None:
33+
def test_null_data_transaction(self, node: TestNode, data, success: bool) -> None:
3334
tx = self.wallet.create_self_transfer(fee_rate=0)["tx"]
34-
tx.vout.append(CTxOut(nValue=0, scriptPubKey=CScript([OP_RETURN, data])))
35+
data = [] if data is None else [data]
36+
tx.vout.append(CTxOut(nValue=0, scriptPubKey=CScript([OP_RETURN] + data)))
3537
tx.vout[0].nValue -= tx.get_vsize() # simply pay 1sat/vbyte fee
3638

3739
tx_hex = tx.serialize().hex()
@@ -50,6 +52,8 @@ def run_test(self):
5052
default_size_data = random_bytes(MAX_OP_RETURN_RELAY - 3)
5153
too_long_data = random_bytes(MAX_OP_RETURN_RELAY - 2)
5254
small_data = random_bytes(MAX_OP_RETURN_RELAY - 4)
55+
one_byte = random_bytes(1)
56+
zero_bytes = random_bytes(0)
5357

5458
self.log.info("Testing null data transaction with default -datacarrier and -datacarriersize values.")
5559
self.test_null_data_transaction(node=self.nodes[0], data=default_size_data, success=True)
@@ -66,6 +70,24 @@ def run_test(self):
6670
self.log.info("Testing a null data transaction with a size smaller than accepted by -datacarriersize.")
6771
self.test_null_data_transaction(node=self.nodes[2], data=small_data, success=True)
6872

73+
self.log.info("Testing a null data transaction with no data.")
74+
self.test_null_data_transaction(node=self.nodes[0], data=None, success=True)
75+
self.test_null_data_transaction(node=self.nodes[1], data=None, success=False)
76+
self.test_null_data_transaction(node=self.nodes[2], data=None, success=True)
77+
self.test_null_data_transaction(node=self.nodes[3], data=None, success=True)
78+
79+
self.log.info("Testing a null data transaction with zero bytes of data.")
80+
self.test_null_data_transaction(node=self.nodes[0], data=zero_bytes, success=True)
81+
self.test_null_data_transaction(node=self.nodes[1], data=zero_bytes, success=False)
82+
self.test_null_data_transaction(node=self.nodes[2], data=zero_bytes, success=True)
83+
self.test_null_data_transaction(node=self.nodes[3], data=zero_bytes, success=True)
84+
85+
self.log.info("Testing a null data transaction with one byte of data.")
86+
self.test_null_data_transaction(node=self.nodes[0], data=one_byte, success=True)
87+
self.test_null_data_transaction(node=self.nodes[1], data=one_byte, success=False)
88+
self.test_null_data_transaction(node=self.nodes[2], data=one_byte, success=True)
89+
self.test_null_data_transaction(node=self.nodes[3], data=one_byte, success=False)
90+
6991

7092
if __name__ == '__main__':
7193
DataCarrierTest().main()

0 commit comments

Comments
 (0)