aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorGregory Maxwell <greg@xiph.org>2012-08-01 11:49:26 -0700
committerGregory Maxwell <greg@xiph.org>2012-08-01 11:49:26 -0700
commit8ce7915aad505fd6e57f599b5b43fc241d8b4cb4 (patch)
tree37b12ebf89209456ecce18f18619408ac9b96edb /src/main.cpp
parentf81e6f779b66e235afd6c5241306d5e70ec41276 (diff)
parent1be064190ed0ca95113cf273082a2d81dc8a4357 (diff)
downloadbitcoin-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.cpp19
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();