Fix off-by-one error in CreateNewBlock()

When calling GetHistoryRoot, use prevConsensusBranchId instead of consensusBranchId for compatibility with NU4 and future upgrades.

Co-authored by Jack Grigg (jack@electriccoin.co)
This commit is contained in:
therealyingtong 2020-05-14 00:14:44 +08:00
parent d52003861c
commit 79657a8e3a
1 changed files with 3 additions and 1 deletions

View File

@ -518,12 +518,14 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const MinerAddre
nonce >>= 16;
pblock->nNonce = ArithToUint256(nonce);
uint32_t prevConsensusBranchId = CurrentEpochBranchId(pindexPrev->nHeight, chainparams.GetConsensus());
// Fill in header
pblock->hashPrevBlock = pindexPrev->GetBlockHash();
if (IsActivationHeight(nHeight, chainparams.GetConsensus(), Consensus::UPGRADE_HEARTWOOD)) {
pblock->hashLightClientRoot.SetNull();
} else if (chainparams.GetConsensus().NetworkUpgradeActive(nHeight, Consensus::UPGRADE_HEARTWOOD)) {
pblock->hashLightClientRoot = view.GetHistoryRoot(consensusBranchId);
pblock->hashLightClientRoot = view.GetHistoryRoot(prevConsensusBranchId);
} else {
pblock->hashLightClientRoot = sapling_tree.root();
}