From: Sunny King Date: Sun, 22 Apr 2012 22:59:55 +0000 (+0100) Subject: PPCoin: Preliminary check on coinstake duplicate X-Git-Tag: v0.4.0-unstable~186 X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=commitdiff_plain;h=a350e812fc913378759c61bd06cde1b749a3fb0d PPCoin: Preliminary check on coinstake duplicate --- diff --git a/src/main.cpp b/src/main.cpp index 4581fcf..e229063 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1540,7 +1540,16 @@ bool CBlock::AcceptBlock() CBlockIndex* pindexPrev = (*mi).second; int nHeight = pindexPrev->nHeight+1; - // Check proof of work + // ppcoin: check for coinstake duplicate + if (IsProofOfStake()) + { // check if coinstake is already connected; that would imply the owner + // of the coinstake sent multiple blocks with the same coinstake + CTxIndex txindex; + if (CTxDB("r").ReadTxIndex(vtx[1].GetHash(), txindex)) + return error("AcceptBlock() : block %s has duplicate coinstake %s", hash.ToString().c_str(), vtx[1].GetHash().ToString().c_str()); + } + + // Check proof-of-work or proof-of-stake if (nBits != GetNextTargetRequired(pindexPrev, IsProofOfStake())) return DoS(100, error("AcceptBlock() : incorrect proof-of-work/proof-of-stake")); @@ -1608,7 +1617,7 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) bnNewBlock.SetCompact(pblock->nBits); CBigNum bnRequired; bnRequired.SetCompact(ComputeMinWork(pcheckpoint->nBits, deltaTime)); - if (bnNewBlock > bnRequired) + if (pblock->IsProofOfWork() && bnNewBlock > bnRequired) { pfrom->Misbehaving(100); return error("ProcessBlock() : block with too little proof-of-work");