Mercurial > hg > bitcoin
changeset 246:6feb0c81e60b draft
do an extra CheckBlock in ConnectBlock
author | Satoshi Nakamoto <satoshin@gmx.com> |
---|---|
date | Mon, 16 Aug 2010 20:55:54 +0000 |
parents | 2bc847edc86b |
children | 2efd55da0200 |
files | db.cpp main.cpp serialize.h |
diffstat | 3 files changed, 6 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/db.cpp +++ b/db.cpp @@ -460,12 +460,9 @@ ReadBestInvalidWork(bnBestInvalidWork); // Verify blocks in the best chain - vector<CBlockIndex*> vChain; - vector<CBlockIndex*> vBad; CBlockIndex* pindexFork = NULL; for (CBlockIndex* pindex = pindexBest; pindex && pindex->pprev; pindex = pindex->pprev) { - vChain.push_back(pindex); CBlock block; if (!block.ReadFromDisk(pindex)) return error("LoadBlockIndex() : block.ReadFromDisk failed"); @@ -473,25 +470,17 @@ { printf("LoadBlockIndex() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); pindexFork = pindex->pprev; - vBad = vChain; } } if (pindexFork) { + // Reorg back to the fork printf("LoadBlockIndex() : *** moving best chain pointer back to block %d\n", pindexFork->nHeight); CBlock block; if (!block.ReadFromDisk(pindexFork)) return error("LoadBlockIndex() : block.ReadFromDisk failed"); CTxDB txdb; block.SetBestChain(txdb, pindexFork); - - // Delete the bad chain - foreach(CBlockIndex* pindex, vBad) - { - txdb.EraseBlockIndex(pindex->GetBlockHash()); - mapBlockIndex.erase(pindex->GetBlockHash()); - delete pindex; - } } return true;
--- a/main.cpp +++ b/main.cpp @@ -1107,6 +1107,10 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex) { + // Check it again in case a previous version let a bad block in + if (!CheckBlock()) + return false; + //// issue here: it doesn't know the version unsigned int nTxPos = pindex->nBlockPos + ::GetSerializeSize(CBlock(), SER_DISK) - 1 + GetSizeOfCompactSize(vtx.size());