deploymentstatus.h
1 // Copyright (c) 2020-2022 The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #ifndef BITCOIN_DEPLOYMENTSTATUS_H 6 #define BITCOIN_DEPLOYMENTSTATUS_H 7 8 #include <chain.h> 9 #include <versionbits.h> 10 11 #include <limits> 12 13 /** Determine if a deployment is active for the next block */ 14 inline bool DeploymentActiveAfter(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::BuriedDeployment dep, [[maybe_unused]] VersionBitsCache& versionbitscache) 15 { 16 assert(Consensus::ValidDeployment(dep)); 17 return (pindexPrev == nullptr ? 0 : pindexPrev->nHeight + 1) >= params.DeploymentHeight(dep); 18 } 19 20 inline bool DeploymentActiveAfter(const CBlockIndex* pindexPrev, const Consensus::Params& params, Consensus::DeploymentPos dep, VersionBitsCache& versionbitscache) 21 { 22 assert(Consensus::ValidDeployment(dep)); 23 return ThresholdState::ACTIVE == versionbitscache.State(pindexPrev, params, dep); 24 } 25 26 /** Determine if a deployment is active for this block */ 27 inline bool DeploymentActiveAt(const CBlockIndex& index, const Consensus::Params& params, Consensus::BuriedDeployment dep, [[maybe_unused]] VersionBitsCache& versionbitscache) 28 { 29 assert(Consensus::ValidDeployment(dep)); 30 return index.nHeight >= params.DeploymentHeight(dep); 31 } 32 33 inline bool DeploymentActiveAt(const CBlockIndex& index, const Consensus::Params& params, Consensus::DeploymentPos dep, VersionBitsCache& versionbitscache) 34 { 35 assert(Consensus::ValidDeployment(dep)); 36 return DeploymentActiveAfter(index.pprev, params, dep, versionbitscache); 37 } 38 39 /** Determine if a deployment is enabled (can ever be active) */ 40 inline bool DeploymentEnabled(const Consensus::Params& params, Consensus::BuriedDeployment dep) 41 { 42 assert(Consensus::ValidDeployment(dep)); 43 return params.DeploymentHeight(dep) != std::numeric_limits<int>::max(); 44 } 45 46 inline bool DeploymentEnabled(const Consensus::Params& params, Consensus::DeploymentPos dep) 47 { 48 assert(Consensus::ValidDeployment(dep)); 49 return params.vDeployments[dep].nStartTime != Consensus::BIP9Deployment::NEVER_ACTIVE; 50 } 51 52 #endif // BITCOIN_DEPLOYMENTSTATUS_H