Satoshi MailBeta Open in Satoshi Mail

do an extra CheckBlock in ConnectBlock

Commit by Satoshi Nakamoto (s_nakamoto) on 16 August 2010 · SVN r139 · release v0.3.12 · 3 files, +6 −13

Open in Satoshi Mail View on GitHub

Files changed

db.cpp
@@ -460,12 +460,9 @@ bool CTxDB::LoadBlockIndex()
     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 @@ bool CTxDB::LoadBlockIndex()
         {
             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;
main.cpp
@@ -1107,6 +1107,10 @@ bool CBlock::DisconnectBlock(CTxDB& txdb, CBlockIndex* pindex)
 
 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());
 
serialize.h
@@ -20,7 +20,7 @@ class CDataStream;
 class CAutoFile;
 
 static const int VERSION = 310;
-static const char* pszSubVer = ".2";
+static const char* pszSubVer = ".3";