From c2397fa0f6b8cfbf8f23b034e032942e29775e87 Mon Sep 17 00:00:00 2001 From: Guy Nir Date: Tue, 14 Jan 2025 16:31:11 +0200 Subject: [PATCH] chore(consensus): add ContextConfig to SequencerConcensusContext --- config/sequencer/default_config.json | 15 +++++++++++++++ crates/papyrus_node/src/run.rs | 4 +++- crates/starknet_consensus_manager/src/config.rs | 3 +++ .../src/consensus_manager.rs | 3 +-- .../src/sequencer_consensus_context.rs | 12 ++++++------ .../src/sequencer_consensus_context_test.rs | 5 ++--- crates/starknet_integration_tests/src/utils.rs | 9 +++++++-- .../src/config/node_config.rs | 1 + 8 files changed, 38 insertions(+), 14 deletions(-) diff --git a/config/sequencer/default_config.json b/config/sequencer/default_config.json index 21908bdb0fc..07c9d1e5fba 100644 --- a/config/sequencer/default_config.json +++ b/config/sequencer/default_config.json @@ -709,6 +709,21 @@ "pointer_target": "validator_id", "privacy": "Public" }, + "consensus_manager_config.context_config.batcher_build_buffer": { + "description": "The buffer size for the batcher when building proposals.", + "privacy": "Public", + "value": 100 + }, + "consensus_manager_config.context_config.chain_id": { + "description": "The chain id of the Starknet chain.", + "pointer_target": "chain_id", + "privacy": "Public" + }, + "consensus_manager_config.context_config.num_validators": { + "description": "The number of validators.", + "privacy": "Public", + "value": 1 + }, "eth_fee_token_address": { "description": "A required param! Address of the ETH fee token.", "param_type": "String", diff --git a/crates/papyrus_node/src/run.rs b/crates/papyrus_node/src/run.rs index b5f46f51584..15a82051713 100644 --- a/crates/papyrus_node/src/run.rs +++ b/crates/papyrus_node/src/run.rs @@ -198,7 +198,9 @@ fn spawn_consensus( }; let consensus_config = consensus_config.clone(); let context_config = context_config.clone(); - debug!("Consensus configuration: {consensus_config:?}"); + debug!( + "Consensus configuration: {consensus_config:?}, Context configuration: {context_config:?}" + ); let network_channels = network_manager.register_broadcast_topic( Topic::new(consensus_config.network_topic.clone()), diff --git a/crates/starknet_consensus_manager/src/config.rs b/crates/starknet_consensus_manager/src/config.rs index 29d1c1d67f6..3d267e03ec6 100644 --- a/crates/starknet_consensus_manager/src/config.rs +++ b/crates/starknet_consensus_manager/src/config.rs @@ -4,6 +4,7 @@ use papyrus_config::dumping::{append_sub_config_name, SerializeConfig}; use papyrus_config::{ParamPath, SerializedParam}; use serde::{Deserialize, Serialize}; use starknet_consensus::config::ConsensusConfig; +use starknet_consensus::types::ContextConfig; use starknet_consensus_orchestrator::cende::CendeConfig; use validator::Validate; @@ -12,6 +13,7 @@ use validator::Validate; #[derive(Clone, Default, Debug, Serialize, Deserialize, Validate, PartialEq)] pub struct ConsensusManagerConfig { pub consensus_config: ConsensusConfig, + pub context_config: ContextConfig, pub cende_config: CendeConfig, } @@ -19,6 +21,7 @@ impl SerializeConfig for ConsensusManagerConfig { fn dump(&self) -> BTreeMap { let sub_configs = vec![ append_sub_config_name(self.consensus_config.dump(), "consensus_config"), + append_sub_config_name(self.context_config.dump(), "context_config"), append_sub_config_name(self.cende_config.dump(), "cende_config"), ]; diff --git a/crates/starknet_consensus_manager/src/consensus_manager.rs b/crates/starknet_consensus_manager/src/consensus_manager.rs index a2fdd19b883..89b31b636f6 100644 --- a/crates/starknet_consensus_manager/src/consensus_manager.rs +++ b/crates/starknet_consensus_manager/src/consensus_manager.rs @@ -81,12 +81,11 @@ impl ConsensusManager { }; let context = SequencerConsensusContext::new( + self.config.context_config.clone(), Arc::clone(&self.state_sync_client), Arc::clone(&self.batcher_client), outbound_internal_sender, votes_broadcast_channels.broadcast_topic_client.clone(), - self.config.consensus_config.num_validators, - self.config.consensus_config.chain_id.clone(), Arc::new(CendeAmbassador::new(self.config.cende_config.clone())), ); diff --git a/crates/starknet_consensus_orchestrator/src/sequencer_consensus_context.rs b/crates/starknet_consensus_orchestrator/src/sequencer_consensus_context.rs index 883feb85e23..efa619b9d2f 100644 --- a/crates/starknet_consensus_orchestrator/src/sequencer_consensus_context.rs +++ b/crates/starknet_consensus_orchestrator/src/sequencer_consensus_context.rs @@ -55,6 +55,7 @@ use starknet_batcher_types::communication::BatcherClient; use starknet_consensus::types::{ ConsensusContext, ConsensusError, + ContextConfig, ProposalContentId, Round, ValidatorId, @@ -111,6 +112,7 @@ const BUILD_PROPOSAL_MARGIN: Duration = Duration::from_millis(1000); const VALIDATE_PROPOSAL_MARGIN: Duration = Duration::from_secs(10); pub struct SequencerConsensusContext { + config: ContextConfig, state_sync_client: SharedStateSyncClient, batcher: Arc, validators: Vec, @@ -135,8 +137,6 @@ pub struct SequencerConsensusContext { outbound_proposal_sender: mpsc::Sender<(HeightAndRound, mpsc::Receiver)>, // Used to broadcast votes to other consensus nodes. vote_broadcast_client: BroadcastTopicClient, - // Used to convert Transaction to ExecutableTransaction. - chain_id: ChainId, cende_ambassador: Arc, // The next block's l2 gas price, calculated based on EIP-1559, used for building and // validating proposals. @@ -145,15 +145,16 @@ pub struct SequencerConsensusContext { impl SequencerConsensusContext { pub fn new( + config: ContextConfig, state_sync_client: SharedStateSyncClient, batcher: Arc, outbound_proposal_sender: mpsc::Sender<(HeightAndRound, mpsc::Receiver)>, vote_broadcast_client: BroadcastTopicClient, - num_validators: u64, - chain_id: ChainId, cende_ambassador: Arc, ) -> Self { + let num_validators = config.num_validators; Self { + config, state_sync_client, batcher, outbound_proposal_sender, @@ -168,7 +169,6 @@ impl SequencerConsensusContext { current_round: 0, active_proposal: None, queued_proposals: BTreeMap::new(), - chain_id, cende_ambassador, l2_gas_price: VersionedConstants::latest_constants().min_gas_price, } @@ -463,7 +463,7 @@ impl SequencerConsensusContext { let cancel_token_clone = cancel_token.clone(); let batcher = Arc::clone(&self.batcher); let valid_proposals = Arc::clone(&self.valid_proposals); - let chain_id = self.chain_id.clone(); + let chain_id = self.config.chain_id.clone(); let proposal_id = ProposalId(self.proposal_id); self.proposal_id += 1; let gas_prices = self.gas_prices(); diff --git a/crates/starknet_consensus_orchestrator/src/sequencer_consensus_context_test.rs b/crates/starknet_consensus_orchestrator/src/sequencer_consensus_context_test.rs index c097de0f76b..a101a61606d 100644 --- a/crates/starknet_consensus_orchestrator/src/sequencer_consensus_context_test.rs +++ b/crates/starknet_consensus_orchestrator/src/sequencer_consensus_context_test.rs @@ -43,7 +43,7 @@ use starknet_batcher_types::batcher_types::{ }; use starknet_batcher_types::communication::MockBatcherClient; use starknet_consensus::stream_handler::StreamHandler; -use starknet_consensus::types::ConsensusContext; +use starknet_consensus::types::{ConsensusContext, ContextConfig}; use starknet_state_sync_types::communication::MockStateSyncClient; use starknet_types_core::felt::Felt; @@ -95,12 +95,11 @@ fn setup( let state_sync_client = MockStateSyncClient::new(); let context = SequencerConsensusContext::new( + ContextConfig { num_validators: NUM_VALIDATORS, chain_id: CHAIN_ID, ..Default::default() }, Arc::new(state_sync_client), Arc::new(batcher), outbound_proposal_stream_sender, votes_topic_client, - NUM_VALIDATORS, - CHAIN_ID, Arc::new(cende_ambassador), ); diff --git a/crates/starknet_integration_tests/src/utils.rs b/crates/starknet_integration_tests/src/utils.rs index 7e22d72fa0b..527772643c3 100644 --- a/crates/starknet_integration_tests/src/utils.rs +++ b/crates/starknet_integration_tests/src/utils.rs @@ -26,7 +26,7 @@ use starknet_api::transaction::TransactionHash; use starknet_batcher::block_builder::BlockBuilderConfig; use starknet_batcher::config::BatcherConfig; use starknet_consensus::config::{ConsensusConfig, TimeoutsConfig}; -use starknet_consensus::types::ValidatorId; +use starknet_consensus::types::{ContextConfig, ValidatorId}; use starknet_consensus_manager::config::ConsensusManagerConfig; use starknet_consensus_orchestrator::cende::{CendeConfig, RECORDER_WRITE_BLOB_PATH}; use starknet_gateway::config::{ @@ -144,7 +144,12 @@ pub(crate) fn create_consensus_manager_configs_from_network_configs( cende_config: CendeConfig{ skip_write_height: Some(BlockNumber(1)), ..Default::default() - } + }, + context_config: ContextConfig { + num_validators, + chain_id: papyrus_storage::test_utils::CHAIN_ID_FOR_TESTS.clone(), + ..Default::default() + }, }) .collect() } diff --git a/crates/starknet_sequencer_node/src/config/node_config.rs b/crates/starknet_sequencer_node/src/config/node_config.rs index b00c0bf662a..e21160a52c2 100644 --- a/crates/starknet_sequencer_node/src/config/node_config.rs +++ b/crates/starknet_sequencer_node/src/config/node_config.rs @@ -52,6 +52,7 @@ pub static CONFIG_POINTERS: LazyLock = LazyLock::new(|| { "batcher_config.block_builder_config.chain_info.chain_id", "batcher_config.storage.db_config.chain_id", "consensus_manager_config.consensus_config.chain_id", + "consensus_manager_config.context_config.chain_id", "consensus_manager_config.consensus_config.network_config.chain_id", "gateway_config.chain_info.chain_id", "l1_scraper_config.chain_id",