mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-30 10:42:23 +02:00
Merge #19620: Add txids with non-standard inputs to reject filter
9f88ded82b
test addition of unknown segwit spends to txid reject filter (Gregory Sanders)7989901c7e
Add txids with non-standard inputs to reject filter (Suhas Daftuar) Pull request description: Our policy checks for non-standard inputs depend only on the non-witness portion of a transaction: we look up the scriptPubKey of the input being spent from our UTXO set (which is covered by the input txid), and the p2sh checks only rely on the scriptSig portion of the input. Consequently it's safe to add txids of transactions that fail these checks to the reject filter, as the witness is irrelevant to the failure. This is helpful for any situation where we might request the transaction again via txid (either from txid-relay peers, or if we might fetch the transaction via txid due to parent-fetching of orphans). Further, in preparation for future witness versions being deployed on the network, ensure that WITNESS_UNKNOWN transactions are rejected in AreInputsStandard(), so that transactions spending v1 (or greater) witness outputs will fall into this category of having their txid added to the reject filter. ACKs for top commit: ajtowns: ACK9f88ded82b
- code review jnewbery: Code review ACK9f88ded82b
ariard: Code Review/Tested ACK9f88ded
naumenkogs: utACK9f88ded82b
jonatack: ACK9f88ded82b
Tree-SHA512: 1e93c0a5b68cb432524780ffc0093db893911fdfed9e2ed17f888e59114cc75d2a07062aefad4e5ce2e87c9270886117a8abb3c78fb889c9b9f31967f1777148
This commit is contained in:
@ -1418,7 +1418,7 @@ class SegWitTest(BitcoinTestFramework):
|
||||
temp_utxo.pop() # last entry in temp_utxo was the output we just spent
|
||||
temp_utxo.append(UTXO(tx2.sha256, 0, tx2.vout[0].nValue))
|
||||
|
||||
# Spend everything in temp_utxo back to an OP_TRUE output.
|
||||
# Spend everything in temp_utxo into an segwit v1 output.
|
||||
tx3 = CTransaction()
|
||||
total_value = 0
|
||||
for i in temp_utxo:
|
||||
@ -1426,8 +1426,16 @@ class SegWitTest(BitcoinTestFramework):
|
||||
tx3.wit.vtxinwit.append(CTxInWitness())
|
||||
total_value += i.nValue
|
||||
tx3.wit.vtxinwit[-1].scriptWitness.stack = [witness_program]
|
||||
tx3.vout.append(CTxOut(total_value - 1000, CScript([OP_TRUE])))
|
||||
tx3.vout.append(CTxOut(total_value - 1000, script_pubkey))
|
||||
tx3.rehash()
|
||||
|
||||
# First we test this transaction against fRequireStandard=true node
|
||||
# making sure the txid is added to the reject filter
|
||||
self.std_node.announce_tx_and_wait_for_getdata(tx3)
|
||||
test_transaction_acceptance(self.nodes[1], self.std_node, tx3, with_witness=True, accepted=False, reason="bad-txns-nonstandard-inputs")
|
||||
# Now the node will no longer ask for getdata of this transaction when advertised by same txid
|
||||
self.std_node.announce_tx_and_wait_for_getdata(tx3, timeout=5, success=False)
|
||||
|
||||
# Spending a higher version witness output is not allowed by policy,
|
||||
# even with fRequireStandard=false.
|
||||
test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=True, accepted=False, reason="reserved for soft-fork upgrades")
|
||||
|
Reference in New Issue
Block a user