deploymentstatus.h raw

   1  // Copyright (c) 2020-present 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 versionbitscache.IsActiveAfter(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
  53