pub struct EpochChangeCondition {
pub min_round_count: u64,
pub max_round_count: u64,
pub target_duration_millis: u64,
}
Fields§
§min_round_count: u64
A minimum number of rounds that must happen in an epoch.
The timestamp will not drive the epoch progression until at least this number of rounds is
reached (i.e. if an actual number of rounds after [duration_millis
] is less than this
value, the epoch change will wait until this value is reached).
max_round_count: u64
A maximum number of rounds that can happen in an epoch.
If an actual number of rounds reaches this value before [duration_millis
], then the
timestamp no longer drives the epoch progression (i.e. the epoch change will happen right
away, to prevent more than [max_round_count
] rounds).
target_duration_millis: u64
An “ideal” duration of an epoch, which should be applied if the number of epochs is within
the min_round_count..max_round_count
range.
Note: the range exists in order to limit the amount of damage that can be done by
semi-byzantine purposeful clock drift attacks.
Implementations§
Source§impl EpochChangeCondition
impl EpochChangeCondition
Sourcepub fn should_epoch_change(
&self,
effective_start: i64,
current_time: i64,
round: Round,
) -> EpochChangeOutcome
pub fn should_epoch_change( &self, effective_start: i64, current_time: i64, round: Round, ) -> EpochChangeOutcome
Determines whether this condition is met by the given actual state. See the condition’s field definitions for exact rules.
Trait Implementations§
Source§impl Clone for EpochChangeCondition
impl Clone for EpochChangeCondition
Source§fn clone(&self) -> EpochChangeCondition
fn clone(&self) -> EpochChangeCondition
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for EpochChangeCondition
impl Debug for EpochChangeCondition
Source§impl<D> Decode<ManifestCustomValueKind, D> for EpochChangeConditionwhere
D: Decoder<ManifestCustomValueKind>,
impl<D> Decode<ManifestCustomValueKind, D> for EpochChangeConditionwhere
D: Decoder<ManifestCustomValueKind>,
Source§fn decode_body_with_value_kind(
decoder: &mut D,
value_kind: ValueKind<ManifestCustomValueKind>,
) -> Result<EpochChangeCondition, DecodeError>
fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<ManifestCustomValueKind>, ) -> Result<EpochChangeCondition, DecodeError>
Source§impl<D> Decode<ScryptoCustomValueKind, D> for EpochChangeConditionwhere
D: Decoder<ScryptoCustomValueKind>,
impl<D> Decode<ScryptoCustomValueKind, D> for EpochChangeConditionwhere
D: Decoder<ScryptoCustomValueKind>,
Source§fn decode_body_with_value_kind(
decoder: &mut D,
value_kind: ValueKind<ScryptoCustomValueKind>,
) -> Result<EpochChangeCondition, DecodeError>
fn decode_body_with_value_kind( decoder: &mut D, value_kind: ValueKind<ScryptoCustomValueKind>, ) -> Result<EpochChangeCondition, DecodeError>
Source§impl Default for EpochChangeCondition
impl Default for EpochChangeCondition
Source§fn default() -> EpochChangeCondition
fn default() -> EpochChangeCondition
Source§impl Describe<ScryptoCustomTypeKind> for EpochChangeCondition
impl Describe<ScryptoCustomTypeKind> for EpochChangeCondition
Source§const TYPE_ID: RustTypeId
const TYPE_ID: RustTypeId
TYPE_ID
should give a unique identifier for its SBOR schema type.
An SBOR schema type capture details about the SBOR payload, how it should be interpreted, validated and displayed. Read moreSource§fn type_data() -> TypeData<ScryptoCustomTypeKind, RustTypeId>
fn type_data() -> TypeData<ScryptoCustomTypeKind, RustTypeId>
Source§fn add_all_dependencies(aggregator: &mut TypeAggregator<ScryptoCustomTypeKind>)
fn add_all_dependencies(aggregator: &mut TypeAggregator<ScryptoCustomTypeKind>)
get_local_type_data
, we need to ensure that the type and all of its own references
get added to the aggregator. Read moreSource§impl<E> Encode<ManifestCustomValueKind, E> for EpochChangeConditionwhere
E: Encoder<ManifestCustomValueKind>,
impl<E> Encode<ManifestCustomValueKind, E> for EpochChangeConditionwhere
E: Encoder<ManifestCustomValueKind>,
Source§fn encode_value_kind(&self, encoder: &mut E) -> Result<(), EncodeError>
fn encode_value_kind(&self, encoder: &mut E) -> Result<(), EncodeError>
Source§fn encode_body(&self, encoder: &mut E) -> Result<(), EncodeError>
fn encode_body(&self, encoder: &mut E) -> Result<(), EncodeError>
Source§impl<E> Encode<ScryptoCustomValueKind, E> for EpochChangeConditionwhere
E: Encoder<ScryptoCustomValueKind>,
impl<E> Encode<ScryptoCustomValueKind, E> for EpochChangeConditionwhere
E: Encoder<ScryptoCustomValueKind>,
Source§fn encode_value_kind(&self, encoder: &mut E) -> Result<(), EncodeError>
fn encode_value_kind(&self, encoder: &mut E) -> Result<(), EncodeError>
Source§fn encode_body(&self, encoder: &mut E) -> Result<(), EncodeError>
fn encode_body(&self, encoder: &mut E) -> Result<(), EncodeError>
Source§impl PartialEq for EpochChangeCondition
impl PartialEq for EpochChangeCondition
Source§impl SborTuple<ManifestCustomValueKind> for EpochChangeCondition
impl SborTuple<ManifestCustomValueKind> for EpochChangeCondition
fn get_length(&self) -> usize
Source§impl SborTuple<ScryptoCustomValueKind> for EpochChangeCondition
impl SborTuple<ScryptoCustomValueKind> for EpochChangeCondition
fn get_length(&self) -> usize
impl Eq for EpochChangeCondition
impl StructuralPartialEq for EpochChangeCondition
Auto Trait Implementations§
impl Freeze for EpochChangeCondition
impl RefUnwindSafe for EpochChangeCondition
impl Send for EpochChangeCondition
impl Sync for EpochChangeCondition
impl Unpin for EpochChangeCondition
impl UnwindSafe for EpochChangeCondition
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, U> ContextualTryInto<U> for Twhere
U: ContextualTryFrom<T>,
impl<T, U> ContextualTryInto<U> for Twhere
U: ContextualTryFrom<T>,
type Error = <U as ContextualTryFrom<T>>::Error
type Context = <U as ContextualTryFrom<T>>::Context
fn contextual_try_into( self, context: &<U as ContextualTryFrom<T>>::Context, ) -> Result<U, <U as ContextualTryFrom<T>>::Error>
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more