本文整理汇总了C++中CTxDB::EraseBlockIndex方法的典型用法代码示例。如果您正苦于以下问题:C++ CTxDB::EraseBlockIndex方法的具体用法?C++ CTxDB::EraseBlockIndex怎么用?C++ CTxDB::EraseBlockIndex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CTxDB
的用法示例。
在下文中一共展示了CTxDB::EraseBlockIndex方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rewindchain
//.........这里部分代码省略.........
CAutoFile blkdat(fp, SER_DISK, CLIENT_VERSION);
if (fseek(blkdat, fpos+foundPos, SEEK_SET) != 0)
{
LogPrintf("fseek blkdat failed: %s\n", strerror(errno));
break;
};
unsigned int nSize;
blkdat >> nSize;
LogPrintf("nSize %u .\n", nSize);
if (nSize < 1 || nSize > MAX_BLOCK_SIZE)
{
LogPrintf("block size error %u\n", nSize);
};
CBlock block;
blkdat >> block;
uint256 hashblock = block.GetHash();
LogPrintf("hashblock %s .\n", hashblock.ToString().c_str());
std::map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashblock);
if (mi != mapBlockIndex.end() && (*mi).second)
{
LogPrintf("block is in main chain.\n");
if (!mi->second->pprev)
{
LogPrintf("! mi->second.pprev\n");
} else
{
{
CBlock blockPrev; // strange way SetBestChain works, TODO: does it need the full block?
if (!blockPrev.ReadFromDisk(mi->second->pprev))
{
LogPrintf("blockPrev.ReadFromDisk failed %s.\n", mi->second->pprev->GetBlockHash().ToString().c_str());
break;
};
CTxDB txdb;
if (!blockPrev.SetBestChain(txdb, mi->second->pprev))
{
LogPrintf("SetBestChain failed.\n");
};
}
mi->second->pprev->pnext = NULL;
};
delete mi->second;
mapBlockIndex.erase(mi);
};
std::map<uint256, COrphanBlock*>::iterator miOph = mapOrphanBlocks.find(hashblock);
if (miOph != mapOrphanBlocks.end())
{
LogPrintf("block is an orphan.\n");
mapOrphanBlocks.erase(miOph);
};
CTxDB txdb;
for (vector<CTransaction>::iterator it = block.vtx.begin(); it != block.vtx.end(); ++it)
{
LogPrintf("EraseTxIndex().\n");
txdb.EraseTxIndex(*it);
};
LogPrintf("EraseBlockIndex().\n");
txdb.EraseBlockIndex(hashblock);
errno = 0;
if (ftruncate(fileno(fp), fpos+foundPos-MESSAGE_START_SIZE) != 0)
{
LogPrintf("ftruncate failed: %s\n", strerror(errno));
};
LogPrintf("hashBestChain %s, nBestHeight %d\n", hashBestChain.ToString().c_str(), nBestHeight);
//fclose(fp); // ~CAutoFile() will close the file
nRemoved++;
};
}
result.push_back(Pair("no. blocks removed", itostr(nRemoved)));
result.push_back(Pair("hashBestChain", hashBestChain.ToString()));
result.push_back(Pair("nBestHeight", itostr(nBestHeight)));
// -- need restart, setStakeSeen etc
if (nRemoved > 0)
result.push_back(Pair("Please restart Taurus", ""));
if (nRemoved == nNumber)
result.push_back(Pair("result", "success"));
else
result.push_back(Pair("result", "failure"));
return result;
}