mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-20 13:37:28 +02:00
Optimize JSON-RPC getblockhash
- If the height is in the first half, start at the genesis block and go up, rather than at the top - Cache the last lookup and use it as a reference point if it's close to the next request, to make linear lookups always fast
This commit is contained in:
parent
4060d64fc9
commit
1be064190e
3 changed files with 21 additions and 4 deletions
19
src/main.cpp
19
src/main.cpp
|
|
@ -802,6 +802,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)
|
||||
|
|
@ -1615,6 +1633,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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue