mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 20:42:59 +01:00
[MOVEONLY] Move LastCommonAncestor to chain
This commit is contained in:
parent
234ffc677e
commit
b3a279cd58
@ -148,3 +148,22 @@ int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& fr
|
|||||||
}
|
}
|
||||||
return sign * r.GetLow64();
|
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;
|
||||||
|
}
|
||||||
|
@ -362,6 +362,9 @@ public:
|
|||||||
arith_uint256 GetBlockProof(const CBlockIndex& block);
|
arith_uint256 GetBlockProof(const CBlockIndex& block);
|
||||||
/** Return the time it would take to redo the work difference between from and to, assuming the current hashrate corresponds to the difficulty at tip, in seconds. */
|
/** Return the time it would take to redo the work difference between from and to, assuming the current hashrate corresponds to the difficulty at tip, in seconds. */
|
||||||
int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& from, const CBlockIndex& tip, const Consensus::Params&);
|
int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& from, const CBlockIndex& tip, const Consensus::Params&);
|
||||||
|
/** Find the forking point between two chain tips. */
|
||||||
|
const CBlockIndex* LastCommonAncestor(const CBlockIndex* pa, const CBlockIndex* pb);
|
||||||
|
|
||||||
|
|
||||||
/** Used to marshal pointers into hashes for db storage. */
|
/** Used to marshal pointers into hashes for db storage. */
|
||||||
class CDiskBlockIndex : public CBlockIndex
|
class CDiskBlockIndex : public CBlockIndex
|
||||||
|
@ -452,25 +452,6 @@ bool PeerHasHeader(CNodeState *state, const CBlockIndex *pindex)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Update pindexLastCommonBlock and add not-in-flight missing successors to vBlocks, until it has
|
/** Update pindexLastCommonBlock and add not-in-flight missing successors to vBlocks, until it has
|
||||||
* at most count entries. */
|
* at most count entries. */
|
||||||
void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<const CBlockIndex*>& vBlocks, NodeId& nodeStaller, const Consensus::Params& consensusParams) {
|
void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<const CBlockIndex*>& vBlocks, NodeId& nodeStaller, const Consensus::Params& consensusParams) {
|
||||||
|
Loading…
Reference in New Issue
Block a user