test: Target exact weight in MiniWallet _bulk_tx

Also, replace broad -acceptnonstdtxn=1 with -datacarriersize=100000
This commit is contained in:
MacroFake 2022-08-03 12:10:52 +02:00
parent 9155f9b7af
commit fa2537cf0a
No known key found for this signature in database
GPG Key ID: CE2B75697E69A548
2 changed files with 10 additions and 7 deletions

View File

@ -35,8 +35,8 @@ class MempoolPackageLimitsTest(BitcoinTestFramework):
self.test_anc_count_limits_2() self.test_anc_count_limits_2()
self.test_anc_count_limits_bushy() self.test_anc_count_limits_bushy()
# The node will accept our (nonstandard) extra large OP_RETURN outputs # The node will accept (nonstandard) extra large OP_RETURN outputs
self.restart_node(0, extra_args=["-acceptnonstdtxn=1"]) self.restart_node(0, extra_args=["-datacarriersize=100000"])
self.test_anc_size_limits() self.test_anc_size_limits()
self.test_desc_size_limits() self.test_desc_size_limits()

View File

@ -39,6 +39,7 @@ from test_framework.script import (
LegacySignatureHash, LegacySignatureHash,
LEAF_VERSION_TAPSCRIPT, LEAF_VERSION_TAPSCRIPT,
OP_NOP, OP_NOP,
OP_RETURN,
OP_TRUE, OP_TRUE,
SIGHASH_ALL, SIGHASH_ALL,
taproot_construct, taproot_construct,
@ -107,11 +108,13 @@ class MiniWallet:
"""Pad a transaction with extra outputs until it reaches a target weight (or higher). """Pad a transaction with extra outputs until it reaches a target weight (or higher).
returns the tx returns the tx
""" """
assert_greater_than_or_equal(target_weight, tx.get_weight()) tx.vout.append(CTxOut(nValue=0, scriptPubKey=CScript([OP_RETURN, b'a'])))
while tx.get_weight() < target_weight: dummy_vbytes = (target_weight - tx.get_weight() + 3) // 4
script_pubkey = ( b"6a4d0200" # OP_RETURN OP_PUSH2 512 bytes tx.vout[-1].scriptPubKey = CScript([OP_RETURN, b'a' * dummy_vbytes])
+ b"01" * 512 ) # Lower bound should always be off by at most 3
tx.vout.append(CTxOut(0, script_pubkey)) 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): def get_balance(self):
return sum(u['value'] for u in self._utxos) return sum(u['value'] for u in self._utxos)