feat: Finish storage

This commit is contained in:
sprites0
2025-06-11 04:46:48 +09:00
parent f95c755f26
commit aab44e3e81

View File

@ -4,10 +4,9 @@ use crate::{
}; };
use alloy_consensus::BlockHeader; use alloy_consensus::BlockHeader;
use alloy_primitives::Bytes; use alloy_primitives::Bytes;
use itertools::izip;
use reth_chainspec::EthereumHardforks; use reth_chainspec::EthereumHardforks;
use reth_db::{ use reth_db::{
cursor::DbCursorRW, cursor::{DbCursorRO, DbCursorRW},
transaction::{DbTx, DbTxMut}, transaction::{DbTx, DbTxMut},
DbTxUnwindExt, DbTxUnwindExt,
}; };
@ -55,8 +54,8 @@ impl HlStorage {
fn read_precompile_calls<Provider>( fn read_precompile_calls<Provider>(
&self, &self,
provider: &Provider, provider: &Provider,
inputs: Vec<ReadBodyInput<'_, HlBlock>>, inputs: &[ReadBodyInput<'_, HlBlock>],
) -> ProviderResult<Vec<ReadPrecompileCalls>> ) -> ProviderResult<Vec<Option<ReadPrecompileCalls>>>
where where
Provider: DBProvider<Tx: DbTx>, Provider: DBProvider<Tx: DbTx>,
{ {
@ -69,7 +68,7 @@ impl HlStorage {
let precompile_calls = precompile_calls_cursor let precompile_calls = precompile_calls_cursor
.seek_exact(header.number())? .seek_exact(header.number())?
.map(|(_, calls)| calls) .map(|(_, calls)| calls)
.unwrap_or_default(); .map(|calls| rmp_serde::from_slice(&calls).unwrap());
read_precompile_calls.push(precompile_calls); read_precompile_calls.push(precompile_calls);
} }
@ -87,27 +86,25 @@ where
bodies: Vec<(u64, Option<HlBlockBody>)>, bodies: Vec<(u64, Option<HlBlockBody>)>,
write_to: StorageLocation, write_to: StorageLocation,
) -> ProviderResult<()> { ) -> ProviderResult<()> {
let (eth_bodies, _sidecars, read_precompile_calls) = let mut eth_bodies = Vec::with_capacity(bodies.len());
izip!(bodies.into_iter().map(|(block_number, body)| { let mut read_precompile_calls = Vec::with_capacity(bodies.len());
if let Some(HlBlockBody {
for (block_number, body) in bodies {
match body {
Some(HlBlockBody {
inner, inner,
sidecars, sidecars: _,
read_precompile_calls, read_precompile_calls: rpc,
}) = body }) => {
{ eth_bodies.push((block_number, Some(inner)));
( read_precompile_calls.push((block_number, rpc));
(block_number, Some(inner)),
(block_number, Some(sidecars)),
(block_number, Some(read_precompile_calls)),
)
} else {
(
(block_number, None),
(block_number, None),
(block_number, None),
)
} }
})); None => {
eth_bodies.push((block_number, None));
read_precompile_calls.push((block_number, None));
}
}
}
self.0.write_block_bodies(provider, eth_bodies, write_to)?; self.0.write_block_bodies(provider, eth_bodies, write_to)?;
self.write_precompile_calls(provider, read_precompile_calls)?; self.write_precompile_calls(provider, read_precompile_calls)?;
@ -142,13 +139,14 @@ where
provider: &Provider, provider: &Provider,
inputs: Vec<ReadBodyInput<'_, Self::Block>>, inputs: Vec<ReadBodyInput<'_, Self::Block>>,
) -> ProviderResult<Vec<HlBlockBody>> { ) -> ProviderResult<Vec<HlBlockBody>> {
let read_precompile_calls = self.read_precompile_calls(provider, &inputs)?;
let eth_bodies = self.0.read_block_bodies(provider, inputs)?; let eth_bodies = self.0.read_block_bodies(provider, inputs)?;
let read_precompile_calls = self.read_precompile_calls(provider, inputs)?;
// NOTE: sidecars are not used in HyperEVM yet. // NOTE: sidecars are not used in HyperEVM yet.
Ok(eth_bodies Ok(eth_bodies
.into_iter() .into_iter()
.map(|inner| HlBlockBody { .zip(read_precompile_calls)
.map(|(inner, read_precompile_calls)| HlBlockBody {
inner, inner,
sidecars: None, sidecars: None,
read_precompile_calls, read_precompile_calls,