From 1805ce6ff77b0ec8ed25320bf283334a524be41d Mon Sep 17 00:00:00 2001 From: noamsp-starkware <noam.s@starkware.co> Date: Mon, 30 Dec 2024 15:41:24 +0200 Subject: [PATCH] feat(starknet_gateway): implement sync state reader get block info (#2942) --- .../starknet_gateway/src/sync_state_reader.rs | 32 +++++++++++++++++-- .../src/communication.rs | 1 - 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/crates/starknet_gateway/src/sync_state_reader.rs b/crates/starknet_gateway/src/sync_state_reader.rs index 17c9dba8200..0260f23d252 100644 --- a/crates/starknet_gateway/src/sync_state_reader.rs +++ b/crates/starknet_gateway/src/sync_state_reader.rs @@ -2,9 +2,10 @@ use blockifier::execution::contract_class::RunnableCompiledClass; use blockifier::state::errors::StateError; use blockifier::state::state_api::{StateReader as BlockifierStateReader, StateResult}; use futures::executor::block_on; -use starknet_api::block::{BlockInfo, BlockNumber}; +use starknet_api::block::{BlockInfo, BlockNumber, GasPriceVector, GasPrices}; use starknet_api::contract_class::ContractClass; use starknet_api::core::{ClassHash, CompiledClassHash, ContractAddress, Nonce}; +use starknet_api::data_availability::L1DataAvailabilityMode; use starknet_api::state::StorageKey; use starknet_state_sync_types::communication::SharedStateSyncClient; use starknet_types_core::felt::Felt; @@ -28,7 +29,34 @@ impl SyncStateReader { impl MempoolStateReader for SyncStateReader { fn get_block_info(&self) -> StateResult<BlockInfo> { - todo!() + let block = block_on(self.state_sync_client.get_block(self.block_number)) + .map_err(|e| StateError::StateReadError(e.to_string()))? + .ok_or(StateError::StateReadError("Block not found".to_string()))?; + + let block_header = block.block_header_without_hash; + let block_info = BlockInfo { + block_number: block_header.block_number, + block_timestamp: block_header.timestamp, + sequencer_address: block_header.sequencer.0, + gas_prices: GasPrices { + eth_gas_prices: GasPriceVector { + l1_gas_price: block_header.l1_gas_price.price_in_wei.try_into()?, + l1_data_gas_price: block_header.l1_data_gas_price.price_in_wei.try_into()?, + l2_gas_price: block_header.l2_gas_price.price_in_wei.try_into()?, + }, + strk_gas_prices: GasPriceVector { + l1_gas_price: block_header.l1_gas_price.price_in_fri.try_into()?, + l1_data_gas_price: block_header.l1_data_gas_price.price_in_fri.try_into()?, + l2_gas_price: block_header.l2_gas_price.price_in_fri.try_into()?, + }, + }, + use_kzg_da: match block_header.l1_da_mode { + L1DataAvailabilityMode::Blob => true, + L1DataAvailabilityMode::Calldata => false, + }, + }; + + Ok(block_info) } } diff --git a/crates/starknet_state_sync_types/src/communication.rs b/crates/starknet_state_sync_types/src/communication.rs index 8b3522e9a62..013d5d26479 100644 --- a/crates/starknet_state_sync_types/src/communication.rs +++ b/crates/starknet_state_sync_types/src/communication.rs @@ -69,7 +69,6 @@ pub trait StateSyncClient: Send + Sync { ) -> StateSyncClientResult<ContractClass>; // TODO: Add get_compiled_class_hash for StateSyncReader - // TODO: Add get_block_info for StateSyncReader } #[derive(Clone, Debug, Error)]