From 3abc627b4079855074706a4cddd5dd41257a0ab2 Mon Sep 17 00:00:00 2001 From: Herr Seppia Date: Mon, 23 Sep 2024 12:19:49 +0200 Subject: [PATCH 1/3] consensus: change voters to be Vec instead of Option --- consensus/src/operations.rs | 2 +- consensus/src/proposal/block_generator.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/consensus/src/operations.rs b/consensus/src/operations.rs index 6b3d936cde..457c30368d 100644 --- a/consensus/src/operations.rs +++ b/consensus/src/operations.rs @@ -25,7 +25,7 @@ pub struct CallParams { pub round: u64, pub generator_pubkey: node_data::bls::PublicKey, pub to_slash: Vec, - pub voters_pubkey: Option>, + pub voters_pubkey: Vec, pub max_txs_bytes: usize, } diff --git a/consensus/src/proposal/block_generator.rs b/consensus/src/proposal/block_generator.rs index db769d839f..a2755c96ae 100644 --- a/consensus/src/proposal/block_generator.rs +++ b/consensus/src/proposal/block_generator.rs @@ -130,7 +130,7 @@ impl Generator { round: ru.round, generator_pubkey: ru.pubkey_bls.clone(), to_slash, - voters_pubkey: Some(voters.to_owned()), + voters_pubkey: voters.to_owned(), max_txs_bytes, }; From 4b73cb26b6bdfad7e4e6506625d8b7fc1b5c72e5 Mon Sep 17 00:00:00 2001 From: Herr Seppia Date: Mon, 23 Sep 2024 12:22:14 +0200 Subject: [PATCH 2/3] node: change voters to be Vec instead of Option --- node/src/chain/acceptor.rs | 2 +- node/src/chain/consensus.rs | 2 +- node/src/vm.rs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/node/src/chain/acceptor.rs b/node/src/chain/acceptor.rs index 3bc799a846..27e485c59c 100644 --- a/node/src/chain/acceptor.rs +++ b/node/src/chain/acceptor.rs @@ -478,7 +478,7 @@ impl Acceptor { let (txs, rolling_result) = self.db.read().await.update(|db| { let (txs, verification_output) = - vm.accept(blk, Some(&prev_block_voters[..]))?; + vm.accept(blk, &prev_block_voters[..])?; for spent_tx in txs.iter() { events.push(TransactionEvent::Executed(spent_tx).into()); } diff --git a/node/src/chain/consensus.rs b/node/src/chain/consensus.rs index c458654a5a..9b657c8c46 100644 --- a/node/src/chain/consensus.rs +++ b/node/src/chain/consensus.rs @@ -310,7 +310,7 @@ impl Operations for Executor { let vm = self.vm.read().await; - vm.verify_state_transition(blk, Some(voters)) + vm.verify_state_transition(blk, voters) .map_err(OperationError::InvalidVST) } diff --git a/node/src/vm.rs b/node/src/vm.rs index adfdc85856..6407214e8f 100644 --- a/node/src/vm.rs +++ b/node/src/vm.rs @@ -29,13 +29,13 @@ pub trait VMExecution: Send + Sync + 'static { fn verify_state_transition( &self, blk: &Block, - voters: Option<&[Voter]>, + voters: &[Voter], ) -> anyhow::Result; fn accept( &self, blk: &Block, - voters: Option<&[Voter]>, + voters: &[Voter], ) -> anyhow::Result<(Vec, VerificationOutput)>; fn finalize_state( From acb814b3b7388426c0d56f4664d7395fdcfe3e73 Mon Sep 17 00:00:00 2001 From: Herr Seppia Date: Mon, 23 Sep 2024 12:25:16 +0200 Subject: [PATCH 3/3] rusk: change voters to be Vec instead of Option --- rusk/benches/block_ingestion.rs | 2 +- rusk/src/lib/node/rusk.rs | 19 ++++++++----------- rusk/src/lib/node/vm.rs | 4 ++-- rusk/tests/common/state.rs | 6 +++--- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/rusk/benches/block_ingestion.rs b/rusk/benches/block_ingestion.rs index d1f92e3a70..af56dd647b 100644 --- a/rusk/benches/block_ingestion.rs +++ b/rusk/benches/block_ingestion.rs @@ -141,7 +141,7 @@ fn bench_accept( txs, None, vec![], - None, + &[], ) .expect("Accepting transactions should succeed"); diff --git a/rusk/src/lib/node/rusk.rs b/rusk/src/lib/node/rusk.rs index 689ba6eb93..6abbbf0de1 100644 --- a/rusk/src/lib/node/rusk.rs +++ b/rusk/src/lib/node/rusk.rs @@ -120,7 +120,7 @@ impl Rusk { let generator = params.generator_pubkey.inner(); let to_slash = params.to_slash.clone(); - let voters = params.voters_pubkey.as_ref().map(|voters| &voters[..]); + let voters = ¶ms.voters_pubkey[..]; let mut session = self.session(block_height, None)?; @@ -280,7 +280,7 @@ impl Rusk { generator: &BlsPublicKey, txs: &[Transaction], slashing: Vec, - voters: Option<&[Voter]>, + voters: &[Voter], ) -> Result<(Vec, VerificationOutput)> { let session = self.session(block_height, None)?; @@ -312,7 +312,7 @@ impl Rusk { txs: Vec, consistency_check: Option, slashing: Vec, - voters: Option<&[Voter]>, + voters: &[Voter], ) -> Result<(Vec, VerificationOutput)> { let session = self.session(block_height, None)?; @@ -524,7 +524,7 @@ fn accept( generator: &BlsPublicKey, txs: &[Transaction], slashing: Vec, - voters: Option<&[Voter]>, + voters: &[Voter], gas_per_deploy_byte: Option, min_deployment_gas_price: Option, ) -> Result<( @@ -793,18 +793,17 @@ fn reward_slash_and_update_root( dusk_spent: Dusk, generator: &BlsPublicKey, slashing: Vec, - voters: Option<&[Voter]>, + voters: &[Voter], ) -> Result> { let (dusk_value, generator_reward, generator_extra_reward, voters_reward) = coinbase_value(block_height, dusk_spent); let credits = voters - .unwrap_or_default() .iter() .map(|(_, credits)| *credits as u64) .sum::(); - if voters.is_some() && credits == 0 && block_height > 1 { + if !voters.is_empty() && credits == 0 && block_height > 1 { return Err(InvalidCreditsCount(block_height, 0)); } @@ -820,9 +819,7 @@ fn reward_slash_and_update_root( } // Additionally we also reward the voters. - if let Some(voters) = &voters { - num_rewards += voters.len(); - } + num_rewards += voters.len(); let mut rewards = Vec::with_capacity(num_rewards); @@ -850,7 +847,7 @@ fn reward_slash_and_update_root( / (VALIDATION_COMMITTEE_CREDITS + RATIFICATION_COMMITTEE_CREDITS) as u64; - for (to_voter, credits) in voters.unwrap_or_default() { + for (to_voter, credits) in voters { let voter = to_voter.inner(); let voter_reward = *credits as u64 * credit_reward; rewards.push(Reward { diff --git a/rusk/src/lib/node/vm.rs b/rusk/src/lib/node/vm.rs index f6b3240a7a..10d715f527 100644 --- a/rusk/src/lib/node/vm.rs +++ b/rusk/src/lib/node/vm.rs @@ -51,7 +51,7 @@ impl VMExecution for Rusk { fn verify_state_transition( &self, blk: &Block, - voters: Option<&[Voter]>, + voters: &[Voter], ) -> anyhow::Result { info!("Received verify_state_transition request"); let generator = blk.header().generator_bls_pubkey; @@ -77,7 +77,7 @@ impl VMExecution for Rusk { fn accept( &self, blk: &Block, - voters: Option<&[Voter]>, + voters: &[Voter], ) -> anyhow::Result<(Vec, VerificationOutput)> { info!("Received accept request"); let generator = blk.header().generator_bls_pubkey; diff --git a/rusk/tests/common/state.rs b/rusk/tests/common/state.rs index 87a6c6ac29..3d8b15fce2 100644 --- a/rusk/tests/common/state.rs +++ b/rusk/tests/common/state.rs @@ -130,7 +130,7 @@ pub fn generator_procedure( round, generator_pubkey, to_slash, - voters_pubkey: Some(voters.clone()), + voters_pubkey: voters.clone(), max_txs_bytes: usize::MAX, }; @@ -162,10 +162,10 @@ pub fn generator_procedure( ) .expect("valid block"); - let verify_output = rusk.verify_state_transition(&block, Some(&voters))?; + let verify_output = rusk.verify_state_transition(&block, &voters)?; info!("verify_state_transition new verification: {verify_output}",); - let (accept_txs, accept_output) = rusk.accept(&block, Some(&voters))?; + let (accept_txs, accept_output) = rusk.accept(&block, &voters)?; assert_eq!(accept_txs.len(), expected.executed, "all txs accepted");