reth::providers

Trait BlockWriter

Source
pub trait BlockWriter: Send + Sync {
    type Body: Send + Sync;

    // Required methods
    fn insert_block(
        &self,
        block: SealedBlockWithSenders<Header, Self::Body>,
        write_transactions_to: StorageLocation,
    ) -> Result<StoredBlockBodyIndices, ProviderError>;
    fn append_block_bodies(
        &self,
        bodies: Vec<(u64, Option<Self::Body>)>,
        write_transactions_to: StorageLocation,
    ) -> Result<(), ProviderError>;
    fn remove_blocks_above(
        &self,
        block: u64,
        remove_transactions_from: StorageLocation,
    ) -> Result<(), ProviderError>;
    fn remove_bodies_above(
        &self,
        block: u64,
        remove_transactions_from: StorageLocation,
    ) -> Result<(), ProviderError>;
    fn append_blocks_with_state(
        &self,
        blocks: Vec<SealedBlockWithSenders<Header, Self::Body>>,
        execution_outcome: ExecutionOutcome,
        hashed_state: HashedPostStateSorted,
        trie_updates: TrieUpdates,
    ) -> Result<(), ProviderError>;
}
Expand description

Block Writer

Required Associated Types§

Source

type Body: Send + Sync

The body this writer can write.

Required Methods§

Source

fn insert_block( &self, block: SealedBlockWithSenders<Header, Self::Body>, write_transactions_to: StorageLocation, ) -> Result<StoredBlockBodyIndices, ProviderError>

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.

Source

fn append_block_bodies( &self, bodies: Vec<(u64, Option<Self::Body>)>, write_transactions_to: StorageLocation, ) -> Result<(), ProviderError>

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 Options, if body is None the corresponding block is empty.

Source

fn remove_blocks_above( &self, block: u64, remove_transactions_from: StorageLocation, ) -> Result<(), ProviderError>

Removes all blocks above the given block number from the database.

Note: This does not remove state or execution data.

Source

fn remove_bodies_above( &self, block: u64, remove_transactions_from: StorageLocation, ) -> Result<(), ProviderError>

Removes all block bodies above the given block number from the database.

Source

fn append_blocks_with_state( &self, blocks: Vec<SealedBlockWithSenders<Header, Self::Body>>, execution_outcome: ExecutionOutcome, hashed_state: HashedPostStateSorted, trie_updates: TrieUpdates, ) -> Result<(), ProviderError>

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 of SealedBlockWithSenders instances to append.
  • state: Post-state information to update after appending.
§Returns

Returns Ok(()) on success, or an error if any operation fails.

Implementations on Foreign Types§

Source§

impl<'a, T> BlockWriter for &'a T
where T: 'a + BlockWriter + ?Sized, &'a T: Send + Sync,

Source§

type Body = <T as BlockWriter>::Body

Source§

fn insert_block( &self, block: SealedBlockWithSenders<Header, <&'a T as BlockWriter>::Body>, write_transactions_to: StorageLocation, ) -> Result<StoredBlockBodyIndices, ProviderError>

Source§

fn append_block_bodies( &self, bodies: Vec<(u64, Option<<&'a T as BlockWriter>::Body>)>, write_transactions_to: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn remove_blocks_above( &self, block: u64, remove_transactions_from: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn remove_bodies_above( &self, block: u64, remove_transactions_from: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn append_blocks_with_state( &self, blocks: Vec<SealedBlockWithSenders<Header, <&'a T as BlockWriter>::Body>>, execution_outcome: ExecutionOutcome, hashed_state: HashedPostStateSorted, trie_updates: TrieUpdates, ) -> Result<(), ProviderError>

Source§

impl<T> BlockWriter for Box<T>
where T: BlockWriter + ?Sized, Box<T>: Send + Sync,

Source§

type Body = <T as BlockWriter>::Body

Source§

fn insert_block( &self, block: SealedBlockWithSenders<Header, <Box<T> as BlockWriter>::Body>, write_transactions_to: StorageLocation, ) -> Result<StoredBlockBodyIndices, ProviderError>

Source§

fn append_block_bodies( &self, bodies: Vec<(u64, Option<<Box<T> as BlockWriter>::Body>)>, write_transactions_to: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn remove_blocks_above( &self, block: u64, remove_transactions_from: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn remove_bodies_above( &self, block: u64, remove_transactions_from: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn append_blocks_with_state( &self, blocks: Vec<SealedBlockWithSenders<Header, <Box<T> as BlockWriter>::Body>>, execution_outcome: ExecutionOutcome, hashed_state: HashedPostStateSorted, trie_updates: TrieUpdates, ) -> Result<(), ProviderError>

Source§

impl<T> BlockWriter for Arc<T>
where T: BlockWriter + ?Sized, Arc<T>: Send + Sync,

Source§

type Body = <T as BlockWriter>::Body

Source§

fn insert_block( &self, block: SealedBlockWithSenders<Header, <Arc<T> as BlockWriter>::Body>, write_transactions_to: StorageLocation, ) -> Result<StoredBlockBodyIndices, ProviderError>

Source§

fn append_block_bodies( &self, bodies: Vec<(u64, Option<<Arc<T> as BlockWriter>::Body>)>, write_transactions_to: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn remove_blocks_above( &self, block: u64, remove_transactions_from: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn remove_bodies_above( &self, block: u64, remove_transactions_from: StorageLocation, ) -> Result<(), ProviderError>

Source§

fn append_blocks_with_state( &self, blocks: Vec<SealedBlockWithSenders<Header, <Arc<T> as BlockWriter>::Body>>, execution_outcome: ExecutionOutcome, hashed_state: HashedPostStateSorted, trie_updates: TrieUpdates, ) -> Result<(), ProviderError>

Implementors§

Source§

impl<TX, N> BlockWriter for DatabaseProvider<TX, N>
where TX: DbTxMut + DbTx + 'static, N: ProviderNodeTypes + 'static,