From 27ee4d64f270a24fcd3526562436ebcb2059da4f Mon Sep 17 00:00:00 2001 From: Eirik Ogilvie-Wigley Date: Fri, 2 Aug 2019 19:35:53 -0600 Subject: [PATCH] Fix integer truncation in Blossom halving calculation --- src/main.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 970dbe052..fbdbf980e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1770,8 +1770,15 @@ CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams) int halvings; if (blossomActive) { int blossomActivationHeight = consensusParams.vUpgrades[Consensus::UPGRADE_BLOSSOM].nActivationHeight; - halvings = (blossomActivationHeight - consensusParams.SubsidySlowStartShift()) / consensusParams.nPreBlossomSubsidyHalvingInterval - + (nHeight - blossomActivationHeight) / consensusParams.nPostBlossomSubsidyHalvingInterval; + // // Ideally we would say: + // halvings = (blossomActivationHeight - consensusParams.SubsidySlowStartShift()) / consensusParams.nPreBlossomSubsidyHalvingInterval + // + (nHeight - blossomActivationHeight) / consensusParams.nPostBlossomSubsidyHalvingInterval; + // But, (blossomActivationHeight - consensusParams.SubsidySlowStartShift()) / consensusParams.nPreBlossomSubsidyHalvingInterval + // needs to be a treated rational number or this does not work. + // Define scaledHalvings := halvings * consensusParams.nPreBlossomSubsidyHalvingInterval; + int scaledHalvings = (blossomActivationHeight - consensusParams.SubsidySlowStartShift()) + + (nHeight - blossomActivationHeight) / Consensus::BLOSSOM_POW_TARGET_SPACING_RATIO; + halvings = scaledHalvings / consensusParams.nPreBlossomSubsidyHalvingInterval; } else { halvings = (nHeight - consensusParams.SubsidySlowStartShift()) / consensusParams.nPreBlossomSubsidyHalvingInterval; }