pub trait ValidatedState<TYPES: NodeType>: Serialize + DeserializeOwned + Debug + Default + PartialEq + Eq + Send + Sync + Clone {
    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::BlockHeader,
        vid_common: VidCommon,
        version: Version
    ) -> impl Future<Output = Result<(Self, Self::Delta), Self::Error>> + Send;
    fn from_header(block_header: &TYPES::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§

source

type Error: Error + Debug + Send + Sync

The error type for this particular type of ledger state

source

type Instance: InstanceState

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

source

type Delta: StateDelta

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

source

type Time: ConsensusTime

Time compatibility needed for reward collection

Required Methods§

source

fn validate_and_apply_header( &self, instance: &Self::Instance, parent_leaf: &Leaf<TYPES>, proposed_header: &TYPES::BlockHeader, vid_common: VidCommon, 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.

source

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

Construct the state with the given block header.

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

source

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

Construct a genesis validated state.

source

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§