diff --git a/src/init.cpp b/src/init.cpp index af1dc85776..1e7baf3d95 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -647,7 +647,7 @@ void SetupServerArgs(ArgsManager& argsman) MAX_OP_RETURN_RELAY), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); argsman.AddArg("-mempoolfullrbf", strprintf("Accept transaction replace-by-fee without requiring replaceability signaling (default: %u)", DEFAULT_MEMPOOL_FULL_RBF), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); - argsman.AddArg("-permitbaremultisig", strprintf("Relay non-P2SH multisig (default: %u)", DEFAULT_PERMIT_BAREMULTISIG), ArgsManager::ALLOW_ANY, + argsman.AddArg("-permitbaremultisig", strprintf("Relay transactions creating non-P2SH multisig outputs (default: %u)", DEFAULT_PERMIT_BAREMULTISIG), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); argsman.AddArg("-minrelaytxfee=", strprintf("Fees (in %s/kvB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s)", CURRENCY_UNIT, FormatMoney(DEFAULT_MIN_RELAY_TX_FEE)), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); diff --git a/test/functional/mempool_accept.py b/test/functional/mempool_accept.py index 3e5cba3a57..7de140ab32 100755 --- a/test/functional/mempool_accept.py +++ b/test/functional/mempool_accept.py @@ -13,7 +13,7 @@ from test_framework.messages import ( MAX_BIP125_RBF_SEQUENCE, COIN, COutPoint, - # CTransaction, + CTransaction, CTxIn, # CTxInWitness, CTxOut, @@ -28,7 +28,9 @@ from test_framework.script import ( OP_0, OP_HASH160, OP_RETURN, - # OP_TRUE, + OP_TRUE, + SIGHASH_ALL, + sign_input_legacy, ) from test_framework.script_util import ( # DUMMY_MIN_OP_RETURN_SCRIPT, @@ -36,7 +38,7 @@ from test_framework.script_util import ( # MIN_PADDING, MIN_STANDARD_TX_NONWITNESS_SIZE, script_to_p2sh_script, - # script_to_p2wsh_script, + script_to_p2wsh_script, ) from test_framework.util import ( assert_equal, @@ -376,5 +378,25 @@ class MempoolAcceptanceTest(BitcoinTestFramework): # CVE-2017-12842 does not affect elements transactions assert_equal(MIN_STANDARD_TX_NONWITNESS_SIZE - 1, 64) + self.log.info('Spending a confirmed bare multisig is okay') + address = self.wallet.get_address() + tx = tx_from_hex(raw_tx_reference) + privkey, pubkey = generate_keypair() + tx.vout[0].scriptPubKey = keys_to_multisig_script([pubkey] * 3, k=1) # Some bare multisig script (1-of-3) + tx.rehash() + self.generateblock(node, address, [tx.serialize().hex()]) + tx_spend = CTransaction() + tx_spend.vin.append(CTxIn(COutPoint(tx.sha256, 0), b"")) + tx_spend.vout.append(CTxOut(tx.vout[0].nValue.getAmount() - int(fee*COIN), script_to_p2wsh_script(CScript([OP_TRUE])))) + tx_spend.vout.append(CTxOut(int(fee*COIN), b'')) + tx_spend.rehash() + sign_input_legacy(tx_spend, 0, tx.vout[0].scriptPubKey, privkey, sighash_type=SIGHASH_ALL) + tx_spend.vin[0].scriptSig = bytes(CScript([OP_0])) + tx_spend.vin[0].scriptSig + self.check_mempool_result( + result_expected=[{'txid': tx_spend.rehash(), 'allowed': True, 'vsize': tx_spend.get_vsize(), 'fees': { 'base': Decimal('0.00000700')}}], + rawtxs=[tx_spend.serialize().hex()], + maxfeerate=0, + ) + if __name__ == '__main__': MempoolAcceptanceTest().main()