From 99e9d3c7bc45e1266c6592b2afd47b8999745e04 Mon Sep 17 00:00:00 2001 From: Greg Sanders Date: Thu, 27 Jun 2024 14:45:01 -0400 Subject: [PATCH] test: Add anchor mempool acceptance test --- test/functional/mempool_accept.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/functional/mempool_accept.py b/test/functional/mempool_accept.py index 3d205ffa62bdbb..06f5ba1ba68893 100755 --- a/test/functional/mempool_accept.py +++ b/test/functional/mempool_accept.py @@ -388,6 +388,36 @@ def run_test(self): maxfeerate=0, ) + self.log.info('OP_1 <0x4e73> is able to be created and spent') + true_tx = self.wallet.create_self_transfer(sequence=SEQUENCE_FINAL)['tx'] + true_tx.vout[0].scriptPubKey = bytes(CScript([OP_TRUE, bytes.fromhex("4e73")])) + true_tx.rehash() + self.generateblock(node, self.wallet.get_address(), [true_tx.serialize().hex()]) + + # First spend has non-empty witness, will be rejected to prevent third party wtxid malleability + true_tx_spend = CTransaction() + true_tx_spend.vin.append(CTxIn(COutPoint(true_tx.sha256, 0), b"")) + true_tx_spend.vout.append(CTxOut(true_tx.vout[0].nValue - int(fee*COIN), script_to_p2wsh_script(CScript([OP_TRUE])))) + true_tx_spend.wit.vtxinwit.append(CTxInWitness()) + true_tx_spend.wit.vtxinwit[0].scriptWitness.stack.append(b"f") + true_tx_spend.rehash() + + self.check_mempool_result( + result_expected=[{'txid': true_tx_spend.rehash(), 'allowed': False, 'reject-reason': 'bad-witness-nonstandard'}], + rawtxs=[true_tx_spend.serialize().hex()], + maxfeerate=0, + ) + + # Clear witness stuffing + true_tx_spend.wit.vtxinwit[0].scriptWitness.stack = [] + true_tx_spend.rehash() + + self.check_mempool_result( + result_expected=[{'txid': true_tx_spend.rehash(), 'allowed': True, 'vsize': true_tx_spend.get_vsize(), 'fees': { 'base': Decimal('0.00000700')}}], + rawtxs=[true_tx_spend.serialize().hex()], + maxfeerate=0, + ) + self.log.info('Spending a confirmed bare multisig is okay') address = self.wallet.get_address() tx = tx_from_hex(raw_tx_reference)