diff --git a/src/policy/policy.cpp b/src/policy/policy.cpp --- a/src/policy/policy.cpp +++ b/src/policy/policy.cpp @@ -38,20 +38,6 @@ return (txout.nValue < GetDustThreshold(txout, dustRelayFeeIn)); } -/** - * Check transaction inputs to mitigate two potential denial-of-service attacks: - * - * 1. scriptSigs with extra data stuffed into them, not consumed by scriptPubKey - * (or P2SH script) - * 2. P2SH scripts with a crazy number of expensive CHECKSIG/CHECKMULTISIG - * operations - * - * Why bother? To avoid denial-of-service attacks; an attacker can submit a - * standard HASH... OP_EQUAL transaction, which will get accepted into blocks. - * The redemption script can be anything; an attacker could use a very - * expensive-to-check-upon-redemption script like: - * DUP CHECKSIG DROP ... repeated 100 times... OP_1 - */ bool IsStandard(const CScript &scriptPubKey, txnouttype &whichType) { std::vector> vSolutions; if (!Solver(scriptPubKey, whichType, vSolutions)) { @@ -134,6 +120,22 @@ return true; } +/** + * Check transaction inputs to mitigate two + * potential denial-of-service attacks: + * + * 1. scriptSigs with extra data stuffed into them, + * not consumed by scriptPubKey (or P2SH script) + * 2. P2SH scripts with a crazy number of expensive + * CHECKSIG/CHECKMULTISIG operations + * + * Why bother? To avoid denial-of-service attacks; an attacker + * can submit a standard HASH... OP_EQUAL transaction, + * which will get accepted into blocks. The redemption + * script can be anything; an attacker could use a very + * expensive-to-check-upon-redemption script like: + * DUP CHECKSIG DROP ... repeated 100 times... OP_1 + */ bool AreInputsStandard(const CTransaction &tx, const CCoinsViewCache &mapInputs) { if (tx.IsCoinBase()) {