* Class to implement versionbits logic. */
| 188 | * Class to implement versionbits logic. |
| 189 | */ |
| 190 | class VersionBitsConditionChecker : public AbstractThresholdConditionChecker { |
| 191 | private: |
| 192 | const Consensus::DeploymentPos id; |
| 193 | |
| 194 | protected: |
| 195 | int64_t BeginTime(const Consensus::Params& params) const override { return params.vDeployments[id].nStartTime; } |
| 196 | int64_t EndTime(const Consensus::Params& params) const override { return params.vDeployments[id].nTimeout; } |
| 197 | int MinActivationHeight(const Consensus::Params& params) const override { return params.vDeployments[id].min_activation_height; } |
| 198 | int Period(const Consensus::Params& params) const override { |
| 199 | if (params.vDeployments[id].nPeriod) { |
| 200 | return *params.vDeployments[id].nPeriod; |
| 201 | } else { |
| 202 | return params.nMinerConfirmationWindow; |
| 203 | } |
| 204 | } |
| 205 | int Threshold(const Consensus::Params& params) const override { |
| 206 | if (params.vDeployments[id].nThreshold) { |
| 207 | return *params.vDeployments[id].nThreshold; |
| 208 | } else { |
| 209 | return params.nRuleChangeActivationThreshold; |
| 210 | } |
| 211 | } |
| 212 | |
| 213 | bool Condition(const CBlockIndex* pindex, const Consensus::Params& params) const override |
| 214 | { |
| 215 | return (((pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS) && (pindex->nVersion & Mask(params)) != 0); |
| 216 | } |
| 217 | |
| 218 | public: |
| 219 | explicit VersionBitsConditionChecker(Consensus::DeploymentPos id_) : id(id_) {} |
| 220 | uint32_t Mask(const Consensus::Params& params) const { return ((uint32_t)1) << params.vDeployments[id].bit; } |
| 221 | }; |
| 222 | |
| 223 | } // namespace |
| 224 |
no outgoing calls
no test coverage detected