Decouple CChain from mapBlockIndex

pull/196/head
jtimon 10 years ago
parent eecd3c0fb0
commit 6db83db3eb

@ -1151,7 +1151,7 @@ bool AppInit2(boost::thread_group& threadGroup)
CWalletDB walletdb(strWalletFile); CWalletDB walletdb(strWalletFile);
CBlockLocator locator; CBlockLocator locator;
if (walletdb.ReadBestBlock(locator)) if (walletdb.ReadBestBlock(locator))
pindexRescan = chainActive.FindFork(locator); pindexRescan = FindForkInGlobalIndex(chainActive, locator);
else else
pindexRescan = chainActive.Genesis(); pindexRescan = chainActive.Genesis();
} }

@ -431,18 +431,19 @@ CBlockLocator CChain::GetLocator(const CBlockIndex *pindex) const {
return CBlockLocator(vHave); return CBlockLocator(vHave);
} }
CBlockIndex *CChain::FindFork(const CBlockLocator &locator) const { CBlockIndex* FindForkInGlobalIndex(const CChain& chain, const CBlockLocator& locator)
{
// Find the first block the caller has in the main chain // Find the first block the caller has in the main chain
BOOST_FOREACH(const uint256& hash, locator.vHave) { BOOST_FOREACH(const uint256& hash, locator.vHave) {
BlockMap::iterator mi = mapBlockIndex.find(hash); BlockMap::iterator mi = mapBlockIndex.find(hash);
if (mi != mapBlockIndex.end()) if (mi != mapBlockIndex.end())
{ {
CBlockIndex* pindex = (*mi).second; CBlockIndex* pindex = (*mi).second;
if (Contains(pindex)) if (chain.Contains(pindex))
return pindex; return pindex;
} }
} }
return Genesis(); return chain.Genesis();
} }
const CBlockIndex *CChain::FindFork(const CBlockIndex *pindex) const { const CBlockIndex *CChain::FindFork(const CBlockIndex *pindex) const {
@ -3672,7 +3673,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
LOCK(cs_main); LOCK(cs_main);
// Find the last block the caller has in the main chain // Find the last block the caller has in the main chain
CBlockIndex* pindex = chainActive.FindFork(locator); CBlockIndex* pindex = FindForkInGlobalIndex(chainActive, locator);
// Send the rest of the chain // Send the rest of the chain
if (pindex) if (pindex)
@ -3719,7 +3720,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
else else
{ {
// Find the last block the caller has in the main chain // Find the last block the caller has in the main chain
pindex = chainActive.FindFork(locator); pindex = FindForkInGlobalIndex(chainActive, locator);
if (pindex) if (pindex)
pindex = chainActive.Next(pindex); pindex = chainActive.Next(pindex);
} }

@ -953,13 +953,13 @@ public:
/** Return a CBlockLocator that refers to a block in this chain (by default the tip). */ /** Return a CBlockLocator that refers to a block in this chain (by default the tip). */
CBlockLocator GetLocator(const CBlockIndex *pindex = NULL) const; CBlockLocator GetLocator(const CBlockIndex *pindex = NULL) const;
/** Find the last common block between this chain and a locator. */
CBlockIndex *FindFork(const CBlockLocator &locator) const;
/** Find the last common block between this chain and a block index entry. */ /** Find the last common block between this chain and a block index entry. */
const CBlockIndex *FindFork(const CBlockIndex *pindex) const; const CBlockIndex *FindFork(const CBlockIndex *pindex) const;
}; };
/** Find the last common block between the parameter chain and a locator. */
CBlockIndex* FindForkInGlobalIndex(const CChain& chain, const CBlockLocator& locator);
/** The currently-connected chain of blocks. */ /** The currently-connected chain of blocks. */
extern CChain chainActive; extern CChain chainActive;

Loading…
Cancel
Save