mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: Finish storage
This commit is contained in:
@ -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)),
|
None => {
|
||||||
(block_number, Some(read_precompile_calls)),
|
eth_bodies.push((block_number, None));
|
||||||
)
|
read_precompile_calls.push((block_number, None));
|
||||||
} else {
|
}
|
||||||
(
|
}
|
||||||
(block_number, None),
|
|
||||||
(block_number, None),
|
|
||||||
(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,
|
||||||
|
|||||||
Reference in New Issue
Block a user