diff --git a/bin/reth/src/block_ingest.rs b/bin/reth/src/block_ingest.rs index 090d845e8..09b99e9b6 100644 --- a/bin/reth/src/block_ingest.rs +++ b/bin/reth/src/block_ingest.rs @@ -12,7 +12,7 @@ use alloy_rpc_types::engine::{ use jsonrpsee::http_client::{transport::HttpBackend, HttpClient}; use reth::network::PeersHandleProvider; use reth_chainspec::{EthChainSpec, EthereumHardforks}; -use reth_hyperliquid_types::PrecompilesCache; +use reth_hyperliquid_types::{PrecompileData, PrecompilesCache}; use reth_node_api::{Block, FullNodeComponents, PayloadTypes}; use reth_node_builder::EngineTypes; use reth_node_builder::NodeTypesWithEngine; @@ -191,7 +191,10 @@ impl BlockIngest { let mut u_cache = cache.lock().await; let mut u_pre_cache = precompiles_cache.lock(); for blk in new_blocks { - let precompiles = blk.read_precompile_calls.clone(); + let precompiles = PrecompileData { + precompiles: blk.read_precompile_calls.clone(), + highest_precompile_address: blk.highest_precompile_address, + }; let h = match &blk.block { EvmBlock::Reth115(b) => { let block_number = b.header().number() as u64; diff --git a/bin/reth/src/serialized.rs b/bin/reth/src/serialized.rs index 49dec5740..8ea87c6fe 100644 --- a/bin/reth/src/serialized.rs +++ b/bin/reth/src/serialized.rs @@ -11,6 +11,7 @@ pub(crate) struct BlockAndReceipts { pub system_txs: Vec, #[serde(default)] pub read_precompile_calls: Vec<(Address, Vec<(ReadPrecompileInput, ReadPrecompileResult)>)>, + pub highest_precompile_address: Option
, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/crates/ethereum/evm/src/lib.rs b/crates/ethereum/evm/src/lib.rs index b601df299..d014f1cd1 100644 --- a/crates/ethereum/evm/src/lib.rs +++ b/crates/ethereum/evm/src/lib.rs @@ -24,6 +24,7 @@ pub use alloy_evm::EthEvm; use alloy_primitives::Address; use alloy_primitives::U160; use alloy_primitives::U256; +use reth_hyperliquid_types::PrecompileData; use core::{convert::Infallible, fmt::Debug}; use parking_lot::RwLock; use reth_chainspec::{ChainSpec, EthChainSpec, MAINNET}; @@ -200,6 +201,7 @@ impl ConfigureEvmEnv for EthEvmConfig { pub(crate) struct BlockAndReceipts { #[serde(default)] pub read_precompile_calls: Vec<(Address, Vec<(ReadPrecompileInput, ReadPrecompileResult)>)>, + pub highest_precompile_address: Option
, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -228,7 +230,7 @@ pub(crate) fn collect_s3_block(ingest_path: PathBuf, height: u64) -> Option Option)>> { +) -> Option { let mut u_cache = precompiles_cache.lock(); u_cache.remove(&height) } @@ -244,7 +246,10 @@ pub(crate) fn collect_block( if let Some(calls) = get_locally_sourced_precompiles_for_height(shared_state.precompiles_cache, height) { - return Some(BlockAndReceipts { read_precompile_calls: calls }); + return Some(BlockAndReceipts { + read_precompile_calls: calls.precompiles, + highest_precompile_address: calls.highest_precompile_address, + }); } } // Fallback to s3 always diff --git a/crates/hyperliquid-types/src/lib.rs b/crates/hyperliquid-types/src/lib.rs index 70d19119e..b7c16cbea 100644 --- a/crates/hyperliquid-types/src/lib.rs +++ b/crates/hyperliquid-types/src/lib.rs @@ -18,5 +18,10 @@ pub enum ReadPrecompileResult { UnexpectedError, } -pub type PrecompilesCache = - Arc)>>>>; +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PrecompileData { + pub precompiles: Vec<(Address, Vec<(ReadPrecompileInput, ReadPrecompileResult)>)>, + pub highest_precompile_address: Option
, +} + +pub type PrecompilesCache = Arc>>;