aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2014-08-12 14:56:59 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2014-08-12 14:57:13 +0200
commit8ebe42435ab1deda622a7bbfc638b0b2393150ee (patch)
treebb8f1279b216b453bdc854f1964555dd5dff459e /src/main.cpp
parente257b7c4c4517bc90237d879b40a380a8f596788 (diff)
parent4fad8e6d831729efa1965fa2034e7e51d3d0a1be (diff)
downloadbitcoin-8ebe42435ab1deda622a7bbfc638b0b2393150ee.tar.xz
Merge pull request #4150
4fad8e6 Reject transactions with excessive numbers of sigops (Peter Todd)
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 55206600e2..e135e93adb 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -956,9 +956,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;