reth_seismic_rpc/eth/
pending_block.rs1use crate::SeismicEthApi;
4use alloy_consensus::BlockHeader;
5use alloy_primitives::B256;
6use reth_chainspec::{ChainSpecProvider, EthChainSpec, EthereumHardforks};
7use reth_evm::{ConfigureEvm, NextBlockEnvAttributes};
8use reth_node_api::NodePrimitives;
9use reth_primitives_traits::SealedHeader;
10use reth_rpc_eth_api::{
11 helpers::{LoadPendingBlock, SpawnBlocking},
12 types::RpcTypes,
13 EthApiTypes, FromEvmError, RpcNodeCore,
14};
15use reth_rpc_eth_types::{EthApiError, PendingBlock};
16use reth_seismic_primitives::{SeismicBlock, SeismicReceipt, SeismicTransactionSigned};
17use reth_storage_api::{
18 BlockReaderIdExt, ProviderBlock, ProviderHeader, ProviderReceipt, ProviderTx,
19 StateProviderFactory,
20};
21use reth_transaction_pool::{PoolTransaction, TransactionPool};
22
23impl<N> LoadPendingBlock for SeismicEthApi<N>
24where
25 Self: SpawnBlocking
26 + EthApiTypes<
27 NetworkTypes: RpcTypes<
28 Header = alloy_rpc_types_eth::Header<ProviderHeader<Self::Provider>>,
29 >,
30 Error = EthApiError,
31 >,
32 N: RpcNodeCore<
33 Provider: BlockReaderIdExt<
34 Transaction = SeismicTransactionSigned,
35 Block = SeismicBlock,
36 Receipt = SeismicReceipt,
37 Header = alloy_consensus::Header,
38 > + ChainSpecProvider<ChainSpec: EthChainSpec + EthereumHardforks>
39 + StateProviderFactory,
40 Pool: TransactionPool<Transaction: PoolTransaction<Consensus = ProviderTx<N::Provider>>>,
41 Evm: ConfigureEvm<
42 Primitives: NodePrimitives<
43 SignedTx = ProviderTx<Self::Provider>,
44 BlockHeader = ProviderHeader<Self::Provider>,
45 Receipt = ProviderReceipt<Self::Provider>,
46 Block = ProviderBlock<Self::Provider>,
47 >,
48 NextBlockEnvCtx = NextBlockEnvAttributes,
49 >,
50 >,
51 EthApiError: FromEvmError<Self::Evm>,
52{
53 #[inline]
54 fn pending_block(
55 &self,
56 ) -> &tokio::sync::Mutex<
57 Option<PendingBlock<ProviderBlock<Self::Provider>, ProviderReceipt<Self::Provider>>>,
58 > {
59 self.inner.pending_block()
60 }
61
62 fn next_env_attributes(
63 &self,
64 parent: &SealedHeader<ProviderHeader<Self::Provider>>,
65 ) -> Result<<Self::Evm as reth_evm::ConfigureEvm>::NextBlockEnvCtx, Self::Error> {
66 Ok(NextBlockEnvAttributes {
67 timestamp: parent.timestamp().saturating_add(12),
68 suggested_fee_recipient: parent.beneficiary(),
69 prev_randao: B256::random(),
70 gas_limit: parent.gas_limit(),
71 parent_beacon_block_root: parent.parent_beacon_block_root(),
72 withdrawals: None,
73 })
74 }
75}