From b3a279cd58d9ae0e107c7fee81f598635e53f9e1 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Sun, 16 Apr 2017 06:57:11 -0700 Subject: [MOVEONLY] Move LastCommonAncestor to chain --- src/chain.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/chain.cpp') diff --git a/src/chain.cpp b/src/chain.cpp index 8d4c4e7dea..ffd58d471d 100644 --- a/src/chain.cpp +++ b/src/chain.cpp @@ -148,3 +148,22 @@ int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& fr } return sign * r.GetLow64(); } + +/** Find the last common ancestor two blocks have. + * Both pa and pb must be non-NULL. */ +const CBlockIndex* LastCommonAncestor(const CBlockIndex* pa, const CBlockIndex* pb) { + if (pa->nHeight > pb->nHeight) { + pa = pa->GetAncestor(pb->nHeight); + } else if (pb->nHeight > pa->nHeight) { + pb = pb->GetAncestor(pa->nHeight); + } + + while (pa != pb && pa && pb) { + pa = pa->pprev; + pb = pb->pprev; + } + + // Eventually all chain branches meet at the genesis block. + assert(pa == pb); + return pa; +} -- cgit v1.2.3