From b7d31044d7d5509200d5bf85259482118b69e172 Mon Sep 17 00:00:00 2001 From: Sunny King Date: Fri, 21 Sep 2012 18:13:28 +0100 Subject: [PATCH] PPCoin: Fix moneysupply issues since 2a4202a An issue where moneysupply resets to 0 in a racing shutdown An issue where moneysupply/mint could be missing with reorganization --- src/main.cpp | 13 ++++--------- 1 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index a419f7f..8341f4c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1415,9 +1415,11 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex) mapQueuedChanges[tx.GetHash()] = CTxIndex(posThisTx, tx.vout.size()); } - // ppcoin: track money supply + // ppcoin: track money supply and mint amount info pindex->nMint = nValueOut - nValueIn + nFees; pindex->nMoneySupply = (pindex->pprev? pindex->pprev->nMoneySupply : 0) + nValueOut - nValueIn; + if (!txdb.WriteBlockIndex(CDiskBlockIndex(pindex))) + return error("Connect() : WriteBlockIndex for pindex failed"); // Write queued txindex changes for (map::iterator mi = mapQueuedChanges.begin(); mi != mapQueuedChanges.end(); ++mi) @@ -1438,7 +1440,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex) CDiskBlockIndex blockindexPrev(pindex->pprev); blockindexPrev.hashNext = pindex->GetBlockHash(); if (!txdb.WriteBlockIndex(blockindexPrev)) - return error("ConnectBlock() : WriteBlockIndex failed"); + return error("ConnectBlock() : WriteBlockIndex for blockindexPrev failed"); } // Watch for transactions paying to me @@ -1843,13 +1845,6 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos) if (!SetBestChain(txdb, pindexNew)) return false; - // ppcoin: got mint/moneysupply info in block index, write to db - if (!txdb.TxnBegin()) - return false; - txdb.WriteBlockIndex(CDiskBlockIndex(pindexNew)); - if (!txdb.TxnCommit()) - return false; - txdb.Close(); if (pindexNew == pindexBest) -- 1.7.1