From f4f3bed422514ede7d75e93e23e0e7a4dacc53c7 Mon Sep 17 00:00:00 2001 From: Scott Nadal Date: Fri, 18 May 2012 15:56:30 +0100 Subject: [PATCH] PPCoin: Allow limited duplicate stakes under block flood attack --- src/main.cpp | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 3bc0983..3377465 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1609,7 +1609,9 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) return error("ProcessBlock() : already have block (orphan) %s", hash.ToString().substr(0,20).c_str()); // ppcoin: check proof-of-stake - if (pblock->IsProofOfStake() && setStakeSeen.count(pblock->GetProofOfStake())) + // Limited duplicity on stake: prevents block flood attack + // Duplicate stake allowed only when there is orphan child block + if (pblock->IsProofOfStake() && setStakeSeen.count(pblock->GetProofOfStake()) && !mapOrphanBlocksByPrev.count(hash)) return error("ProcessBlock() : duplicate proof-of-stake (%s) for block %s", pblock->GetProofOfStake().ToString().c_str(), hash.ToString().c_str()); // Preliminary checks @@ -1646,7 +1648,9 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) // ppcoin: check proof-of-stake if (pblock2->IsProofOfStake()) { - if (setStakeSeenOrphan.count(pblock2->GetProofOfStake())) + // Limited duplicity on stake: prevents block flood attack + // Duplicate stake allowed only when there is orphan child block + if (setStakeSeenOrphan.count(pblock2->GetProofOfStake()) && !mapOrphanBlocksByPrev.count(hash)) return error("ProcessBlock() : duplicate proof-of-stake (%s) for orphan block %s", pblock2->GetProofOfStake().ToString().c_str(), hash.ToString().c_str()); else setStakeSeenOrphan.insert(pblock2->GetProofOfStake()); -- 1.7.1