pub trait ValidatedState<TYPES>: Serialize + DeserializeOwned + Debug + Default + PartialEq + Eq + Send + Sync + Clone
where TYPES: NodeType,
{ type Error: Error + Debug + Send + Sync; type Instance: InstanceState; type Delta: StateDelta; type Time: ConsensusTime; // Required methods fn validate_and_apply_header( &self, instance: &Self::Instance, parent_leaf: &Leaf<TYPES>, proposed_header: &<TYPES as NodeType>::BlockHeader, vid_common: <VidSchemeType as VidScheme>::Common, version: Version ) -> impl Future<Output = Result<(Self, Self::Delta), Self::Error>> + Send; fn from_header(block_header: &<TYPES as NodeType>::BlockHeader) -> Self; fn genesis(instance: &Self::Instance) -> (Self, Self::Delta); fn on_commit(&self); }
Expand description

Abstraction over the state that blocks modify

This trait represents the behaviors that the ‘global’ ledger state must have:

  • A defined error type (Error)
  • The type of block that modifies this type of state (BlockPayload(ValidatedStates:: BlockPayload))
  • The ability to validate that a block header is actually a valid extension of this state and produce a new state, with the modifications from the block applied (validate_and_apply_header)

Required Associated Types§

type Error: Error + Debug + Send + Sync

The error type for this particular type of ledger state

type Instance: InstanceState

The type of the instance-level state this state is associated with

type Delta: StateDelta

The type of the state delta this state is associated with.

type Time: ConsensusTime

Time compatibility needed for reward collection

Required Methods§

fn validate_and_apply_header( &self, instance: &Self::Instance, parent_leaf: &Leaf<TYPES>, proposed_header: &<TYPES as NodeType>::BlockHeader, vid_common: <VidSchemeType as VidScheme>::Common, version: Version ) -> impl Future<Output = Result<(Self, Self::Delta), Self::Error>> + Send

Check if the proposed block header is valid and apply it to the state if so.

Returns the new state and state delta.

§Arguments
  • instance - Immutable instance-level state.
§Errors

If the block header is invalid or appending it would lead to an invalid state.

fn from_header(block_header: &<TYPES as NodeType>::BlockHeader) -> Self

Construct the state with the given block header.

This can also be used to rebuild the state for catchup.

fn genesis(instance: &Self::Instance) -> (Self, Self::Delta)

Construct a genesis validated state.

fn on_commit(&self)

Gets called to notify the persistence backend that this state has been committed

Object Safety§

This trait is not object safe.

Implementors§