diff --git a/crates/papyrus_protobuf/src/consensus.rs b/crates/papyrus_protobuf/src/consensus.rs index d72af8fbc78..9faf29ba39e 100644 --- a/crates/papyrus_protobuf/src/consensus.rs +++ b/crates/papyrus_protobuf/src/consensus.rs @@ -5,6 +5,7 @@ use prost::DecodeError; use starknet_api::block::{BlockHash, BlockNumber}; use starknet_api::consensus_transaction::ConsensusTransaction; use starknet_api::core::ContractAddress; +use starknet_api::data_availability::L1DataAvailabilityMode; use crate::converters::ProtobufConversionError; @@ -56,6 +57,18 @@ pub struct ProposalInit { pub proposer: ContractAddress, } +#[derive(Clone, Debug, PartialEq)] +pub struct BlockInfo { + pub height: BlockNumber, + pub timestamp: u64, + pub builder: ContractAddress, + pub l1_da_mode: L1DataAvailabilityMode, + pub l2_gas_price_fri: u128, + pub l1_gas_price_wei: u128, + pub l1_data_gas_price_wei: u128, + pub eth_to_strk_rate: u64, +} + /// A temporary constant to use as a validator ID. Zero is not a valid contract address. // TODO(Matan): Remove this once we have a proper validator set. pub const DEFAULT_VALIDATOR_ID: u64 = 100; diff --git a/crates/papyrus_protobuf/src/converters/consensus.rs b/crates/papyrus_protobuf/src/converters/consensus.rs index d0d4885fa0a..d0f8b9550e6 100644 --- a/crates/papyrus_protobuf/src/converters/consensus.rs +++ b/crates/papyrus_protobuf/src/converters/consensus.rs @@ -9,7 +9,9 @@ use starknet_api::block::{BlockHash, BlockNumber}; use starknet_api::consensus_transaction::ConsensusTransaction; use starknet_api::hash::StarkHash; +use super::common::{enum_int_to_l1_data_availability_mode, l1_data_availability_mode_to_enum_int}; use crate::consensus::{ + BlockInfo, IntoFromProto, ProposalFin, ProposalInit, @@ -211,6 +213,61 @@ impl From for protobuf::TransactionBatch { auto_impl_into_and_try_from_vec_u8!(TransactionBatch, protobuf::TransactionBatch); +impl TryFrom for BlockInfo { + type Error = ProtobufConversionError; + fn try_from(value: protobuf::BlockInfo) -> Result { + let height = value.height; + let timestamp = value.timestamp; + let builder = value + .builder + .ok_or(ProtobufConversionError::MissingField { field_description: "builder" })? + .try_into()?; + let l1_da_mode = enum_int_to_l1_data_availability_mode(value.l1_da_mode)?; + let l2_gas_price_fri = value + .l2_gas_price_fri + .ok_or(ProtobufConversionError::MissingField { field_description: "l2_gas_price_fri" })? + .into(); + let l1_gas_price_wei = value + .l1_gas_price_wei + .ok_or(ProtobufConversionError::MissingField { field_description: "l1_gas_price_wei" })? + .into(); + let l1_data_gas_price_wei = value + .l1_data_gas_price_wei + .ok_or(ProtobufConversionError::MissingField { + field_description: "l1_data_gas_price_wei", + })? + .into(); + let eth_to_strk_rate = value.eth_to_strk_rate; + Ok(BlockInfo { + height: BlockNumber(height), + timestamp, + builder, + l1_da_mode, + l2_gas_price_fri, + l1_gas_price_wei, + l1_data_gas_price_wei, + eth_to_strk_rate, + }) + } +} + +impl From for protobuf::BlockInfo { + fn from(value: BlockInfo) -> Self { + protobuf::BlockInfo { + height: value.height.0, + timestamp: value.timestamp, + builder: Some(value.builder.into()), + l1_da_mode: l1_data_availability_mode_to_enum_int(value.l1_da_mode), + l1_gas_price_wei: Some(value.l1_gas_price_wei.into()), + l1_data_gas_price_wei: Some(value.l1_data_gas_price_wei.into()), + l2_gas_price_fri: Some(value.l2_gas_price_fri.into()), + eth_to_strk_rate: value.eth_to_strk_rate, + } + } +} + +auto_impl_into_and_try_from_vec_u8!(BlockInfo, protobuf::BlockInfo); + impl TryFrom for ProposalFin { type Error = ProtobufConversionError; fn try_from(value: protobuf::ProposalFin) -> Result { diff --git a/crates/papyrus_protobuf/src/proto/p2p/proto/consensus/consensus.proto b/crates/papyrus_protobuf/src/proto/p2p/proto/consensus/consensus.proto index e27096ff5cc..ecf284fa8bd 100644 --- a/crates/papyrus_protobuf/src/proto/p2p/proto/consensus/consensus.proto +++ b/crates/papyrus_protobuf/src/proto/p2p/proto/consensus/consensus.proto @@ -49,6 +49,17 @@ message ProposalInit { Address proposer = 4; } +message BlockInfo { + uint64 height = 1; + uint64 timestamp = 2; + Address builder = 3; + L1DataAvailabilityMode l1_da_mode = 4; + Uint128 l2_gas_price_fri = 5; + Uint128 l1_gas_price_wei = 6; + Uint128 l1_data_gas_price_wei = 7; + uint64 eth_to_strk_rate = 8; +} + message TransactionBatch { repeated ConsensusTransaction transactions = 1; }