diff options
| author | Peter Todd <[email protected]> | 2014-05-08 00:18:57 -0400 |
|---|---|---|
| committer | Peter Todd <[email protected]> | 2014-07-13 10:12:49 -0400 |
| commit | 4fad8e6d831729efa1965fa2034e7e51d3d0a1be (patch) | |
| tree | a1f919267c7bd9e3806ef63058cd1068f2f82021 /src/main.cpp | |
| parent | Merge pull request #4511 (diff) | |
| download | discoin-4fad8e6d831729efa1965fa2034e7e51d3d0a1be.tar.xz discoin-4fad8e6d831729efa1965fa2034e7e51d3d0a1be.zip | |
Reject transactions with excessive numbers of sigops
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp index a9c080ffa..490b7f56f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1016,9 +1016,18 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa if (Params().RequireStandard() && !AreInputsStandard(tx, view)) return error("AcceptToMemoryPool: : nonstandard transaction input"); - // Note: if you modify this code to accept non-standard transactions, then - // you should add code here to check that the transaction does a - // reasonable number of ECDSA signature verifications. + // Check that the transaction doesn't have an excessive number of + // sigops, making it impossible to mine. Since the coinbase transaction + // itself can contain sigops MAX_TX_SIGOPS is less than + // MAX_BLOCK_SIGOPS; we still consider this an invalid rather than + // merely non-standard transaction. + unsigned int nSigOps = GetLegacySigOpCount(tx); + nSigOps += GetP2SHSigOpCount(tx, view); + if (nSigOps > MAX_TX_SIGOPS) + return state.DoS(0, + error("AcceptToMemoryPool : too many sigops %s, %d > %d", + hash.ToString(), nSigOps, MAX_TX_SIGOPS), + REJECT_NONSTANDARD, "bad-txns-too-many-sigops"); int64_t nValueOut = tx.GetValueOut(); int64_t nFees = nValueIn-nValueOut; |