pub trait StateProviderFactory:
BlockIdReader
+ Send
+ Sync {
// Required methods
fn latest(&self) -> ProviderResult<StateProviderBox>;
fn state_by_block_number_or_tag(
&self,
number_or_tag: BlockNumberOrTag,
) -> ProviderResult<StateProviderBox>;
fn history_by_block_number(
&self,
block: BlockNumber,
) -> ProviderResult<StateProviderBox>;
fn history_by_block_hash(
&self,
block: BlockHash,
) -> ProviderResult<StateProviderBox>;
fn state_by_block_hash(
&self,
block: BlockHash,
) -> ProviderResult<StateProviderBox>;
fn pending(&self) -> ProviderResult<StateProviderBox>;
fn pending_state_by_hash(
&self,
block_hash: B256,
) -> ProviderResult<Option<StateProviderBox>>;
// Provided method
fn state_by_block_id(
&self,
block_id: BlockId,
) -> ProviderResult<StateProviderBox> { ... }
}
Expand description
Light wrapper that returns StateProvider
implementations that correspond to the given
BlockNumber
, the latest state, or the pending state.
This type differentiates states into historical
, latest
and pending
, where the latest
block determines what is historical or pending: [historical..latest..pending]
.
The latest
state represents the state after the most recent block has been committed to the
database, historical
states are states that have been committed to the database before the
latest
state, and pending
states are states that have not yet been committed to the
database which may or may not become the latest
state, depending on consensus.
Note: the pending
block is considered the block that extends the canonical chain but one and
has the latest
block as its parent.
All states are inclusive, meaning they include all all changes made (executed transactions)
in their respective blocks. For example StateProviderFactory::history_by_block_number for
block number n
will return the state after block n
was executed (transactions, withdrawals).
In other words, all states point to the end of the state’s respective block, which is equivalent
to state at the beginning of the child block.
This affects tracing, or replaying blocks, which will need to be executed on top of the state of
the parent block. For example, in order to trace block n
, the state after block n - 1
needs
to be used, since block n
was executed on its parent block’s state.
Required Methods§
Sourcefn latest(&self) -> ProviderResult<StateProviderBox>
fn latest(&self) -> ProviderResult<StateProviderBox>
Storage provider for latest block.
Sourcefn state_by_block_number_or_tag(
&self,
number_or_tag: BlockNumberOrTag,
) -> ProviderResult<StateProviderBox>
fn state_by_block_number_or_tag( &self, number_or_tag: BlockNumberOrTag, ) -> ProviderResult<StateProviderBox>
Returns a StateProvider indexed by the given block number or tag.
Note: if a number is provided this will only look at historical(canonical) state.
Sourcefn history_by_block_number(
&self,
block: BlockNumber,
) -> ProviderResult<StateProviderBox>
fn history_by_block_number( &self, block: BlockNumber, ) -> ProviderResult<StateProviderBox>
Returns a historical StateProvider indexed by the given historic block number.
Note: this only looks at historical blocks, not pending blocks.
Sourcefn history_by_block_hash(
&self,
block: BlockHash,
) -> ProviderResult<StateProviderBox>
fn history_by_block_hash( &self, block: BlockHash, ) -> ProviderResult<StateProviderBox>
Returns a historical StateProvider indexed by the given block hash.
Note: this only looks at historical blocks, not pending blocks.
Sourcefn state_by_block_hash(
&self,
block: BlockHash,
) -> ProviderResult<StateProviderBox>
fn state_by_block_hash( &self, block: BlockHash, ) -> ProviderResult<StateProviderBox>
Returns any StateProvider with matching block hash.
This will return a StateProvider for either a historical or pending block.
Sourcefn pending(&self) -> ProviderResult<StateProviderBox>
fn pending(&self) -> ProviderResult<StateProviderBox>
Storage provider for pending state.
Represents the state at the block that extends the canonical chain by one.
If there’s no pending
block, then this is equal to StateProviderFactory::latest
Sourcefn pending_state_by_hash(
&self,
block_hash: B256,
) -> ProviderResult<Option<StateProviderBox>>
fn pending_state_by_hash( &self, block_hash: B256, ) -> ProviderResult<Option<StateProviderBox>>
Storage provider for pending state for the given block hash.
Represents the state at the block that extends the canonical chain.
If the block couldn’t be found, returns None
.
Provided Methods§
Sourcefn state_by_block_id(
&self,
block_id: BlockId,
) -> ProviderResult<StateProviderBox>
fn state_by_block_id( &self, block_id: BlockId, ) -> ProviderResult<StateProviderBox>
Returns a StateProvider
indexed by the given [BlockId
].
Note: if a number or hash is provided this will only look at historical(canonical) state.