From d690e117ef8126789211e2f7b457de1bd7f71f1c Mon Sep 17 00:00:00 2001 From: brentstone Date: Sun, 30 Oct 2022 00:14:59 -0400 Subject: [PATCH] fmt + cleanup after cherrypicking commits from #388 --- apps/src/lib/client/rpc.rs | 40 +++++++++--------- apps/src/lib/node/ledger/shell/init_chain.rs | 5 ++- apps/src/lib/node/ledger/shell/queries.rs | 1 + proof_of_stake/src/lib.rs | 29 ++++++------- proof_of_stake/src/types.rs | 17 ++++---- proof_of_stake/src/validation.rs | 29 +++++++------ shared/src/ledger/governance/utils.rs | 2 +- shared/src/ledger/pos/mod.rs | 11 +++-- shared/src/ledger/pos/storage.rs | 11 ++--- shared/src/ledger/pos/vp.rs | 20 ++++----- tests/src/native_vp/pos.rs | 27 +++++------- tx_prelude/src/proof_of_stake.rs | 10 ++--- wasm/wasm_source/src/tx_bond.rs | 43 ++++++++++++-------- wasm/wasm_source/src/tx_unbond.rs | 39 ++++++++++-------- 14 files changed, 151 insertions(+), 133 deletions(-) diff --git a/apps/src/lib/client/rpc.rs b/apps/src/lib/client/rpc.rs index 394e0add985..d1250916c15 100644 --- a/apps/src/lib/client/rpc.rs +++ b/apps/src/lib/client/rpc.rs @@ -21,7 +21,8 @@ use namada::ledger::pos::types::{ decimal_mult_u64, Epoch as PosEpoch, WeightedValidator, }; use namada::ledger::pos::{ - self, is_validator_slashes_key, BondId, Bonds, PosParams, Slash, Unbonds, into_tm_voting_power, + self, into_tm_voting_power, is_validator_slashes_key, BondId, Bonds, + PosParams, Slash, Unbonds, }; use namada::ledger::queries::{self, RPC}; use namada::types::address::Address; @@ -899,17 +900,18 @@ pub async fn query_voting_power(ctx: Context, args: args::QueryVotingPower) { Some(validator) => { let validator = ctx.get(&validator); // Find voting power for the given validator - let validator_deltas_key = - pos::validator_deltas_key(&validator); - let validator_deltas = query_storage_value::< - pos::ValidatorDeltas, - >(&client, &validator_deltas_key) + let validator_deltas_key = pos::validator_deltas_key(&validator); + let validator_deltas = query_storage_value::( + &client, + &validator_deltas_key, + ) .await; match validator_deltas.and_then(|data| data.get(epoch)) { Some(val_stake) => { let bonded_stake: u64 = val_stake.try_into().expect( - "The sum of the bonded stake deltas shouldn't be negative", - ); + "The sum of the bonded stake deltas shouldn't be \ + negative", + ); let weighted = WeightedValidator { address: validator.clone(), bonded_stake, @@ -962,12 +964,10 @@ pub async fn query_voting_power(ctx: Context, args: args::QueryVotingPower) { } } let total_deltas_key = pos::total_deltas_key(); - let total_deltas = query_storage_value::( - &client, - &total_deltas_key, - ) - .await - .expect("Total bonded stake should always be set"); + let total_deltas = + query_storage_value::(&client, &total_deltas_key) + .await + .expect("Total bonded stake should always be set"); let total_bonded_stake = total_deltas .get(epoch) .expect("Total bonded stake should be always set in the current epoch"); @@ -975,9 +975,12 @@ pub async fn query_voting_power(ctx: Context, args: args::QueryVotingPower) { let pos_params = query_storage_value::(&client, &pos_params_key) .await .expect("PoS parameters should always exist in storage"); - let total_bonded_stake: u64 = total_bonded_stake.try_into().expect("total_bonded_stake should be a positive value"); - let total_voting_power = into_tm_voting_power(pos_params.tm_votes_per_token, total_bonded_stake); - + let total_bonded_stake: u64 = total_bonded_stake + .try_into() + .expect("total_bonded_stake should be a positive value"); + let total_voting_power = + into_tm_voting_power(pos_params.tm_votes_per_token, total_bonded_stake); + println!("Total voting power: {}", total_voting_power); } @@ -1908,8 +1911,7 @@ async fn get_validator_stake( .expect("Total deltas should be defined"); let validator_stake = validator_deltas.get(epoch); - VotePower::try_from(validator_stake.unwrap_or_default()) - .unwrap_or_default() + VotePower::try_from(validator_stake.unwrap_or_default()).unwrap_or_default() } pub async fn get_delegators_delegation( diff --git a/apps/src/lib/node/ledger/shell/init_chain.rs b/apps/src/lib/node/ledger/shell/init_chain.rs index bc953ca7ecd..f3510e5705d 100644 --- a/apps/src/lib/node/ledger/shell/init_chain.rs +++ b/apps/src/lib/node/ledger/shell/init_chain.rs @@ -273,7 +273,10 @@ where sum: Some(key_to_tendermint(&consensus_key).unwrap()), }; abci_validator.pub_key = Some(pub_key); - abci_validator.power = into_tm_voting_power(genesis.pos_params.tm_votes_per_token, validator.pos_data.tokens); + abci_validator.power = into_tm_voting_power( + genesis.pos_params.tm_votes_per_token, + validator.pos_data.tokens, + ); response.validators.push(abci_validator); } Ok(response) diff --git a/apps/src/lib/node/ledger/shell/queries.rs b/apps/src/lib/node/ledger/shell/queries.rs index a3d37c96c7c..36d17eb3922 100644 --- a/apps/src/lib/node/ledger/shell/queries.rs +++ b/apps/src/lib/node/ledger/shell/queries.rs @@ -2,6 +2,7 @@ use borsh::{BorshDeserialize, BorshSerialize}; use ferveo_common::TendermintValidator; +use namada::ledger::pos::into_tm_voting_power; use namada::ledger::queries::{RequestCtx, ResponseQuery}; use namada::ledger::storage_api; use namada::types::address::Address; diff --git a/proof_of_stake/src/lib.rs b/proof_of_stake/src/lib.rs index 6f39d2669af..ce12607b41e 100644 --- a/proof_of_stake/src/lib.rs +++ b/proof_of_stake/src/lib.rs @@ -34,15 +34,16 @@ use parameters::PosParams; use rust_decimal::Decimal; use thiserror::Error; use types::{ - decimal_mult_i128, decimal_mult_u64, ActiveValidator, Bonds, CommissionRates, Epoch, GenesisValidator, Slash, - SlashType, Slashes, TotalVotingPowers, Unbond, Unbonds, - ValidatorConsensusKeys, ValidatorSet, ValidatorSetUpdate, ValidatorSets, - ValidatorState, ValidatorStates, ValidatorDeltas, - TotalDeltas + ActiveValidator, Bonds, CommissionRates, Epoch, GenesisValidator, Slash, + SlashType, Slashes, TotalDeltas, Unbond, Unbonds, ValidatorConsensusKeys, + ValidatorDeltas, ValidatorSet, ValidatorSetUpdate, ValidatorSets, + ValidatorState, ValidatorStates, }; use crate::btree_set::BTreeSetShims; -use crate::types::{Bond, BondId, WeightedValidator}; +use crate::types::{ + decimal_mult_i128, decimal_mult_u64, Bond, BondId, WeightedValidator, +}; /// Read-only part of the PoS system pub trait PosReadOnly { @@ -158,7 +159,9 @@ pub trait PosReadOnly { &self, ) -> Result, Self::Error>; /// Read PoS total deltas for all validators (active and inactive) - fn read_total_deltas(&self) -> Result, Self::Error>; + fn read_total_deltas( + &self, + ) -> Result, Self::Error>; } /// PoS system trait to be implemented in integration that can read and write @@ -248,7 +251,6 @@ pub trait PosActions: PosReadOnly { &mut self, value: TotalDeltas, ) -> Result<(), Self::Error>; - ) -> Result<(), Self::Error>; /// Delete an emptied PoS bond (validator self-bond or a delegation). fn delete_bond( &mut self, @@ -353,8 +355,7 @@ pub trait PosActions: PosReadOnly { validator: validator.clone(), }; let bond = self.read_bond(&bond_id)?; - let validator_deltas = - self.read_validator_deltas(validator)?; + let validator_deltas = self.read_validator_deltas(validator)?; let mut total_deltas = self.read_total_deltas()?; let mut validator_set = self.read_validator_set()?; @@ -409,9 +410,8 @@ pub trait PosActions: PosReadOnly { None => return Err(UnbondError::NoBondFound.into()), }; let unbond = self.read_unbond(&bond_id)?; - let mut validator_deltas = self - .read_validator_deltas(validator)? - .ok_or_else(|| { + let mut validator_deltas = + self.read_validator_deltas(validator)?.ok_or_else(|| { UnbondError::ValidatorHasNoBonds(validator.clone()) })?; let slashes = self.read_validator_slashes(validator)?; @@ -1267,7 +1267,8 @@ where } in validators.clone() { total_bonded_balance += *tokens; - // is some extra error handling needed here for casting the delta as i64? (TokenChange) + // is some extra error handling needed here for casting the delta as + // i64? (TokenChange) let delta = TokenChange::from(*tokens); total_bonded_delta = total_bonded_delta + delta; active.insert(WeightedValidator { diff --git a/proof_of_stake/src/types.rs b/proof_of_stake/src/types.rs index 9b48157dcc5..777e48ef2c0 100644 --- a/proof_of_stake/src/types.rs +++ b/proof_of_stake/src/types.rs @@ -5,12 +5,10 @@ use std::collections::{BTreeSet, HashMap}; use std::convert::TryFrom; use std::fmt::Display; use std::hash::Hash; -use std::num::TryFromIntError; -use std::ops::{Add, AddAssign, Sub, SubAssign}; +use std::ops::{Add, AddAssign, Sub}; use borsh::{BorshDeserialize, BorshSchema, BorshSerialize}; -use rust_decimal::prelude::ToPrimitive; -use rust_decimal::Decimal; +use rust_decimal::prelude::{Decimal, ToPrimitive}; use crate::epoched::{ Epoched, EpochedDelta, OffsetPipelineLen, OffsetUnbondingLen, @@ -36,7 +34,8 @@ pub type Unbonds = pub type ValidatorSets
= Epoched, OffsetUnbondingLen>; /// Epoched total deltas. -pub type TotalDeltas = EpochedDelta; +pub type TotalDeltas = + EpochedDelta; /// Epoched validator commission rate pub type CommissionRates = Epoched; @@ -546,8 +545,12 @@ pub fn decimal_mult_i128(dec: Decimal, int: i128) -> i128 { prod.to_i128().expect("Product is out of bounds") } -/// Calculate voting power in the tendermint context (which is stored as i64) from the number of tokens -pub fn into_tm_voting_power(votes_per_token: Decimal, tokens: impl Into) -> i64 { +/// Calculate voting power in the tendermint context (which is stored as i64) +/// from the number of tokens +pub fn into_tm_voting_power( + votes_per_token: Decimal, + tokens: impl Into, +) -> i64 { let prod = decimal_mult_u64(votes_per_token, tokens.into()); i64::try_from(prod).expect("Invalid voting power") } diff --git a/proof_of_stake/src/validation.rs b/proof_of_stake/src/validation.rs index 7b1f386f351..08c0767047a 100644 --- a/proof_of_stake/src/validation.rs +++ b/proof_of_stake/src/validation.rs @@ -17,10 +17,10 @@ use crate::btree_set::BTreeSetShims; use crate::epoched::DynEpochOffset; use crate::parameters::PosParams; use crate::types::{ - decimal_mult_i128, decimal_mult_u64, BondId, Bonds, CommissionRates, Epoch, PublicKeyTmRawHash, Slash, Slashes, - Unbonds, ValidatorConsensusKeys, ValidatorSets, - ValidatorState, ValidatorStates, ValidatorDeltas, - WeightedValidator, TotalDeltas, + decimal_mult_i128, decimal_mult_u64, BondId, Bonds, CommissionRates, Epoch, + PublicKeyTmRawHash, Slash, Slashes, TotalDeltas, Unbonds, + ValidatorConsensusKeys, ValidatorDeltas, ValidatorSets, ValidatorState, + ValidatorStates, WeightedValidator, }; #[allow(missing_docs)] @@ -487,7 +487,9 @@ where // Any validator who's total deltas changed, // should // be up-to-date - if validator.bonded_stake != Into::::into(*stake_post) { + if validator.bonded_stake + != Into::::into(*stake_post) + { errors.push( Error::InvalidActiveValidator( validator.clone(), @@ -529,7 +531,9 @@ where { is_valid = validator .bonded_stake - == Into::::into(*last_total_stake); + == Into::::into( + *last_total_stake, + ); break; } else { search_epoch -= 1; @@ -552,7 +556,9 @@ where // be up-to-date match total_stakes.get(&validator.address) { Some((_stake_pre, stake_post)) => { - if validator.bonded_stake != Into::::into(*stake_post) { + if validator.bonded_stake + != Into::::into(*stake_post) + { errors.push( Error::InvalidInactiveValidator( validator.clone(), @@ -594,7 +600,9 @@ where { is_valid = validator .bonded_stake - == Into::::into(*last_total_stake); + == Into::::into( + *last_total_stake, + ); break; } else { search_epoch -= 1; @@ -1948,10 +1956,7 @@ where fn total_deltas( constants: &Constants, errors: &mut Vec>, - total_delta_by_epoch: &mut HashMap< - Epoch, - TokenChange, - >, + total_delta_by_epoch: &mut HashMap, data: Data>, ) { match (data.pre, data.post) { diff --git a/shared/src/ledger/governance/utils.rs b/shared/src/ledger/governance/utils.rs index 42928908e8a..be66e098de7 100644 --- a/shared/src/ledger/governance/utils.rs +++ b/shared/src/ledger/governance/utils.rs @@ -9,7 +9,7 @@ use thiserror::Error; use crate::ledger::governance::storage as gov_storage; use crate::ledger::pos; use crate::ledger::pos::types::decimal_mult_u64; -use crate::ledger::pos::{BondId, Bonds, ValidatorSets, ValidatorDeltas}; +use crate::ledger::pos::{BondId, Bonds, ValidatorDeltas, ValidatorSets}; use crate::ledger::storage::{DBIter, Storage, StorageHasher, DB}; use crate::types::address::Address; use crate::types::governance::{ProposalVote, TallyResult, VotePower}; diff --git a/shared/src/ledger/pos/mod.rs b/shared/src/ledger/pos/mod.rs index 8ad501a0e0d..b8defc6adb5 100644 --- a/shared/src/ledger/pos/mod.rs +++ b/shared/src/ledger/pos/mod.rs @@ -6,7 +6,7 @@ pub mod vp; pub use namada_proof_of_stake; pub use namada_proof_of_stake::parameters::PosParams; pub use namada_proof_of_stake::types::{ - self, Slash, Slashes, ValidatorStates, decimal_mult_u64 + self, decimal_mult_u64, Slash, Slashes, ValidatorStates, }; use namada_proof_of_stake::PosBase; use rust_decimal::Decimal; @@ -31,8 +31,12 @@ pub fn staking_token_address() -> Address { address::nam() } -/// Calculate voting power in the tendermint context (which is stored as i64) from the number of tokens -pub fn into_tm_voting_power(votes_per_token: Decimal, tokens: impl Into) -> i64 { +/// Calculate voting power in the tendermint context (which is stored as i64) +/// from the number of tokens +pub fn into_tm_voting_power( + votes_per_token: Decimal, + tokens: impl Into, +) -> i64 { let prod = decimal_mult_u64(votes_per_token, tokens.into()); i64::try_from(prod).expect("Invalid validator voting power (i64)") } @@ -271,7 +275,6 @@ mod macros { let value = $crate::ledger::storage_api::StorageRead::read_bytes(self, &total_deltas_key())?.unwrap(); Ok($crate::ledger::storage::types::decode(value).unwrap()) - Ok($crate::ledger::storage::types::decode(value).unwrap()) } } } diff --git a/shared/src/ledger/pos/storage.rs b/shared/src/ledger/pos/storage.rs index 56173da8a2e..2aec4122cb0 100644 --- a/shared/src/ledger/pos/storage.rs +++ b/shared/src/ledger/pos/storage.rs @@ -1,14 +1,12 @@ //! Proof-of-Stake storage keys and storage integration via [`PosBase`] trait. use namada_proof_of_stake::parameters::PosParams; -use namada_proof_of_stake::types::{ -ValidatorStates, -}; +use namada_proof_of_stake::types::ValidatorStates; use namada_proof_of_stake::{types, PosBase}; use super::{ - BondId, Bonds, CommissionRates, ValidatorConsensusKeys, ValidatorSets, ValidatorDeltas, TotalDeltas, - ADDRESS, + BondId, Bonds, CommissionRates, TotalDeltas, ValidatorConsensusKeys, + ValidatorDeltas, ValidatorSets, ADDRESS, }; use crate::ledger::storage::types::{decode, encode}; use crate::ledger::storage::{self, Storage, StorageHasher}; @@ -421,8 +419,7 @@ where &self, key: &Self::Address, ) -> Option> { - let (value, _gas) = - self.read(&validator_deltas_key(key)).unwrap(); + let (value, _gas) = self.read(&validator_deltas_key(key)).unwrap(); value.map(|value| decode(value).unwrap()) } diff --git a/shared/src/ledger/pos/vp.rs b/shared/src/ledger/pos/vp.rs index 473741249d0..9b5293329d5 100644 --- a/shared/src/ledger/pos/vp.rs +++ b/shared/src/ledger/pos/vp.rs @@ -7,23 +7,21 @@ use borsh::BorshDeserialize; use itertools::Itertools; pub use namada_proof_of_stake; pub use namada_proof_of_stake::parameters::PosParams; -pub use namada_proof_of_stake::types::{ - self, Slash, Slashes, ValidatorStates -}; +pub use namada_proof_of_stake::types::{self, Slash, Slashes, ValidatorStates}; use namada_proof_of_stake::validation::validate; use namada_proof_of_stake::{validation, PosReadOnly}; use rust_decimal::Decimal; use thiserror::Error; use super::{ - bond_key, is_bond_key, is_params_key, is_total_deltas_key, - is_unbond_key, is_validator_set_key, is_validator_deltas_key, - params_key, staking_token_address, unbond_key, validator_commission_rate_key, - validator_consensus_key_key, validator_max_commission_rate_change_key, - validator_set_key, validator_slashes_key, validator_state_key, total_deltas_key, - validator_deltas_key, BondId, Bonds, - CommissionRates, Unbonds, ValidatorConsensusKeys, ValidatorSets, - ValidatorDeltas, + bond_key, is_bond_key, is_params_key, is_total_deltas_key, is_unbond_key, + is_validator_deltas_key, is_validator_set_key, params_key, + staking_token_address, total_deltas_key, unbond_key, + validator_commission_rate_key, validator_consensus_key_key, + validator_deltas_key, validator_max_commission_rate_change_key, + validator_set_key, validator_slashes_key, validator_state_key, BondId, + Bonds, CommissionRates, Unbonds, ValidatorConsensusKeys, ValidatorDeltas, + ValidatorSets, }; use crate::impl_pos_read_only; use crate::ledger::governance::vp::is_proposal_accepted; diff --git a/tests/src/native_vp/pos.rs b/tests/src/native_vp/pos.rs index 2589b5bc72d..23f7875b76a 100644 --- a/tests/src/native_vp/pos.rs +++ b/tests/src/native_vp/pos.rs @@ -575,7 +575,6 @@ pub mod testing { use derivative::Derivative; use itertools::Either; use namada::ledger::pos::namada_proof_of_stake::btree_set::BTreeSetShims; - use namada::ledger::pos::types::decimal_mult_i128; use namada::types::key::common::PublicKey; use namada::types::key::RefTo; use namada::types::storage::Epoch; @@ -585,8 +584,7 @@ pub mod testing { }; use namada_tx_prelude::proof_of_stake::parameters::testing::arb_rate; use namada_tx_prelude::proof_of_stake::types::{ - Bond, Unbond, ValidatorState, - WeightedValidator, + Bond, Unbond, ValidatorState, WeightedValidator, }; use namada_tx_prelude::proof_of_stake::{ staking_token_address, BondId, Bonds, PosParams, Unbonds, @@ -993,13 +991,12 @@ pub mod testing { let offset = DynEpochOffset::UnbondingLen; let token_delta = -amount.change(); - let mut changes = Vec::with_capacity(6); - // IMPORTANT: we have to update `ValidatorSet` and - // `TotalVotingPower` before we update - // `ValidatorTotalDeltas`, because they needs to - // read the total deltas before they change. + // IMPORTANT: we have to update `ValidatorSet` before we + // update `ValidatorDeltas`, because + // they needs to read the total deltas + // before they change. changes.extend([ PosStorageChange::ValidatorSet { validator: validator.clone(), @@ -1013,11 +1010,11 @@ pub mod testing { PosStorageChange::ValidatorDeltas { validator: validator.clone(), delta: token_delta, - offset: offset, + offset, }, ]); - // do I need ValidatorDeltas in here again?? + // do I need ValidatorDeltas in here again?? changes.extend([ // IMPORTANT: we have to update `Unbond` before we // update `Bond`, because it needs to read the bonds to @@ -1229,8 +1226,7 @@ pub mod testing { tx::ctx().write_unbond(&bond_id, unbonds).unwrap(); } PosStorageChange::TotalDeltas { delta, offset } => { - let mut total_deltas = - tx::ctx().read_total_deltas().unwrap(); + let mut total_deltas = tx::ctx().read_total_deltas().unwrap(); match offset { Either::Left(offset) => { total_deltas.add_at_offset( @@ -1249,9 +1245,7 @@ pub mod testing { ); } } - tx::ctx() - .write_total_deltas(total_deltas) - .unwrap() + tx::ctx().write_total_deltas(total_deltas).unwrap() } PosStorageChange::ValidatorAddressRawHash { address, @@ -1410,7 +1404,8 @@ pub mod testing { .and_then(|deltas| deltas.get(epoch)); match validator_stake { Some(validator_stake) => { - let tokens_pre: u64 = validator_stake.try_into().unwrap(); + let tokens_pre: u64 = + validator_stake.try_into().unwrap(); let tokens_post: u64 = (validator_stake + token_delta).try_into().unwrap(); let weighed_validator_pre = WeightedValidator { diff --git a/tx_prelude/src/proof_of_stake.rs b/tx_prelude/src/proof_of_stake.rs index 715fed1cd99..d2f38903f25 100644 --- a/tx_prelude/src/proof_of_stake.rs +++ b/tx_prelude/src/proof_of_stake.rs @@ -2,11 +2,11 @@ pub use namada::ledger::pos::*; use namada::ledger::pos::{ - bond_key, namada_proof_of_stake, params_key, - unbond_key, validator_address_raw_hash_key, validator_commission_rate_key, - validator_consensus_key_key, validator_max_commission_rate_change_key, - validator_set_key, validator_slashes_key, validator_state_key, - validator_deltas_key + bond_key, namada_proof_of_stake, params_key, unbond_key, + validator_address_raw_hash_key, validator_commission_rate_key, + validator_consensus_key_key, validator_deltas_key, + validator_max_commission_rate_change_key, validator_set_key, + validator_slashes_key, validator_state_key, }; use namada::types::address::Address; use namada::types::transaction::InitValidator; diff --git a/wasm/wasm_source/src/tx_bond.rs b/wasm/wasm_source/src/tx_bond.rs index 1908d34d3a8..84f823159a5 100644 --- a/wasm/wasm_source/src/tx_bond.rs +++ b/wasm/wasm_source/src/tx_bond.rs @@ -97,7 +97,8 @@ mod tests { let signed_tx = tx.sign(&key); let tx_data = signed_tx.data.unwrap(); - // Ensure that the initial stake of the sole validator is equal to the PoS account balance + // Ensure that the initial stake of the sole validator is equal to the + // PoS account balance let pos_balance_key = token::balance_key( &staking_token_address(), &Address::Internal(InternalAddress::PoS), @@ -109,13 +110,15 @@ mod tests { // Read some data before the tx is executed let total_deltas_pre = ctx().read_total_deltas()?; - let validator_deltas_pre = ctx().read_validator_deltas(&bond.validator)?.unwrap(); + let validator_deltas_pre = + ctx().read_validator_deltas(&bond.validator)?.unwrap(); let validator_sets_pre = ctx().read_validator_set()?; apply_tx(ctx(), tx_data)?; // Read the data after the tx is executed. - let validator_deltas_post = ctx().read_validator_deltas(&bond.validator)?.unwrap(); + let validator_deltas_post = + ctx().read_validator_deltas(&bond.validator)?.unwrap(); let total_deltas_post = ctx().read_total_deltas()?; let validator_sets_post = ctx().read_validator_set()?; @@ -125,8 +128,10 @@ mod tests { // - `#{PoS}/total_deltas` // - `#{PoS}/validator_set` - // Check that the validator set and deltas are unchanged before pipeline length and that they are - // updated between the pipeline and unbonding lengths + // Check that the validator set and deltas are unchanged before pipeline + // length and that they are updated between the pipeline and + // unbonding lengths + // // TODO: should end be pipeline + unbonding now? if bond.amount == token::Amount::from(0) { // None of the optional storage fields should have been updated @@ -138,20 +143,20 @@ mod tests { assert_eq!( validator_deltas_post.get(epoch), Some(initial_stake.into()), - "The validator deltas before the pipeline offset must not change \ - - checking in epoch: {epoch}" + "The validator deltas before the pipeline offset must not \ + change - checking in epoch: {epoch}" ); assert_eq!( total_deltas_post.get(epoch), Some(initial_stake.into()), - "The total deltas before the pipeline offset must not change \ - - checking in epoch: {epoch}" + "The total deltas before the pipeline offset must not \ + change - checking in epoch: {epoch}" ); assert_eq!( validator_sets_pre.get(epoch), validator_sets_post.get(epoch), "Validator set before pipeline offset must not change - \ - checking epoch {epoch}" + checking epoch {epoch}" ); } for epoch in pos_params.pipeline_len..=pos_params.unbonding_len { @@ -160,19 +165,20 @@ mod tests { assert_eq!( validator_deltas_post.get(epoch), Some(expected_stake), - "The total deltas at and after the pipeline offset epoch must \ - be incremented by the bonded amount - checking in epoch: \ - {epoch}" + "The total deltas at and after the pipeline offset epoch \ + must be incremented by the bonded amount - checking in \ + epoch: {epoch}" ); assert_eq!( total_deltas_post.get(epoch), Some(expected_stake), - "The total deltas at and after the pipeline offset epoch must \ - be incremented by the bonded amount - checking in epoch: \ - {epoch}" + "The total deltas at and after the pipeline offset epoch \ + must be incremented by the bonded amount - checking in \ + epoch: {epoch}" ); assert_ne!( - validator_sets_pre.get(epoch), validator_sets_post.get(epoch), + validator_sets_pre.get(epoch), + validator_sets_post.get(epoch), "Validator set at and after pipeline offset must have \ changed - checking epoch {epoch}" ); @@ -224,7 +230,8 @@ mod tests { } } else { // This is a self-bond - // Check that a bond already exists from genesis with initial stake for the validator + // Check that a bond already exists from genesis with initial stake + // for the validator let genesis_epoch = namada_tx_prelude::proof_of_stake::types::Epoch::from(0); for epoch in 0..pos_params.pipeline_len { diff --git a/wasm/wasm_source/src/tx_unbond.rs b/wasm/wasm_source/src/tx_unbond.rs index e63abb0a820..952dfe0ee27 100644 --- a/wasm/wasm_source/src/tx_unbond.rs +++ b/wasm/wasm_source/src/tx_unbond.rs @@ -102,8 +102,8 @@ mod tests { } }); - // Initialize the delegation if it is the case - unlike genesis validator's self-bond, - // this happens at pipeline offset + // Initialize the delegation if it is the case - unlike genesis + // validator's self-bond, this happens at pipeline offset if is_delegation { ctx().bond_tokens( unbond.source.as_ref(), @@ -137,11 +137,10 @@ mod tests { .expect("PoS must have balance"); assert_eq!(pos_balance_pre, initial_stake); - let total_deltas_pre = ctx().read_total_deltas()?; + let _total_deltas_pre = ctx().read_total_deltas()?; let validator_sets_pre = ctx().read_validator_set()?; - let validator_deltas_pre = ctx() - .read_validator_deltas(&unbond.validator)? - .unwrap(); + let _validator_deltas_pre = + ctx().read_validator_deltas(&unbond.validator)?.unwrap(); let bonds_pre = ctx().read_bond(&unbond_id)?.unwrap(); dbg!(&bonds_pre); @@ -176,8 +175,8 @@ mod tests { assert_eq!( validator_deltas_post.as_ref().unwrap().get(epoch), Some(expected_amount_before_pipeline.into()), - "The validator deltas before the pipeline offset must not change \ - - checking in epoch: {epoch}" + "The validator deltas before the pipeline offset must not \ + change - checking in epoch: {epoch}" ); assert_eq!( total_deltas_post.get(epoch), @@ -186,7 +185,8 @@ mod tests { - checking in epoch: {epoch}" ); assert_eq!( - validator_sets_pre.get(epoch), validator_sets_post.get(epoch), + validator_sets_pre.get(epoch), + validator_sets_post.get(epoch), "Validator set before pipeline offset must not change - \ checking epoch {epoch}" ); @@ -198,24 +198,27 @@ mod tests { assert_eq!( validator_deltas_post.as_ref().unwrap().get(epoch), Some(initial_stake.into()), - "The validator deltas at and after the unbonding offset must have changed \ - - checking in epoch: {epoch}" + "The validator deltas at and after the unbonding offset must \ + have changed - checking in epoch: {epoch}" ); assert_eq!( total_deltas_post.get(epoch), Some(initial_stake.into()), - "The total deltas at and after the unbonding offset must have changed \ - - checking in epoch: {epoch}" + "The total deltas at and after the unbonding offset must have \ + changed - checking in epoch: {epoch}" ); - assert_ne!( - validator_sets_post.get(epoch), validator_sets_post.get(epoch), - "Validator set at and after pipeline offset must have \ - changed - checking epoch {epoch}" + assert_eq!( + validator_sets_pre.get(epoch), + validator_sets_post.get(epoch), + "Validator set at and after pipeline offset should be the \ + same since we are before the unbonding offset - checking \ + epoch {epoch}" ); } { - // TODO: should this loop over epochs after this one as well? Are there any? + // TODO: should this loop over epochs after this one as well? Are + // there any? let epoch = pos_params.unbonding_len + 1; let expected_stake = i128::from(initial_stake) - i128::from(unbond.amount);