crate::ix!();
pub const VERSIONBITS_LAST_OLD_BLOCK_VERSION: u32 = 4;
pub const VERSIONBITS_TOP_BITS: u32 = 0x20000000;
pub const VERSIONBITS_TOP_MASK: u32 = 0xE0000000;
pub const VERSIONBITS_NUM_BITS: u32 = 29;
pub enum ThresholdState {
DEFINED,
STARTED,
LOCKED_IN,
ACTIVE,
FAILED,
}
pub type ThresholdConditionCache = HashMap<*const BlockIndex,ThresholdState>;
pub struct BIP9Stats {
period: i32,
threshold: i32,
elapsed: i32,
count: i32,
possible: bool,
}
pub trait AbstractThresholdConditionChecker:
abstract_threshold_condition_checker::Interface {
fn get_state_for(&self,
pindex_prev: *const BlockIndex,
params: &ChainConsensusParams,
cache: &mut ThresholdConditionCache) -> ThresholdState {
todo!();
}
fn get_state_statistics_for(&self,
pindex: *const BlockIndex,
params: &ChainConsensusParams) -> BIP9Stats {
todo!();
}
fn get_state_since_height_for(&self,
pindex_prev: *const BlockIndex,
params: &ChainConsensusParams,
cache: &mut ThresholdConditionCache) -> i32 {
todo!();
}
}
pub mod abstract_threshold_condition_checker {
use super::*;
pub trait Condition {
fn condition(&self,
pindex: *const BlockIndex,
params: &ChainConsensusParams) -> bool;
}
pub trait BeginTime {
fn begin_time(&self, params: &ChainConsensusParams) -> i64;
}
pub trait EndTime {
fn end_time(&self, params: &ChainConsensusParams) -> i64;
}
pub trait MinActivationHeight {
fn min_activation_height(&self, params: &ChainConsensusParams) -> i32 { 0 }
}
pub trait Period {
fn period(&self, params: &ChainConsensusParams) -> i32;
}
pub trait Threshold {
fn threshold(&self, params: &ChainConsensusParams) -> i32;
}
pub trait Interface:
Condition
+ BeginTime
+ EndTime
+ MinActivationHeight
+ Period
+ Threshold { }
}
pub struct VersionBitsCache {
mutex: std::sync::Mutex<version_bits_cache::Inner>,
}
pub mod version_bits_cache {
use super::*;
pub struct Inner {
caches: [ThresholdConditionCache; ConsensusDeploymentPos::MAX_VERSION_BITS_DEPLOYMENTS as usize],
}
}
pub struct VersionBitsConditionChecker {
id: ConsensusDeploymentPos,
}
impl AbstractThresholdConditionChecker for VersionBitsConditionChecker {
}
impl abstract_threshold_condition_checker::Interface for VersionBitsConditionChecker {}
impl abstract_threshold_condition_checker::BeginTime for VersionBitsConditionChecker {
fn begin_time(&self, params: &ChainConsensusParams) -> i64 {
todo!();
}
}
impl abstract_threshold_condition_checker::EndTime for VersionBitsConditionChecker {
fn end_time(&self, params: &ChainConsensusParams) -> i64 {
todo!();
}
}
impl abstract_threshold_condition_checker::MinActivationHeight for VersionBitsConditionChecker {
fn min_activation_height(&self, params: &ChainConsensusParams) -> i32 {
todo!();
}
}
impl abstract_threshold_condition_checker::Period for VersionBitsConditionChecker {
fn period(&self, params: &ChainConsensusParams) -> i32 {
todo!();
}
}
impl abstract_threshold_condition_checker::Threshold for VersionBitsConditionChecker {
fn threshold(&self, params: &ChainConsensusParams) -> i32 {
todo!();
}
}
impl abstract_threshold_condition_checker::Condition for VersionBitsConditionChecker {
fn condition(&self,
pindex: *const BlockIndex,
params: &ChainConsensusParams) -> bool {
todo!();
}
}
impl VersionBitsConditionChecker {
pub fn mask(&self, params: &ChainConsensusParams) -> u32 {
todo!();
}
pub fn new(id: ConsensusDeploymentPos) -> Self {
todo!();
}
}
impl VersionBitsCache {
pub fn state(&mut self,
pindex_prev: *const BlockIndex,
params: &ChainConsensusParams,
pos: ConsensusDeploymentPos) -> ThresholdState {
todo!();
}
pub fn statistics(&mut self,
pindex_prev: *const BlockIndex,
params: &ChainConsensusParams,
pos: ConsensusDeploymentPos) -> BIP9Stats {
todo!();
}
pub fn state_since_height(&mut self,
pindex_prev: *const BlockIndex,
params: &ChainConsensusParams,
pos: ConsensusDeploymentPos) -> i32 {
todo!();
}
pub fn mask(&mut self,
params: &ChainConsensusParams,
pos: ConsensusDeploymentPos) -> u32 {
todo!();
}
pub fn compute_block_version(&mut self,
pindex_prev: *const BlockIndex,
params: &ChainConsensusParams) -> i32 {
todo!();
}
pub fn clear(&mut self) {
todo!();
}
}