Changeset View
Changeset View
Standalone View
Standalone View
src/chain.cpp
Show First 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | CBlockIndex *CBlockIndex::GetAncestor(int height) { | ||||
} | } | ||||
CBlockIndex *pindexWalk = this; | CBlockIndex *pindexWalk = this; | ||||
int heightWalk = nHeight; | int heightWalk = nHeight; | ||||
while (heightWalk > height) { | while (heightWalk > height) { | ||||
int heightSkip = GetSkipHeight(heightWalk); | int heightSkip = GetSkipHeight(heightWalk); | ||||
int heightSkipPrev = GetSkipHeight(heightWalk - 1); | int heightSkipPrev = GetSkipHeight(heightWalk - 1); | ||||
if (pindexWalk->pskip != nullptr && | if (pindexWalk->pskip != nullptr && | ||||
(heightSkip == height || (heightSkip > height && | (heightSkip == height || | ||||
!(heightSkipPrev < heightSkip - 2 && | (heightSkip > height && !(heightSkipPrev < heightSkip - 2 && | ||||
heightSkipPrev >= height)))) { | heightSkipPrev >= height)))) { | ||||
// Only follow pskip if pprev->pskip isn't better than pskip->pprev. | // Only follow pskip if pprev->pskip isn't better than pskip->pprev. | ||||
pindexWalk = pindexWalk->pskip; | pindexWalk = pindexWalk->pskip; | ||||
heightWalk = heightSkip; | heightWalk = heightSkip; | ||||
} else { | } else { | ||||
assert(pindexWalk->pprev); | assert(pindexWalk->pprev); | ||||
pindexWalk = pindexWalk->pprev; | pindexWalk = pindexWalk->pprev; | ||||
heightWalk--; | heightWalk--; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 76 Lines • Show Last 20 Lines |