Trait LoadPendingBlock

pub trait LoadPendingBlock: EthApiTypes + RpcNodeCore
where Self::NetworkTypes: RpcTypes<Header = Header<<Self::Provider as HeaderProvider>::Header>>, Self::Error: FromEvmError<Self::Evm>, Self::Provider: BlockReaderIdExt + ChainSpecProvider + StateProviderFactory, <Self::Provider as ReceiptProvider>::Receipt: Receipt, <Self::Provider as ChainSpecProvider>::ChainSpec: EthChainSpec + EthereumHardforks, Self::Pool: TransactionPool, <Self::Pool as TransactionPool>::Transaction: PoolTransaction<Consensus = <Self::Provider as TransactionsProvider>::Transaction>, Self::Evm: ConfigureEvm, <Self::Evm as ConfigureEvm>::Primitives: NodePrimitives<BlockHeader = <Self::Provider as HeaderProvider>::Header, SignedTx = <Self::Provider as TransactionsProvider>::Transaction, Receipt = <Self::Provider as ReceiptProvider>::Receipt, Block = <Self::Provider as BlockReader>::Block>,
{ // Required methods fn pending_block( &self, ) -> &Mutex<Option<PendingBlock<<Self::Provider as BlockReader>::Block, <Self::Provider as ReceiptProvider>::Receipt>>>; fn next_env_attributes( &self, parent: &SealedHeader<<Self::Provider as HeaderProvider>::Header>, ) -> Result<<Self::Evm as ConfigureEvm>::NextBlockEnvCtx, Self::Error>; // Provided methods fn pending_block_env_and_cfg( &self, ) -> Result<PendingBlockEnv<<Self::Provider as BlockReader>::Block, <Self::Provider as ReceiptProvider>::Receipt, <<<Self::Evm as ConfigureEvm>::BlockExecutorFactory as BlockExecutorFactory>::EvmFactory as EvmFactory>::Spec>, Self::Error> { ... } fn local_pending_block( &self, ) -> impl Future<Output = Result<Option<(RecoveredBlock<<Self::Provider as BlockReader>::Block>, Vec<<Self::Provider as ReceiptProvider>::Receipt>)>, Self::Error>> + Send where Self: SpawnBlocking { ... } fn build_block( &self, parent: &SealedHeader<<Self::Provider as HeaderProvider>::Header>, ) -> Result<(RecoveredBlock<<Self::Provider as BlockReader>::Block>, Vec<<Self::Provider as ReceiptProvider>::Receipt>), Self::Error> where EthApiError: From<ProviderError> { ... } }
Available on crate feature rpc only.
Expand description

Loads a pending block from database.

Behaviour shared by several eth_ RPC methods, not exclusive to eth_ blocks RPC methods.

Required Methods§

fn pending_block( &self, ) -> &Mutex<Option<PendingBlock<<Self::Provider as BlockReader>::Block, <Self::Provider as ReceiptProvider>::Receipt>>>

Returns a handle to the pending block.

Data access in default (L1) trait method implementations.

fn next_env_attributes( &self, parent: &SealedHeader<<Self::Provider as HeaderProvider>::Header>, ) -> Result<<Self::Evm as ConfigureEvm>::NextBlockEnvCtx, Self::Error>

Returns ConfigureEvm::NextBlockEnvCtx for building a local pending block.

Provided Methods§

fn pending_block_env_and_cfg( &self, ) -> Result<PendingBlockEnv<<Self::Provider as BlockReader>::Block, <Self::Provider as ReceiptProvider>::Receipt, <<<Self::Evm as ConfigureEvm>::BlockExecutorFactory as BlockExecutorFactory>::EvmFactory as EvmFactory>::Spec>, Self::Error>

Configures the PendingBlockEnv for the pending block

If no pending block is available, this will derive it from the latest block

fn local_pending_block( &self, ) -> impl Future<Output = Result<Option<(RecoveredBlock<<Self::Provider as BlockReader>::Block>, Vec<<Self::Provider as ReceiptProvider>::Receipt>)>, Self::Error>> + Send
where Self: SpawnBlocking,

Returns the locally built pending block

fn build_block( &self, parent: &SealedHeader<<Self::Provider as HeaderProvider>::Header>, ) -> Result<(RecoveredBlock<<Self::Provider as BlockReader>::Block>, Vec<<Self::Provider as ReceiptProvider>::Receipt>), Self::Error>

Builds a pending block using the configured provider and pool.

If the origin is the actual pending block, the block is built with withdrawals.

After Cancun, if the origin is the actual pending block, the block includes the EIP-4788 pre block contract call using the parent beacon block root received from the CL.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<Provider, Pool, Network, EvmConfig> LoadPendingBlock for EthApi<Provider, Pool, Network, EvmConfig>
where EthApi<Provider, Pool, Network, EvmConfig>: SpawnBlocking + RpcNodeCore, <EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Provider: ChainSpecProvider + StateProviderFactory + BlockReaderIdExt<Transaction = TransactionSigned, Block = Block<TransactionSigned>, Receipt = Receipt, Header = Header>, <<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Provider as ChainSpecProvider>::ChainSpec: EthChainSpec + EthereumHardforks, <EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Pool: TransactionPool, <<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Pool as TransactionPool>::Transaction: PoolTransaction<Consensus = <<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Provider as TransactionsProvider>::Transaction>, <EthApi<Provider, Pool, Network, EvmConfig> as EthApiTypes>::NetworkTypes: RpcTypes<Header = Header>, <EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Evm: ConfigureEvm<NextBlockEnvCtx = NextBlockEnvAttributes>, <<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Evm as ConfigureEvm>::Primitives: NodePrimitives<BlockHeader = <<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Provider as HeaderProvider>::Header, SignedTx = <<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Provider as TransactionsProvider>::Transaction, Receipt = <<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Provider as ReceiptProvider>::Receipt, Block = <<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Provider as BlockReader>::Block>, <EthApi<Provider, Pool, Network, EvmConfig> as EthApiTypes>::Error: FromEvmError<<EthApi<Provider, Pool, Network, EvmConfig> as RpcNodeCore>::Evm>, Provider: BlockReader<Block = Block<TransactionSigned>, Receipt = Receipt>,

impl<N> LoadPendingBlock for OpEthApi<N>
where Self: SpawnBlocking + EthApiTypes<NetworkTypes: RpcTypes<Header = Header<ProviderHeader<Self::Provider>>>, Error: FromEvmError<Self::Evm>>, N: RpcNodeCore<Provider: BlockReaderIdExt<Transaction = OpTransactionSigned, Block = OpBlock, Receipt = OpReceipt, Header = Header> + ChainSpecProvider<ChainSpec: EthChainSpec + OpHardforks> + StateProviderFactory, Pool: TransactionPool<Transaction: PoolTransaction<Consensus = ProviderTx<N::Provider>>>, Evm: ConfigureEvm<Primitives: NodePrimitives<SignedTx = ProviderTx<Self::Provider>, BlockHeader = ProviderHeader<Self::Provider>, Receipt = ProviderReceipt<Self::Provider>, Block = ProviderBlock<Self::Provider>>, NextBlockEnvCtx = OpNextBlockEnvAttributes>>,