reth_optimism_storage/
chain.rs
1use alloc::{vec, vec::Vec};
2use alloy_consensus::Header;
3use alloy_primitives::BlockNumber;
4use core::marker::PhantomData;
5use reth_chainspec::{ChainSpecProvider, EthChainSpec, EthereumHardforks};
6use reth_optimism_forks::OpHardforks;
7use reth_optimism_primitives::OpTransactionSigned;
8use reth_primitives_traits::{Block, FullBlockHeader, SignedTransaction};
9use reth_storage_api::{
10 errors::ProviderResult, BlockBodyReader, BlockBodyWriter, DBProvider, ReadBodyInput,
11 StorageLocation,
12};
13
14#[derive(Debug, Clone, Copy)]
16pub struct OptStorage<T = OpTransactionSigned, H = Header>(PhantomData<(T, H)>);
17
18impl<Provider, T, H> BlockBodyWriter<Provider, alloy_consensus::BlockBody<T, H>>
19 for OptStorage<T, H>
20where
21 T: SignedTransaction,
22 H: FullBlockHeader,
23{
24 fn write_block_bodies(
25 &self,
26 _provider: &Provider,
27 _bodies: Vec<(u64, Option<alloy_consensus::BlockBody<T, H>>)>,
28 _write_to: StorageLocation,
29 ) -> ProviderResult<()> {
30 Ok(())
32 }
33
34 fn remove_block_bodies_above(
35 &self,
36 _provider: &Provider,
37 _block: BlockNumber,
38 _remove_from: StorageLocation,
39 ) -> ProviderResult<()> {
40 Ok(())
42 }
43}
44
45impl<Provider, T, H> BlockBodyReader<Provider> for OptStorage<T, H>
46where
47 Provider: ChainSpecProvider<ChainSpec: EthChainSpec + OpHardforks> + DBProvider,
48 T: SignedTransaction,
49 H: FullBlockHeader,
50{
51 type Block = alloy_consensus::Block<T, H>;
52
53 fn read_block_bodies(
54 &self,
55 provider: &Provider,
56 inputs: Vec<ReadBodyInput<'_, Self::Block>>,
57 ) -> ProviderResult<Vec<<Self::Block as Block>::Body>> {
58 let chain_spec = provider.chain_spec();
59
60 let mut bodies = Vec::with_capacity(inputs.len());
61
62 for (header, transactions) in inputs {
63 let mut withdrawals = None;
64 if chain_spec.is_shanghai_active_at_timestamp(header.timestamp()) {
65 withdrawals.replace(vec![].into());
67 }
68
69 bodies.push(alloy_consensus::BlockBody::<T, H> {
70 transactions,
71 ommers: vec![],
72 withdrawals,
73 });
74 }
75
76 Ok(bodies)
77 }
78}