// Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_CONSENSUS_PARAMS_H #define BITCOIN_CONSENSUS_PARAMS_H #include "uint256.h" namespace Consensus { /** * Parameters that influence chain consensus. */ struct Params { uint256 hashGenesisBlock; bool fCoinbaseMustBeProtected; /** Needs to evenly divide MAX_SUBSIDY to avoid rounding errors. */ int nSubsidySlowStartInterval; /** * Shift based on a linear ramp for slow start: * * MAX_SUBSIDY*(t_s/2 + t_r) = MAX_SUBSIDY*t_h Coin balance * t_s + t_r = t_h + t_c Block balance * * t_s = nSubsidySlowStartInterval * t_r = number of blocks between end of slow start and first halving * t_h = nSubsidyHalvingInterval * t_c = SubsidySlowStartShift() */ int SubsidySlowStartShift() const { return nSubsidySlowStartInterval / 2; } int nSubsidyHalvingInterval; int GetLastFoundersRewardBlockHeight() const { //return nSubsidyHalvingInterval + SubsidySlowStartShift() - 1; return 0; // Bugfix #14: getblocksubsidy RPC command is incorrect } /** Used to check majorities for block version upgrade */ int nMajorityEnforceBlockUpgrade; int nMajorityRejectBlockOutdated; int nMajorityWindow; /** Proof of work parameters */ uint256 powLimit; bool fPowAllowMinDifficultyBlocks; int64_t nPowAveragingWindow; int64_t nPowMaxAdjustDown; int64_t nPowMaxAdjustUp; int64_t nPowTargetSpacing; int64_t AveragingWindowTimespan() const { return nPowAveragingWindow * nPowTargetSpacing; } int64_t MinActualTimespan() const { return (AveragingWindowTimespan() * (100 - nPowMaxAdjustUp )) / 100; } int64_t MaxActualTimespan() const { return (AveragingWindowTimespan() * (100 + nPowMaxAdjustDown)) / 100; } }; } // namespace Consensus #endif // BITCOIN_CONSENSUS_PARAMS_H