diff options
author | Tom Harding <tomh@thinlink.com> | 2014-06-25 23:41:44 -0700 |
---|---|---|
committer | Tom Harding <tomh@thinlink.com> | 2014-06-27 07:54:21 -0700 |
commit | d640a3ceab4f4372c2a0f738c1286cfde4b41b50 (patch) | |
tree | 48aba47604e601d8b50b23de7ca9bb17f82e9926 /src/core.cpp | |
parent | 8fbf03995df9a2003be603be1a930bc3373d56e0 (diff) |
Relay double-spends, subject to anti-DOS
Allows network wallets and other clients to see transactions that respend
a prevout already spent in an unconfirmed transaction in this node's mempool.
Knowledge of an attempted double-spend is of interest to recipients of the
first spend. In some cases, it will allow these recipients to withhold
goods or services upon being alerted of a double-spend that deprives them
of payment.
As before, respends are not added to the mempool.
Anti-Denial-of-Service-Attack provisions:
- Use a bloom filter to relay only one respend per mempool prevout
- Rate-limit respend relays to a default of 100 thousand bytes/minute
- Define tx2.IsEquivalentTo(tx1): equality when scriptSigs are not considered
- Do not relay these equivalent transactions
Remove an unused variable declaration in txmempool.cpp.
Diffstat (limited to 'src/core.cpp')
-rw-r--r-- | src/core.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/core.cpp b/src/core.cpp index 6c5ee1c0f8..ca28624529 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -119,6 +119,22 @@ CTransaction& CTransaction::operator=(const CTransaction &tx) { return *this; } +bool CTransaction::IsEquivalentTo(const CTransaction& tx) const +{ + if (nVersion != tx.nVersion || + nLockTime != tx.nLockTime || + vin.size() != tx.vin.size() || + vout != tx.vout) + return false; + for (unsigned int i = 0; i < vin.size(); i++) + { + if (vin[i].nSequence != tx.vin[i].nSequence || + vin[i].prevout != tx.vin[i].prevout) + return false; + } + return true; +} + int64_t CTransaction::GetValueOut() const { int64_t nValueOut = 0; |