Skip to content

Commit

Permalink
validation: Check only MANDATORY_SCRIPT_VERIFY_FLAGS when -acceptnons…
Browse files Browse the repository at this point in the history
…tdtxn is set
  • Loading branch information
ajtowns committed Sep 1, 2023
1 parent f49aad0 commit f09bb66
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
7 changes: 5 additions & 2 deletions src/validation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1010,8 +1010,7 @@ bool MemPoolAccept::PolicyScriptChecks(const ATMPArgs& args, Workspace& ws)
AssertLockHeld(m_pool.cs);
const CTransaction& tx = *ws.m_ptx;
TxValidationState& state = ws.m_state;

constexpr unsigned int scriptVerifyFlags = STANDARD_SCRIPT_VERIFY_FLAGS;
const unsigned int scriptVerifyFlags = (m_pool.m_require_standard ? STANDARD_SCRIPT_VERIFY_FLAGS : MANDATORY_SCRIPT_VERIFY_FLAGS);

// Check input scripts and signatures.
// This is done last to help prevent CPU exhaustion denial-of-service attacks.
Expand Down Expand Up @@ -2009,6 +2008,10 @@ static unsigned int GetBlockScriptFlags(const CBlockIndex& block_index, const Ch
{
const Consensus::Params& consensusparams = chainman.GetConsensus();

// Note that any flags returned from this function (ie, specified
// here or in script_flag_exceptions) must also be included in
// MANDATORY_SCRIPT_VERIFY_FLAGS in policy/policy.h

// BIP16 didn't become active until Apr 1 2012 (on mainnet, and
// retroactively applied to testnet)
// However, only one historical block violated the P2SH rules (on both
Expand Down
5 changes: 2 additions & 3 deletions test/functional/p2p_segwit.py
Original file line number Diff line number Diff line change
Expand Up @@ -1393,9 +1393,8 @@ def test_segwit_versions(self):
# 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, success=False)

# Spending a higher version witness output is not allowed by policy,
# even with the node that accepts non-standard txs.
test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=True, accepted=False, reason="reserved for soft-fork upgrades")
# Spending a higher version witness output is allowed on the node with -acceptnonstdtxn
test_transaction_acceptance(self.nodes[0], self.test_node, tx3, with_witness=True, accepted=True)

# Building a block with the transaction must be valid, however even without -acceptnonstdtxn.
block = self.build_next_block()
Expand Down

0 comments on commit f09bb66

Please sign in to comment.