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());
 
--- a/serialize.h
+++ b/serialize.h
@@ -20,7 +20,7 @@
 class CAutoFile;
 
 static const int VERSION = 310;
-static const char* pszSubVer = ".2";
+static const char* pszSubVer = ".3";