pub trait BlockWriter: Send + Sync {
type Block: Block;
type Receipt: Send + Sync;
// Required methods
fn insert_block(
&self,
block: SealedBlockWithSenders<Self::Block>,
write_to: StorageLocation,
) -> ProviderResult<StoredBlockBodyIndices>;
fn append_block_bodies(
&self,
bodies: Vec<(BlockNumber, Option<<Self::Block as Block>::Body>)>,
write_to: StorageLocation,
) -> ProviderResult<()>;
fn remove_blocks_above(
&self,
block: BlockNumber,
remove_from: StorageLocation,
) -> ProviderResult<()>;
fn remove_bodies_above(
&self,
block: BlockNumber,
remove_from: StorageLocation,
) -> ProviderResult<()>;
fn append_blocks_with_state(
&self,
blocks: Vec<SealedBlockWithSenders<Self::Block>>,
execution_outcome: ExecutionOutcome<Self::Receipt>,
hashed_state: HashedPostStateSorted,
trie_updates: TrieUpdates,
) -> ProviderResult<()>;
}
Expand description
Block Writer
Required Associated Types§
Sourcetype Receipt: Send + Sync
type Receipt: Send + Sync
The receipt type for ExecutionOutcome
.
Required Methods§
Sourcefn insert_block(
&self,
block: SealedBlockWithSenders<Self::Block>,
write_to: StorageLocation,
) -> ProviderResult<StoredBlockBodyIndices>
fn insert_block( &self, block: SealedBlockWithSenders<Self::Block>, write_to: StorageLocation, ) -> ProviderResult<StoredBlockBodyIndices>
Insert full block and make it canonical. Parent tx num and transition id is taken from parent block in database.
Return [StoredBlockBodyIndices] that contains indices of the first and last transactions and transition in the block.
Accepts StorageLocation
value which specifies where transactions and headers should be
written.
Sourcefn append_block_bodies(
&self,
bodies: Vec<(BlockNumber, Option<<Self::Block as Block>::Body>)>,
write_to: StorageLocation,
) -> ProviderResult<()>
fn append_block_bodies( &self, bodies: Vec<(BlockNumber, Option<<Self::Block as Block>::Body>)>, write_to: StorageLocation, ) -> ProviderResult<()>
Appends a batch of block bodies extending the canonical chain. This is invoked during
Bodies
stage and does not write to TransactionHashNumbers
and TransactionSenders
tables which are populated on later stages.
Bodies are passed as Option
s, if body is None
the corresponding block is empty.
Sourcefn remove_blocks_above(
&self,
block: BlockNumber,
remove_from: StorageLocation,
) -> ProviderResult<()>
fn remove_blocks_above( &self, block: BlockNumber, remove_from: StorageLocation, ) -> ProviderResult<()>
Removes all blocks above the given block number from the database.
Note: This does not remove state or execution data.
Sourcefn remove_bodies_above(
&self,
block: BlockNumber,
remove_from: StorageLocation,
) -> ProviderResult<()>
fn remove_bodies_above( &self, block: BlockNumber, remove_from: StorageLocation, ) -> ProviderResult<()>
Removes all block bodies above the given block number from the database.
Sourcefn append_blocks_with_state(
&self,
blocks: Vec<SealedBlockWithSenders<Self::Block>>,
execution_outcome: ExecutionOutcome<Self::Receipt>,
hashed_state: HashedPostStateSorted,
trie_updates: TrieUpdates,
) -> ProviderResult<()>
fn append_blocks_with_state( &self, blocks: Vec<SealedBlockWithSenders<Self::Block>>, execution_outcome: ExecutionOutcome<Self::Receipt>, hashed_state: HashedPostStateSorted, trie_updates: TrieUpdates, ) -> ProviderResult<()>
Appends a batch of sealed blocks to the blockchain, including sender information, and updates the post-state.
Inserts the blocks into the database and updates the state with
provided BundleState
.
§Parameters
blocks
: Vector ofSealedBlockWithSenders
instances to append.state
: Post-state information to update after appending.
§Returns
Returns Ok(())
on success, or an error if any operation fails.