do an extra CheckBlock in ConnectBlock
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@139 1a98c847-1fd6-4fd8-948a-caf3550aa51b
This commit is contained in:
parent
a01d5876fa
commit
44a0de1861
3 changed files with 6 additions and 13 deletions
13
db.cpp
13
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;
|
||||
|
|
4
main.cpp
4
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());
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ class CDataStream;
|
|||
class CAutoFile;
|
||||
|
||||
static const int VERSION = 310;
|
||||
static const char* pszSubVer = ".2";
|
||||
static const char* pszSubVer = ".3";
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue