do an extra CheckBlock in ConnectBlock
authors_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
Mon, 16 Aug 2010 18:46:02 +0000 (18:46 +0000)
committers_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
Mon, 16 Aug 2010 18:46:02 +0000 (18:46 +0000)
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@139 1a98c847-1fd6-4fd8-948a-caf3550aa51b

db.cpp
main.cpp
serialize.h

diff --git a/db.cpp b/db.cpp
index c6127a3..8576e0d 100644 (file)
--- a/db.cpp
+++ b/db.cpp
@@ -460,12 +460,9 @@ bool CTxDB::LoadBlockIndex()
     ReadBestInvalidWork(bnBestInvalidWork);\r
 \r
     // Verify blocks in the best chain\r
-    vector<CBlockIndex*> vChain;\r
-    vector<CBlockIndex*> vBad;\r
     CBlockIndex* pindexFork = NULL;\r
     for (CBlockIndex* pindex = pindexBest; pindex && pindex->pprev; pindex = pindex->pprev)\r
     {\r
-        vChain.push_back(pindex);\r
         CBlock block;\r
         if (!block.ReadFromDisk(pindex))\r
             return error("LoadBlockIndex() : block.ReadFromDisk failed");\r
@@ -473,25 +470,17 @@ bool CTxDB::LoadBlockIndex()
         {\r
             printf("LoadBlockIndex() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str());\r
             pindexFork = pindex->pprev;\r
-            vBad = vChain;\r
         }\r
     }\r
     if (pindexFork)\r
     {\r
+        // Reorg back to the fork\r
         printf("LoadBlockIndex() : *** moving best chain pointer back to block %d\n", pindexFork->nHeight);\r
         CBlock block;\r
         if (!block.ReadFromDisk(pindexFork))\r
             return error("LoadBlockIndex() : block.ReadFromDisk failed");\r
         CTxDB txdb;\r
         block.SetBestChain(txdb, pindexFork);\r
-\r
-        // Delete the bad chain\r
-        foreach(CBlockIndex* pindex, vBad)\r
-        {\r
-            txdb.EraseBlockIndex(pindex->GetBlockHash());\r
-            mapBlockIndex.erase(pindex->GetBlockHash());\r
-            delete pindex;\r
-        }\r
     }\r
 \r
     return true;\r
index 6311735..9305fb7 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -1107,6 +1107,10 @@ bool CBlock::DisconnectBlock(CTxDB& txdb, CBlockIndex* pindex)
 \r
 bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)\r
 {\r
+    // Check it again in case a previous version let a bad block in\r
+    if (!CheckBlock())\r
+        return false;\r
+\r
     //// issue here: it doesn't know the version\r
     unsigned int nTxPos = pindex->nBlockPos + ::GetSerializeSize(CBlock(), SER_DISK) - 1 + GetSizeOfCompactSize(vtx.size());\r
 \r
index e5e1f0f..88c2e9a 100644 (file)
@@ -20,7 +20,7 @@ class CDataStream;
 class CAutoFile;\r
 \r
 static const int VERSION = 310;\r
-static const char* pszSubVer = ".2";\r
+static const char* pszSubVer = ".3";\r
 \r
 \r
 \r