diff options
author | Gregory Maxwell <greg@xiph.org> | 2012-08-01 11:49:26 -0700 |
---|---|---|
committer | Gregory Maxwell <greg@xiph.org> | 2012-08-01 11:49:26 -0700 |
commit | 8ce7915aad505fd6e57f599b5b43fc241d8b4cb4 (patch) | |
tree | 37b12ebf89209456ecce18f18619408ac9b96edb /src/main.cpp | |
parent | f81e6f779b66e235afd6c5241306d5e70ec41276 (diff) | |
parent | 1be064190ed0ca95113cf273082a2d81dc8a4357 (diff) | |
download | bitcoin-8ce7915aad505fd6e57f599b5b43fc241d8b4cb4.tar.xz |
Merge pull request #1612 from luke-jr/opti_getblkhash
Optimize JSON-RPC getblockhash
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp index e7095c7001..23c6d988aa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -811,6 +811,24 @@ bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock) // CBlock and CBlockIndex // +static CBlockIndex* pblockindexFBBHLast; +CBlockIndex* FindBlockByHeight(int nHeight) +{ + CBlockIndex *pblockindex; + if (nHeight < nBestHeight / 2) + pblockindex = pindexGenesisBlock; + else + pblockindex = pindexBest; + if (pblockindexFBBHLast && abs(nHeight - pblockindex->nHeight) > abs(nHeight - pblockindexFBBHLast->nHeight)) + pblockindex = pblockindexFBBHLast; + while (pblockindex->nHeight > nHeight) + pblockindex = pblockindex->pprev; + while (pblockindex->nHeight < nHeight) + pblockindex = pblockindex->pnext; + pblockindexFBBHLast = pblockindex; + return pblockindex; +} + bool CBlock::ReadFromDisk(const CBlockIndex* pindex, bool fReadTransactions) { if (!fReadTransactions) @@ -1634,6 +1652,7 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew) // New best block hashBestChain = hash; pindexBest = pindexNew; + pblockindexFBBHLast = NULL; nBestHeight = pindexBest->nHeight; bnBestChainWork = pindexNew->bnChainWork; nTimeBestReceived = GetTime(); |