From fed4b22aa553f66838a4ad2b3ec455f891c4ee66 Mon Sep 17 00:00:00 2001 From: Guy Nir Date: Wed, 15 Jan 2025 14:44:01 +0200 Subject: [PATCH] chore(consensus): update ConsensusManagerConfig with new parameters --- config/papyrus/default_config.json | 75 --------- config/sequencer/default_config.json | 149 ++++++++++-------- crates/papyrus_node/src/config/pointers.rs | 1 - ...fig__config_test__dump_default_config.snap | 93 ----------- crates/starknet_consensus/src/config.rs | 11 +- .../starknet_consensus_manager/src/config.rs | 51 +++++- .../src/consensus_manager.rs | 3 +- .../starknet_integration_tests/src/utils.rs | 5 +- .../src/config/node_config.rs | 2 +- 9 files changed, 136 insertions(+), 254 deletions(-) diff --git a/config/papyrus/default_config.json b/config/papyrus/default_config.json index dc125e5bac2..4990a3e6029 100644 --- a/config/papyrus/default_config.json +++ b/config/papyrus/default_config.json @@ -89,81 +89,6 @@ "privacy": "Public", "value": 5 }, - "consensus.network_config.advertised_multiaddr": { - "description": "The external address other peers see this node. If this is set, the node will not try to find out which addresses it has and will write this address as external instead", - "privacy": "Public", - "value": "" - }, - "consensus.network_config.advertised_multiaddr.#is_none": { - "description": "Flag for an optional field.", - "privacy": "TemporaryValue", - "value": true - }, - "consensus.network_config.bootstrap_peer_multiaddr": { - "description": "The multiaddress of the peer node. It should include the peer's id. For more info: https://docs.libp2p.io/concepts/fundamentals/peers/", - "privacy": "Public", - "value": "" - }, - "consensus.network_config.bootstrap_peer_multiaddr.#is_none": { - "description": "Flag for an optional field.", - "privacy": "TemporaryValue", - "value": true - }, - "consensus.network_config.chain_id": { - "description": "The chain to follow. For more details see https://docs.starknet.io/documentation/architecture_and_concepts/Blocks/transactions/#chain-id.", - "pointer_target": "chain_id", - "privacy": "Public" - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.base_delay_millis": { - "description": "The base delay in milliseconds for the exponential backoff strategy.", - "privacy": "Public", - "value": 2 - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.factor": { - "description": "The factor for the exponential backoff strategy.", - "privacy": "Public", - "value": 5 - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.max_delay_seconds": { - "description": "The maximum delay in seconds for the exponential backoff strategy.", - "privacy": "Public", - "value": 5 - }, - "consensus.network_config.discovery_config.heartbeat_interval": { - "description": "The interval between each discovery (Kademlia) query in milliseconds.", - "privacy": "Public", - "value": 100 - }, - "consensus.network_config.idle_connection_timeout": { - "description": "Amount of time in seconds that a connection with no active sessions will stay alive.", - "privacy": "Public", - "value": 120 - }, - "consensus.network_config.peer_manager_config.malicious_timeout_seconds": { - "description": "The duration in seconds a peer is blacklisted after being marked as malicious.", - "privacy": "Public", - "value": 31536000 - }, - "consensus.network_config.peer_manager_config.unstable_timeout_millis": { - "description": "The duration in milliseconds a peer blacklisted after being reported as unstable.", - "privacy": "Public", - "value": 1000 - }, - "consensus.network_config.secret_key": { - "description": "The secret key used for building the peer id. If it's an empty string a random one will be used.", - "privacy": "Private", - "value": "" - }, - "consensus.network_config.session_timeout": { - "description": "Maximal time in seconds that each session can take before failing on timeout.", - "privacy": "Public", - "value": 120 - }, - "consensus.network_config.tcp_port": { - "description": "The port that the node listens on for incoming tcp connections.", - "privacy": "Public", - "value": 10100 - }, "consensus.network_topic": { "description": "The network topic of the consensus.", "privacy": "Public", diff --git a/config/sequencer/default_config.json b/config/sequencer/default_config.json index 58100377081..f8b6f0e383a 100644 --- a/config/sequencer/default_config.json +++ b/config/sequencer/default_config.json @@ -599,135 +599,150 @@ "privacy": "Public", "value": 5 }, - "consensus_manager_config.consensus_config.network_config.advertised_multiaddr": { + "consensus_manager_config.consensus_config.network_topic": { + "description": "The network topic of the consensus.", + "privacy": "Public", + "value": "consensus" + }, + "consensus_manager_config.consensus_config.num_validators": { + "description": "The number of validators in the consensus.", + "privacy": "Public", + "value": 1 + }, + "consensus_manager_config.consensus_config.start_height": { + "description": "The height to start the consensus from.", + "privacy": "Public", + "value": 0 + }, + "consensus_manager_config.consensus_config.sync_retry_interval": { + "description": "The duration (seconds) between sync attempts.", + "privacy": "Public", + "value": 1.0 + }, + "consensus_manager_config.consensus_config.timeouts.precommit_timeout": { + "description": "The timeout (seconds) for a precommit.", + "privacy": "Public", + "value": 1.0 + }, + "consensus_manager_config.consensus_config.timeouts.prevote_timeout": { + "description": "The timeout (seconds) for a prevote.", + "privacy": "Public", + "value": 1.0 + }, + "consensus_manager_config.consensus_config.timeouts.proposal_timeout": { + "description": "The timeout (seconds) for a proposal.", + "privacy": "Public", + "value": 3.0 + }, + "consensus_manager_config.consensus_config.validator_id": { + "description": "The validator id of the node.", + "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 + }, + "consensus_manager_config.immediate_active_height": { + "description": "The height at which the consensus manager becomes active.", + "privacy": "Public", + "value": 0 + }, + "consensus_manager_config.network_config.advertised_multiaddr": { "description": "The external address other peers see this node. If this is set, the node will not try to find out which addresses it has and will write this address as external instead", "privacy": "Public", "value": "" }, - "consensus_manager_config.consensus_config.network_config.advertised_multiaddr.#is_none": { + "consensus_manager_config.network_config.advertised_multiaddr.#is_none": { "description": "Flag for an optional field.", "privacy": "TemporaryValue", "value": true }, - "consensus_manager_config.consensus_config.network_config.bootstrap_peer_multiaddr": { + "consensus_manager_config.network_config.bootstrap_peer_multiaddr": { "description": "The multiaddress of the peer node. It should include the peer's id. For more info: https://docs.libp2p.io/concepts/fundamentals/peers/", "privacy": "Public", "value": "" }, - "consensus_manager_config.consensus_config.network_config.bootstrap_peer_multiaddr.#is_none": { + "consensus_manager_config.network_config.bootstrap_peer_multiaddr.#is_none": { "description": "Flag for an optional field.", "privacy": "TemporaryValue", "value": true }, - "consensus_manager_config.consensus_config.network_config.chain_id": { + "consensus_manager_config.network_config.chain_id": { "description": "The chain to follow. For more details see https://docs.starknet.io/documentation/architecture_and_concepts/Blocks/transactions/#chain-id.", "pointer_target": "chain_id", "privacy": "Public" }, - "consensus_manager_config.consensus_config.network_config.discovery_config.bootstrap_dial_retry_config.base_delay_millis": { + "consensus_manager_config.network_config.discovery_config.bootstrap_dial_retry_config.base_delay_millis": { "description": "The base delay in milliseconds for the exponential backoff strategy.", "privacy": "Public", "value": 2 }, - "consensus_manager_config.consensus_config.network_config.discovery_config.bootstrap_dial_retry_config.factor": { + "consensus_manager_config.network_config.discovery_config.bootstrap_dial_retry_config.factor": { "description": "The factor for the exponential backoff strategy.", "privacy": "Public", "value": 5 }, - "consensus_manager_config.consensus_config.network_config.discovery_config.bootstrap_dial_retry_config.max_delay_seconds": { + "consensus_manager_config.network_config.discovery_config.bootstrap_dial_retry_config.max_delay_seconds": { "description": "The maximum delay in seconds for the exponential backoff strategy.", "privacy": "Public", "value": 5 }, - "consensus_manager_config.consensus_config.network_config.discovery_config.heartbeat_interval": { + "consensus_manager_config.network_config.discovery_config.heartbeat_interval": { "description": "The interval between each discovery (Kademlia) query in milliseconds.", "privacy": "Public", "value": 100 }, - "consensus_manager_config.consensus_config.network_config.idle_connection_timeout": { + "consensus_manager_config.network_config.idle_connection_timeout": { "description": "Amount of time in seconds that a connection with no active sessions will stay alive.", "privacy": "Public", "value": 120 }, - "consensus_manager_config.consensus_config.network_config.peer_manager_config.malicious_timeout_seconds": { + "consensus_manager_config.network_config.peer_manager_config.malicious_timeout_seconds": { "description": "The duration in seconds a peer is blacklisted after being marked as malicious.", "privacy": "Public", "value": 31536000 }, - "consensus_manager_config.consensus_config.network_config.peer_manager_config.unstable_timeout_millis": { + "consensus_manager_config.network_config.peer_manager_config.unstable_timeout_millis": { "description": "The duration in milliseconds a peer blacklisted after being reported as unstable.", "privacy": "Public", "value": 1000 }, - "consensus_manager_config.consensus_config.network_config.secret_key": { + "consensus_manager_config.network_config.secret_key": { "description": "The secret key used for building the peer id. If it's an empty string a random one will be used.", "privacy": "Private", "value": "" }, - "consensus_manager_config.consensus_config.network_config.session_timeout": { + "consensus_manager_config.network_config.session_timeout": { "description": "Maximal time in seconds that each session can take before failing on timeout.", "privacy": "Public", "value": 120 }, - "consensus_manager_config.consensus_config.network_config.tcp_port": { + "consensus_manager_config.network_config.tcp_port": { "description": "The port that the node listens on for incoming tcp connections.", "privacy": "Public", - "value": 10100 - }, - "consensus_manager_config.consensus_config.network_topic": { - "description": "The network topic of the consensus.", - "privacy": "Public", - "value": "consensus" - }, - "consensus_manager_config.consensus_config.num_validators": { - "description": "The number of validators in the consensus.", - "privacy": "Public", - "value": 1 - }, - "consensus_manager_config.consensus_config.start_height": { - "description": "The height to start the consensus from.", - "privacy": "Public", - "value": 0 - }, - "consensus_manager_config.consensus_config.sync_retry_interval": { - "description": "The duration (seconds) between sync attempts.", - "privacy": "Public", - "value": 1.0 - }, - "consensus_manager_config.consensus_config.timeouts.precommit_timeout": { - "description": "The timeout (seconds) for a precommit.", - "privacy": "Public", - "value": 1.0 - }, - "consensus_manager_config.consensus_config.timeouts.prevote_timeout": { - "description": "The timeout (seconds) for a prevote.", - "privacy": "Public", - "value": 1.0 - }, - "consensus_manager_config.consensus_config.timeouts.proposal_timeout": { - "description": "The timeout (seconds) for a proposal.", - "privacy": "Public", - "value": 3.0 - }, - "consensus_manager_config.consensus_config.validator_id": { - "description": "The validator id of the node.", - "pointer_target": "validator_id", - "privacy": "Public" + "value": 10000 }, - "consensus_manager_config.context_config.batcher_build_buffer": { - "description": "The buffer size for the batcher when building proposals.", + "consensus_manager_config.proposals_topic": { + "description": "The topic for consensus proposals.", "privacy": "Public", - "value": 100 + "value": "consensus_proposals" }, - "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.", + "consensus_manager_config.votes_topic": { + "description": "The topic for consensus votes.", "privacy": "Public", - "value": 1 + "value": "consensus_votes" }, "eth_fee_token_address": { "description": "A required param! Address of the ETH fee token.", diff --git a/crates/papyrus_node/src/config/pointers.rs b/crates/papyrus_node/src/config/pointers.rs index ee8a18d5d45..33c93c204d6 100644 --- a/crates/papyrus_node/src/config/pointers.rs +++ b/crates/papyrus_node/src/config/pointers.rs @@ -60,7 +60,6 @@ pub static CONFIG_POINTERS: LazyLock = LazyLock::new(|| { set_pointing_param_paths(&[ "consensus.chain_id", "context.chain_id", - "consensus.network_config.chain_id", "network.chain_id", "rpc.chain_id", "storage.db_config.chain_id", diff --git a/crates/papyrus_node/src/config/snapshots/papyrus_node__config__config_test__dump_default_config.snap b/crates/papyrus_node/src/config/snapshots/papyrus_node__config__config_test__dump_default_config.snap index 7f1b567abb1..08708fe21ac 100644 --- a/crates/papyrus_node/src/config/snapshots/papyrus_node__config__config_test__dump_default_config.snap +++ b/crates/papyrus_node/src/config/snapshots/papyrus_node__config__config_test__dump_default_config.snap @@ -101,99 +101,6 @@ expression: dumped_default_config }, "privacy": "Public" }, - "consensus.network_config.advertised_multiaddr": { - "description": "The external address other peers see this node. If this is set, the node will not try to find out which addresses it has and will write this address as external instead", - "value": "", - "privacy": "Public" - }, - "consensus.network_config.advertised_multiaddr.#is_none": { - "description": "Flag for an optional field.", - "value": true, - "privacy": "TemporaryValue" - }, - "consensus.network_config.bootstrap_peer_multiaddr": { - "description": "The multiaddress of the peer node. It should include the peer's id. For more info: https://docs.libp2p.io/concepts/fundamentals/peers/", - "value": "", - "privacy": "Public" - }, - "consensus.network_config.bootstrap_peer_multiaddr.#is_none": { - "description": "Flag for an optional field.", - "value": true, - "privacy": "TemporaryValue" - }, - "consensus.network_config.chain_id": { - "description": "The chain to follow. For more details see https://docs.starknet.io/documentation/architecture_and_concepts/Blocks/transactions/#chain-id.", - "value": "SN_MAIN", - "privacy": "Public" - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.base_delay_millis": { - "description": "The base delay in milliseconds for the exponential backoff strategy.", - "value": { - "$serde_json::private::Number": "2" - }, - "privacy": "Public" - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.factor": { - "description": "The factor for the exponential backoff strategy.", - "value": { - "$serde_json::private::Number": "5" - }, - "privacy": "Public" - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.max_delay_seconds": { - "description": "The maximum delay in seconds for the exponential backoff strategy.", - "value": { - "$serde_json::private::Number": "5" - }, - "privacy": "Public" - }, - "consensus.network_config.discovery_config.heartbeat_interval": { - "description": "The interval between each discovery (Kademlia) query in milliseconds.", - "value": { - "$serde_json::private::Number": "100" - }, - "privacy": "Public" - }, - "consensus.network_config.idle_connection_timeout": { - "description": "Amount of time in seconds that a connection with no active sessions will stay alive.", - "value": { - "$serde_json::private::Number": "120" - }, - "privacy": "Public" - }, - "consensus.network_config.peer_manager_config.malicious_timeout_seconds": { - "description": "The duration in seconds a peer is blacklisted after being marked as malicious.", - "value": { - "$serde_json::private::Number": "31536000" - }, - "privacy": "Public" - }, - "consensus.network_config.peer_manager_config.unstable_timeout_millis": { - "description": "The duration in milliseconds a peer blacklisted after being reported as unstable.", - "value": { - "$serde_json::private::Number": "1000" - }, - "privacy": "Public" - }, - "consensus.network_config.secret_key": { - "description": "The secret key used for building the peer id. If it's an empty string a random one will be used.", - "value": "", - "privacy": "Private" - }, - "consensus.network_config.session_timeout": { - "description": "Maximal time in seconds that each session can take before failing on timeout.", - "value": { - "$serde_json::private::Number": "120" - }, - "privacy": "Public" - }, - "consensus.network_config.tcp_port": { - "description": "The port that the node listens on for incoming tcp connections.", - "value": { - "$serde_json::private::Number": "10100" - }, - "privacy": "Public" - }, "consensus.network_topic": { "description": "The network topic of the consensus.", "value": "consensus", diff --git a/crates/starknet_consensus/src/config.rs b/crates/starknet_consensus/src/config.rs index 6411db2c6a8..21a1512d3f2 100644 --- a/crates/starknet_consensus/src/config.rs +++ b/crates/starknet_consensus/src/config.rs @@ -11,7 +11,6 @@ use papyrus_config::converters::{ }; use papyrus_config::dumping::{append_sub_config_name, ser_param, SerializeConfig}; use papyrus_config::{ParamPath, ParamPrivacyInput, SerializedParam}; -use papyrus_network::NetworkConfig; use papyrus_protobuf::consensus::DEFAULT_VALIDATOR_ID; use serde::{Deserialize, Serialize}; use starknet_api::block::BlockNumber; @@ -20,8 +19,6 @@ use validator::Validate; use crate::types::ValidatorId; -const CONSENSUS_TCP_PORT: u16 = 10100; - /// Configuration for consensus. #[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Validate)] pub struct ConsensusConfig { @@ -31,8 +28,10 @@ pub struct ConsensusConfig { pub chain_id: ChainId, /// The validator ID of the node. pub validator_id: ValidatorId, + // TODO(guyn): this will be removed in one of the next PRs. /// The network topic of the consensus. pub network_topic: String, + // TODO(guyn): this will be removed in one of the next PRs?? /// The height to start the consensus from. pub start_height: BlockNumber, /// The number of validators in the consensus. @@ -46,9 +45,6 @@ pub struct ConsensusConfig { /// The duration (seconds) between sync attempts. #[serde(deserialize_with = "deserialize_float_seconds_to_duration")] pub sync_retry_interval: Duration, - /// The network configuration for the consensus. - #[validate] - pub network_config: NetworkConfig, } impl SerializeConfig for ConsensusConfig { @@ -98,14 +94,12 @@ impl SerializeConfig for ConsensusConfig { ), ]); config.extend(append_sub_config_name(self.timeouts.dump(), "timeouts")); - config.extend(append_sub_config_name(self.network_config.dump(), "network_config")); config } } impl Default for ConsensusConfig { fn default() -> Self { - let network_config = NetworkConfig { tcp_port: CONSENSUS_TCP_PORT, ..Default::default() }; Self { chain_id: ChainId::Other("0x0".to_string()), validator_id: ValidatorId::from(DEFAULT_VALIDATOR_ID), @@ -115,7 +109,6 @@ impl Default for ConsensusConfig { consensus_delay: Duration::from_secs(5), timeouts: TimeoutsConfig::default(), sync_retry_interval: Duration::from_secs_f64(1.0), - network_config, } } } diff --git a/crates/starknet_consensus_manager/src/config.rs b/crates/starknet_consensus_manager/src/config.rs index 3d267e03ec6..367c1efc31f 100644 --- a/crates/starknet_consensus_manager/src/config.rs +++ b/crates/starknet_consensus_manager/src/config.rs @@ -1,7 +1,8 @@ use std::collections::BTreeMap; -use papyrus_config::dumping::{append_sub_config_name, SerializeConfig}; -use papyrus_config::{ParamPath, SerializedParam}; +use papyrus_config::dumping::{append_sub_config_name, ser_param, SerializeConfig}; +use papyrus_config::{ParamPath, ParamPrivacyInput, SerializedParam}; +use papyrus_network::NetworkConfig; use serde::{Deserialize, Serialize}; use starknet_consensus::config::ConsensusConfig; use starknet_consensus::types::ContextConfig; @@ -10,11 +11,16 @@ use validator::Validate; /// The consensus manager related configuration. /// TODO(Matan): Remove ConsensusManagerConfig if it's only field remains ConsensusConfig. -#[derive(Clone, Default, Debug, Serialize, Deserialize, Validate, PartialEq)] +#[derive(Clone, Debug, Serialize, Deserialize, Validate, PartialEq)] pub struct ConsensusManagerConfig { pub consensus_config: ConsensusConfig, pub context_config: ContextConfig, + #[validate] + pub network_config: NetworkConfig, pub cende_config: CendeConfig, + pub votes_topic: String, + pub proposals_topic: String, + pub immediate_active_height: u64, } impl SerializeConfig for ConsensusManagerConfig { @@ -23,8 +29,45 @@ impl SerializeConfig for ConsensusManagerConfig { 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"), + append_sub_config_name(self.network_config.dump(), "network_config"), ]; + let mut output_tree: BTreeMap = + sub_configs.into_iter().flatten().collect(); + let additional_parameters = BTreeMap::from_iter([ + ser_param( + "votes_topic", + &self.votes_topic, + "The topic for consensus votes.", + ParamPrivacyInput::Public, + ), + ser_param( + "proposals_topic", + &self.proposals_topic, + "The topic for consensus proposals.", + ParamPrivacyInput::Public, + ), + ser_param( + "immediate_active_height", + &self.immediate_active_height, + "The height at which the consensus manager becomes active.", + ParamPrivacyInput::Public, + ), + ]); + output_tree.extend(additional_parameters); + output_tree + } +} - sub_configs.into_iter().flatten().collect() +impl Default for ConsensusManagerConfig { + fn default() -> Self { + ConsensusManagerConfig { + consensus_config: ConsensusConfig::default(), + context_config: ContextConfig::default(), + cende_config: CendeConfig::default(), + network_config: NetworkConfig::default(), + votes_topic: "consensus_votes".to_string(), + proposals_topic: "consensus_proposals".to_string(), + immediate_active_height: 0, + } } } diff --git a/crates/starknet_consensus_manager/src/consensus_manager.rs b/crates/starknet_consensus_manager/src/consensus_manager.rs index 89b31b636f6..cea68c372cf 100644 --- a/crates/starknet_consensus_manager/src/consensus_manager.rs +++ b/crates/starknet_consensus_manager/src/consensus_manager.rs @@ -40,8 +40,7 @@ impl ConsensusManager { } pub async fn run(&self) -> Result<(), ConsensusError> { - let mut network_manager = - NetworkManager::new(self.config.consensus_config.network_config.clone(), None); + let mut network_manager = NetworkManager::new(self.config.network_config.clone(), None); let proposals_broadcast_channels = network_manager .register_broadcast_topic::>( diff --git a/crates/starknet_integration_tests/src/utils.rs b/crates/starknet_integration_tests/src/utils.rs index 5c59e7c24bd..1ca29423a1f 100644 --- a/crates/starknet_integration_tests/src/utils.rs +++ b/crates/starknet_integration_tests/src/utils.rs @@ -132,11 +132,11 @@ pub(crate) fn create_consensus_manager_configs_from_network_configs( .into_iter() // TODO(Matan): Get config from default config file. .map(|network_config| ConsensusManagerConfig { + network_config, consensus_config: ConsensusConfig { start_height: BlockNumber(1), // TODO(Matan, Dan): Set the right amount consensus_delay: Duration::from_secs(15), - network_config, num_validators, timeouts: timeouts.clone(), ..Default::default() @@ -149,7 +149,8 @@ pub(crate) fn create_consensus_manager_configs_from_network_configs( cende_config: CendeConfig{ skip_write_height: Some(BlockNumber(1)), ..Default::default() - } + }, + ..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 e21160a52c2..bd3fb051fd6 100644 --- a/crates/starknet_sequencer_node/src/config/node_config.rs +++ b/crates/starknet_sequencer_node/src/config/node_config.rs @@ -53,7 +53,7 @@ pub static CONFIG_POINTERS: LazyLock = LazyLock::new(|| { "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", + "consensus_manager_config.network_config.chain_id", "gateway_config.chain_info.chain_id", "l1_scraper_config.chain_id", "mempool_p2p_config.network_config.chain_id",