From 6f86d67e06fbbe06f7d77f4ee34b7e35563fc697 Mon Sep 17 00:00:00 2001 From: Asmaa Magdoub Date: Sun, 7 Jul 2024 08:54:54 +0300 Subject: [PATCH] chore(config): add num_of_validators to ConsensusConfig --- config/default_config.json | 5 +++++ ..._config__config_test__dump_default_config.snap | 7 +++++++ crates/papyrus_node/src/main.rs | 1 + crates/sequencing/papyrus_consensus/README.md | 5 +++-- crates/sequencing/papyrus_consensus/src/config.rs | 10 ++++++++++ .../src/papyrus_consensus_context.rs | 15 +++++++++++---- .../src/papyrus_consensus_context_test.rs | 1 + 7 files changed, 38 insertions(+), 6 deletions(-) diff --git a/config/default_config.json b/config/default_config.json index 1e1269b38d..8fa65a6c22 100644 --- a/config/default_config.json +++ b/config/default_config.json @@ -79,6 +79,11 @@ "privacy": "TemporaryValue", "value": true }, + "consensus.num_validators": { + "description": "The number of validators in the consensus.", + "privacy": "Public", + "value": 4 + }, "consensus.start_height": { "description": "The height to start the consensus from.", "privacy": "Public", 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 f89b8e79d6..7b76e5e02e 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 @@ -89,6 +89,13 @@ expression: dumped_default_config "value": true, "privacy": "TemporaryValue" }, + "consensus.num_validators": { + "description": "The number of validators in the consensus.", + "value": { + "$serde_json::private::Number": "4" + }, + "privacy": "Public" + }, "consensus.start_height": { "description": "The height to start the consensus from.", "value": { diff --git a/crates/papyrus_node/src/main.rs b/crates/papyrus_node/src/main.rs index 0e35158687..0ae1e82bef 100644 --- a/crates/papyrus_node/src/main.rs +++ b/crates/papyrus_node/src/main.rs @@ -120,6 +120,7 @@ fn run_consensus( let context = PapyrusConsensusContext::new( storage_reader.clone(), consensus_channels.messages_to_broadcast_sender, + config.num_validators, ); let start_height = config.start_height; diff --git a/crates/sequencing/papyrus_consensus/README.md b/crates/sequencing/papyrus_consensus/README.md index 93e723328e..4dcbfc0b10 100644 --- a/crates/sequencing/papyrus_consensus/README.md +++ b/crates/sequencing/papyrus_consensus/README.md @@ -9,7 +9,8 @@ versions. Breaking changes are expected to happen in the near future. ## How to run 1. You must turn consensus on and provide a validator ID by passing: `--consensus.#is_none false --consensus.validator_id 0x` 2. Start by running any nodes which are validators for `consensus.start_height` which is by default 0 to avoid them missing the proposal. - 1. You can change the default topic by adding: `--consensus.topic "TOPIC"` + 1. You can change the default number of validators by passing: `--consensus.num_validators ` + 2. You can change the default topic by passing: `--consensus.topic "TOPIC"` #### Bootstrap Node This must be run first: @@ -19,11 +20,11 @@ cargo run --package papyrus_node --bin papyrus_node -- --base_layer.node_url --network.#is_none false --consensus.#is_none false --consensus.validator_id 0x --network.tcp_port --network.bootstrap_peer_multiaddr.#is_none false --rpc.server_address 127.0.0.1: --monitoring_gateway.server_address 127.0.0.1: --storage.db_config.path_prefix --network.bootstrap_peer_multiaddr /ip4/127.0.0.1/tcp/10000/p2p/ ``` -- The validator set, (0, 1, 2, 3), is hardcoded in milestone 2. - Node 0 is the first proposer and should be run last. UNIQUE - a value unique among all nodes running locally. diff --git a/crates/sequencing/papyrus_consensus/src/config.rs b/crates/sequencing/papyrus_consensus/src/config.rs index 76ef771dee..8f637650d1 100644 --- a/crates/sequencing/papyrus_consensus/src/config.rs +++ b/crates/sequencing/papyrus_consensus/src/config.rs @@ -20,6 +20,9 @@ pub struct ConsensusConfig { pub topic: String, /// The height to start the consensus from. pub start_height: BlockNumber, + /// The number of validators in the consensus. + // Used for testing in an early milestone. + pub num_validators: u64, } impl SerializeConfig for ConsensusConfig { @@ -43,6 +46,12 @@ impl SerializeConfig for ConsensusConfig { "The height to start the consensus from.", ParamPrivacyInput::Public, ), + ser_param( + "num_validators", + &self.num_validators, + "The number of validators in the consensus.", + ParamPrivacyInput::Public, + ), ]) } } @@ -53,6 +62,7 @@ impl Default for ConsensusConfig { validator_id: ValidatorId::default(), topic: "consensus".to_string(), start_height: BlockNumber::default(), + num_validators: 4, } } } diff --git a/crates/sequencing/papyrus_consensus/src/papyrus_consensus_context.rs b/crates/sequencing/papyrus_consensus/src/papyrus_consensus_context.rs index 9bd72a6dd8..b2f5b216f0 100644 --- a/crates/sequencing/papyrus_consensus/src/papyrus_consensus_context.rs +++ b/crates/sequencing/papyrus_consensus/src/papyrus_consensus_context.rs @@ -16,6 +16,7 @@ use papyrus_storage::body::BodyStorageReader; use papyrus_storage::header::HeaderStorageReader; use papyrus_storage::{StorageError, StorageReader}; use starknet_api::block::{BlockHash, BlockNumber}; +use starknet_api::core::ContractAddress; use starknet_api::transaction::Transaction; use tokio::sync::Mutex; use tracing::debug; @@ -47,6 +48,7 @@ impl ConsensusBlock for PapyrusConsensusBlock { pub struct PapyrusConsensusContext { storage_reader: StorageReader, broadcast_sender: Arc>>, + validators: Vec, } impl PapyrusConsensusContext { @@ -55,8 +57,13 @@ impl PapyrusConsensusContext { pub fn new( storage_reader: StorageReader, broadcast_sender: SubscriberSender, + num_validators: u64, ) -> Self { - Self { storage_reader, broadcast_sender: Arc::new(Mutex::new(broadcast_sender)) } + Self { + storage_reader, + broadcast_sender: Arc::new(Mutex::new(broadcast_sender)), + validators: (0..num_validators).map(ContractAddress::from).collect(), + } } } @@ -158,11 +165,11 @@ impl ConsensusContext for PapyrusConsensusContext { } async fn validators(&self, _height: BlockNumber) -> Vec { - vec![0u8.into(), 1u8.into(), 2u8.into(), 3u8.into()] + self.validators.clone() } - fn proposer(&self, _validators: &[ValidatorId], height: BlockNumber) -> ValidatorId { - (height.0 % 2).into() + fn proposer(&self, _validators: &[ValidatorId], _height: BlockNumber) -> ValidatorId { + *self.validators.first().expect("validators should have at least 2 validators") } async fn broadcast(&self, message: ConsensusMessage) -> Result<(), ConsensusError> { diff --git a/crates/sequencing/papyrus_consensus/src/papyrus_consensus_context_test.rs b/crates/sequencing/papyrus_consensus/src/papyrus_consensus_context_test.rs index e21210b0ce..9f1f25d857 100644 --- a/crates/sequencing/papyrus_consensus/src/papyrus_consensus_context_test.rs +++ b/crates/sequencing/papyrus_consensus/src/papyrus_consensus_context_test.rs @@ -115,6 +115,7 @@ fn test_setup() -> (Block, PapyrusConsensusContext, BroadcastNetworkMock