diff --git a/test/functional/mempool_package_limits.py b/test/functional/mempool_package_limits.py index f324c4de73ce..010c9539cd1b 100755 --- a/test/functional/mempool_package_limits.py +++ b/test/functional/mempool_package_limits.py @@ -33,8 +33,8 @@ def run_test(self): self.test_anc_count_limits_2() self.test_anc_count_limits_bushy() - # The node will accept our (nonstandard) extra large OP_RETURN outputs - self.restart_node(0, extra_args=["-acceptnonstdtxn=1"]) + # The node will accept (nonstandard) extra large OP_RETURN outputs + self.restart_node(0, extra_args=["-datacarriersize=100000"]) self.test_anc_size_limits() self.test_desc_size_limits() diff --git a/test/functional/test_framework/wallet.py b/test/functional/test_framework/wallet.py index 277a795bbc73..d17562a1843d 100644 --- a/test/functional/test_framework/wallet.py +++ b/test/functional/test_framework/wallet.py @@ -29,9 +29,10 @@ ) from test_framework.script import ( CScript, - SignatureHash, - OP_TRUE, OP_NOP, + OP_RETURN, + OP_TRUE, + SignatureHash, SIGHASH_ALL, ) from test_framework.script_util import ( @@ -97,11 +98,18 @@ def _bulk_tx(self, tx, target_weight): """Pad a transaction with extra outputs until it reaches a target weight (or higher). returns the tx """ - assert_greater_than_or_equal(target_weight, tx.get_weight()) - while tx.get_weight() < target_weight: - script_pubkey = ( b"6a4d0200" # OP_RETURN OP_PUSH2 512 bytes - + b"01" * 512 ) - tx.vout.append(CTxOut(0, script_pubkey)) + tx.vout.append(CTxOut(nValue=0, scriptPubKey=CScript([OP_RETURN, b'a']))) + # In Dash, get_weight() returns vsize directly (no witness scaling factor like Bitcoin's 4) + # Bitcoin's formula: (target_weight - tx.get_weight() + 3) // 4 + # - The +3 ensures rounding up when dividing by 4 + # - After division, this adds 0-3 vbytes depending on remainder + # For Dash (no division by 4), we calculate bytes needed directly + dummy_vbytes = target_weight - tx.get_weight() + tx.vout[-1].scriptPubKey = CScript([OP_RETURN, b'a' * dummy_vbytes]) + # Lower bound should always be off by at most 3 + assert_greater_than_or_equal(tx.get_weight(), target_weight) + # Higher bound should always be off by at most 3 + 12 weight (for encoding the length) + assert_greater_than_or_equal(target_weight + 15, tx.get_weight()) def get_balance(self): return sum(u['value'] for u in self._utxos)