diff options
| author | Gavin Andresen <[email protected]> | 2013-02-04 16:56:26 -0500 |
|---|---|---|
| committer | Gavin Andresen <[email protected]> | 2013-02-05 10:08:35 -0500 |
| commit | 41e1a0d7663d479f437c779df90775fc2bbc4087 (patch) | |
| tree | 9dee872551006a837eb0b3cc46b87ac74addd033 /src/main.cpp | |
| parent | Merge pull request #2237 from petertodd/testnet-dnsseed (diff) | |
| download | discoin-41e1a0d7663d479f437c779df90775fc2bbc4087.tar.xz discoin-41e1a0d7663d479f437c779df90775fc2bbc4087.zip | |
Make transactions larger than 100K non-standard
Extremely large transactions with lots of inputs can cost the network
almost as much to process as they cost the sender in fees.
We would never create transactions larger than 100K big; this change
makes transactions larger than 100K non-standard, so they are not
relayed/mined by default. This is most important for miners that might
create blocks larger than 250K big, who could be vulnerable to a
make-your-blocks-so-expensive-to-verify-they-get-orphaned attack.
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp index 847b1ea8a..874769c48 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -362,6 +362,14 @@ bool CTransaction::IsStandard() const if (!IsFinal()) return false; + // Extremely large transactions with lots of inputs can cost the network + // almost as much to process as they cost the sender in fees, because + // computing signature hashes is O(ninputs*txsize). Limiting transactions + // to MAX_STANDARD_TX_SIZE mitigates CPU exhaustion attacks. + unsigned int sz = this->GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION); + if (sz >= MAX_STANDARD_TX_SIZE) + return false; + BOOST_FOREACH(const CTxIn& txin, vin) { // Biggest 'standard' txin is a 3-signature 3-of-3 CHECKMULTISIG |