Skip to content

Commit

Permalink
Merge branch 'brent+tomas/pos-crate-refactor' (anoma#2253)
Browse files Browse the repository at this point in the history
* origin/brent+tomas/pos-crate-refactor:
  changelog: add anoma#2253
  proof_of_stake: re-order and make some fns private
  proof_of_stake: move mod files with other sub-modules
  compactify code that modifies validator sets
  resolve clippy
  refactor pos/tests
  refactor pos lib code
  • Loading branch information
brentstone committed Dec 29, 2023
2 parents 5999e81 + a569bdf commit 42ccc50
Show file tree
Hide file tree
Showing 50 changed files with 13,441 additions and 13,553 deletions.
2 changes: 2 additions & 0 deletions .changelog/unreleased/improvements/2253-pos-crate-refactor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Refactor the PoS crate by breaking up the lib and tests code into smaller
files. ([\#2253](https://github.com/anoma/namada/pull/2253))
8 changes: 5 additions & 3 deletions apps/src/lib/bench_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,8 @@ impl Default for BenchShell {
source: Some(defaults::albert_address()),
};
let params =
proof_of_stake::read_pos_params(&shell.wl_storage).unwrap();
proof_of_stake::storage::read_pos_params(&shell.wl_storage)
.unwrap();
let mut bench_shell = BenchShell {
inner: shell,
tempdir,
Expand Down Expand Up @@ -398,13 +399,14 @@ impl BenchShell {

pub fn advance_epoch(&mut self) {
let params =
proof_of_stake::read_pos_params(&self.inner.wl_storage).unwrap();
proof_of_stake::storage::read_pos_params(&self.inner.wl_storage)
.unwrap();

self.wl_storage.storage.block.epoch =
self.wl_storage.storage.block.epoch.next();
let current_epoch = self.wl_storage.storage.block.epoch;

proof_of_stake::copy_validator_sets_and_positions(
proof_of_stake::validator_set_update::copy_validator_sets_and_positions(
&mut self.wl_storage,
&params,
current_epoch,
Expand Down
154 changes: 88 additions & 66 deletions apps/src/lib/node/ledger/shell/finalize_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use namada::ledger::storage::write_log::StorageModification;
use namada::ledger::storage::EPOCH_SWITCH_BLOCKS_DELAY;
use namada::ledger::storage_api::token::credit_tokens;
use namada::ledger::storage_api::{pgf, ResultExt, StorageRead, StorageWrite};
use namada::proof_of_stake::{
use namada::proof_of_stake::storage::{
find_validator_by_raw_hash, read_last_block_proposer_address,
read_pos_params, read_total_stake, write_last_block_proposer_address,
};
Expand Down Expand Up @@ -99,7 +99,7 @@ where
}

let pos_params =
namada_proof_of_stake::read_pos_params(&self.wl_storage)?;
namada_proof_of_stake::storage::read_pos_params(&self.wl_storage)?;

if new_epoch {
update_allowed_conversions(&mut self.wl_storage)?;
Expand All @@ -108,7 +108,7 @@ where

// Copy the new_epoch + pipeline_len - 1 validator set into
// new_epoch + pipeline_len
namada_proof_of_stake::copy_validator_sets_and_positions(
namada_proof_of_stake::validator_set_update::copy_validator_sets_and_positions(
&mut self.wl_storage,
&pos_params,
current_epoch,
Expand Down Expand Up @@ -729,7 +729,7 @@ where

let inflation = token::Amount::from_uint(inflation, 0)
.expect("Should not fail Uint -> Amount conversion");
namada_proof_of_stake::update_rewards_products_and_mint_inflation(
namada_proof_of_stake::rewards::update_rewards_products_and_mint_inflation(
&mut self.wl_storage,
&params,
last_epoch,
Expand Down Expand Up @@ -854,7 +854,7 @@ where
tracing::debug!(
"Found last block proposer: {proposer_address}"
);
namada_proof_of_stake::log_block_rewards(
namada_proof_of_stake::rewards::log_block_rewards(
&mut self.wl_storage,
if new_epoch {
current_epoch.prev()
Expand Down Expand Up @@ -987,19 +987,19 @@ mod test_finalize_block {
use namada::ledger::storage_api;
use namada::ledger::storage_api::StorageWrite;
use namada::proof_of_stake::storage::{
is_validator_slashes_key, slashes_prefix,
};
use namada::proof_of_stake::types::{
BondId, SlashType, ValidatorState, WeightedValidator,
};
use namada::proof_of_stake::{
enqueued_slashes_handle, get_num_consensus_validators,
read_consensus_validator_set_addresses_with_stake,
read_validator_stake, rewards_accumulator_handle, unjail_validator,
read_validator_stake, rewards_accumulator_handle,
validator_consensus_key_handle, validator_rewards_products_handle,
validator_slashes_handle, validator_state_handle, write_pos_params,
ADDRESS as pos_address,
};
use namada::proof_of_stake::storage_key::{
is_validator_slashes_key, slashes_prefix,
};
use namada::proof_of_stake::types::{
BondId, SlashType, ValidatorState, WeightedValidator,
};
use namada::proof_of_stake::{unjail_validator, ADDRESS as pos_address};
use namada::proto::{Code, Data, Section, Signature};
use namada::types::dec::POS_DECIMAL_PRECISION;
use namada::types::ethereum_events::{EthAddress, Uint as ethUint};
Expand All @@ -1020,7 +1020,7 @@ mod test_finalize_block {
use namada::types::uint::Uint;
use namada::types::vote_extensions::ethereum_events;
use namada_sdk::eth_bridge::MinimumConfirmations;
use namada_sdk::proof_of_stake::{
use namada_sdk::proof_of_stake::storage::{
liveness_missed_votes_handle, liveness_sum_missed_votes_handle,
read_consensus_validator_set_addresses,
};
Expand Down Expand Up @@ -1824,12 +1824,15 @@ mod test_finalize_block {
// Keep applying finalize block
let validator = shell.mode.get_validator_address().unwrap();
let pos_params =
namada_proof_of_stake::read_pos_params(&shell.wl_storage).unwrap();
let consensus_key =
namada_proof_of_stake::validator_consensus_key_handle(validator)
.get(&shell.wl_storage, Epoch::default(), &pos_params)
.unwrap()
namada_proof_of_stake::storage::read_pos_params(&shell.wl_storage)
.unwrap();
let consensus_key =
namada_proof_of_stake::storage::validator_consensus_key_handle(
validator,
)
.get(&shell.wl_storage, Epoch::default(), &pos_params)
.unwrap()
.unwrap();
let proposer_address = HEXUPPER
.decode(consensus_key.tm_raw_hash().as_bytes())
.unwrap();
Expand Down Expand Up @@ -2370,7 +2373,7 @@ mod test_finalize_block {
// Check the bond amounts for rewards up thru the withdrawable epoch
let withdraw_epoch = current_epoch + params.withdrawable_epoch_offset();
let last_claim_epoch =
namada_proof_of_stake::get_last_reward_claim_epoch(
namada_proof_of_stake::storage::get_last_reward_claim_epoch(
&shell.wl_storage,
&validator.address,
&validator.address,
Expand Down Expand Up @@ -2488,7 +2491,7 @@ mod test_finalize_block {

let validator = validator_set.pop_first().unwrap();
let commission_rate =
namada_proof_of_stake::validator_commission_rate_handle(
namada_proof_of_stake::storage::validator_commission_rate_handle(
&validator.address,
)
.get(&shell.wl_storage, Epoch(0), &params)
Expand Down Expand Up @@ -2702,8 +2705,10 @@ mod test_finalize_block {

// Check that there's 3 unique consensus keys
let consensus_keys =
namada_proof_of_stake::get_consensus_key_set(&shell.wl_storage)
.unwrap();
namada_proof_of_stake::storage::get_consensus_key_set(
&shell.wl_storage,
)
.unwrap();
assert_eq!(consensus_keys.len(), 3);
// let ck1 = validator_consensus_key_handle(&validator)
// .get(&storage, current_epoch, &params)
Expand Down Expand Up @@ -2757,8 +2762,10 @@ mod test_finalize_block {

// Check that there's 5 unique consensus keys
let consensus_keys =
namada_proof_of_stake::get_consensus_key_set(&shell.wl_storage)
.unwrap();
namada_proof_of_stake::storage::get_consensus_key_set(
&shell.wl_storage,
)
.unwrap();
assert_eq!(consensus_keys.len(), 5);

// Advance to pipeline epoch
Expand Down Expand Up @@ -2837,8 +2844,10 @@ mod test_finalize_block {

// Check that there's 7 unique consensus keys
let consensus_keys =
namada_proof_of_stake::get_consensus_key_set(&shell.wl_storage)
.unwrap();
namada_proof_of_stake::storage::get_consensus_key_set(
&shell.wl_storage,
)
.unwrap();
assert_eq!(consensus_keys.len(), 7);

// Advance to pipeline epoch
Expand Down Expand Up @@ -2900,8 +2909,10 @@ mod test_finalize_block {

// Check that there's 8 unique consensus keys
let consensus_keys =
namada_proof_of_stake::get_consensus_key_set(&shell.wl_storage)
.unwrap();
namada_proof_of_stake::storage::get_consensus_key_set(
&shell.wl_storage,
)
.unwrap();
assert_eq!(consensus_keys.len(), 8);

// Advance to pipeline epoch
Expand Down Expand Up @@ -3473,12 +3484,15 @@ mod test_finalize_block {

let validator = shell.mode.get_validator_address().unwrap().to_owned();
let pos_params =
namada_proof_of_stake::read_pos_params(&shell.wl_storage).unwrap();
let consensus_key =
namada_proof_of_stake::validator_consensus_key_handle(&validator)
.get(&shell.wl_storage, Epoch::default(), &pos_params)
.unwrap()
namada_proof_of_stake::storage::read_pos_params(&shell.wl_storage)
.unwrap();
let consensus_key =
namada_proof_of_stake::storage::validator_consensus_key_handle(
&validator,
)
.get(&shell.wl_storage, Epoch::default(), &pos_params)
.unwrap()
.unwrap();
let proposer_address = HEXUPPER
.decode(consensus_key.tm_raw_hash().as_bytes())
.unwrap();
Expand Down Expand Up @@ -4060,15 +4074,15 @@ mod test_finalize_block {
)
.unwrap();

let val_stake = namada_proof_of_stake::read_validator_stake(
let val_stake = namada_proof_of_stake::storage::read_validator_stake(
&shell.wl_storage,
&params,
&val1.address,
current_epoch + params.pipeline_len,
)
.unwrap();

let total_stake = namada_proof_of_stake::read_total_stake(
let total_stake = namada_proof_of_stake::storage::read_total_stake(
&shell.wl_storage,
&params,
current_epoch + params.pipeline_len,
Expand Down Expand Up @@ -4103,14 +4117,14 @@ mod test_finalize_block {
)
.unwrap();

let val_stake = namada_proof_of_stake::read_validator_stake(
let val_stake = namada_proof_of_stake::storage::read_validator_stake(
&shell.wl_storage,
&params,
&val1.address,
current_epoch + params.pipeline_len,
)
.unwrap();
let total_stake = namada_proof_of_stake::read_total_stake(
let total_stake = namada_proof_of_stake::storage::read_total_stake(
&shell.wl_storage,
&params,
current_epoch + params.pipeline_len,
Expand Down Expand Up @@ -4248,16 +4262,18 @@ mod test_finalize_block {
assert_eq!(enqueued_slash.r#type, SlashType::DuplicateVote);
assert_eq!(enqueued_slash.rate, Dec::zero());
let last_slash =
namada_proof_of_stake::read_validator_last_slash_epoch(
namada_proof_of_stake::storage::read_validator_last_slash_epoch(
&shell.wl_storage,
&val1.address,
)
.unwrap();
assert_eq!(last_slash, Some(misbehavior_epoch));
assert!(
namada_proof_of_stake::validator_slashes_handle(&val1.address)
.is_empty(&shell.wl_storage)
.unwrap()
namada_proof_of_stake::storage::validator_slashes_handle(
&val1.address
)
.is_empty(&shell.wl_storage)
.unwrap()
);

tracing::debug!("Advancing to epoch 7");
Expand Down Expand Up @@ -4316,7 +4332,7 @@ mod test_finalize_block {
assert_eq!(enqueued_slashes_8.len(&shell.wl_storage).unwrap(), 2_u64);
assert_eq!(enqueued_slashes_9.len(&shell.wl_storage).unwrap(), 1_u64);
let last_slash =
namada_proof_of_stake::read_validator_last_slash_epoch(
namada_proof_of_stake::storage::read_validator_last_slash_epoch(
&shell.wl_storage,
&val1.address,
)
Expand All @@ -4332,18 +4348,21 @@ mod test_finalize_block {
.unwrap()
);
assert!(
namada_proof_of_stake::validator_slashes_handle(&val1.address)
.is_empty(&shell.wl_storage)
.unwrap()
namada_proof_of_stake::storage::validator_slashes_handle(
&val1.address
)
.is_empty(&shell.wl_storage)
.unwrap()
);

let pre_stake_10 = namada_proof_of_stake::read_validator_stake(
&shell.wl_storage,
&params,
&val1.address,
Epoch(10),
)
.unwrap();
let pre_stake_10 =
namada_proof_of_stake::storage::read_validator_stake(
&shell.wl_storage,
&params,
&val1.address,
Epoch(10),
)
.unwrap();
assert_eq!(
pre_stake_10,
initial_stake + del_1_amount
Expand All @@ -4370,28 +4389,28 @@ mod test_finalize_block {
let (current_epoch, _) = advance_epoch(&mut shell, &pkh1, &votes, None);
assert_eq!(current_epoch.0, 9_u64);

let val_stake_3 = namada_proof_of_stake::read_validator_stake(
let val_stake_3 = namada_proof_of_stake::storage::read_validator_stake(
&shell.wl_storage,
&params,
&val1.address,
Epoch(3),
)
.unwrap();
let val_stake_4 = namada_proof_of_stake::read_validator_stake(
let val_stake_4 = namada_proof_of_stake::storage::read_validator_stake(
&shell.wl_storage,
&params,
&val1.address,
Epoch(4),
)
.unwrap();

let tot_stake_3 = namada_proof_of_stake::read_total_stake(
let tot_stake_3 = namada_proof_of_stake::storage::read_total_stake(
&shell.wl_storage,
&params,
Epoch(3),
)
.unwrap();
let tot_stake_4 = namada_proof_of_stake::read_total_stake(
let tot_stake_4 = namada_proof_of_stake::storage::read_total_stake(
&shell.wl_storage,
&params,
Epoch(4),
Expand All @@ -4415,7 +4434,9 @@ mod test_finalize_block {
// There should be 2 slashes processed for the validator, each with rate
// equal to the cubic slashing rate
let val_slashes =
namada_proof_of_stake::validator_slashes_handle(&val1.address);
namada_proof_of_stake::storage::validator_slashes_handle(
&val1.address,
);
assert_eq!(val_slashes.len(&shell.wl_storage).unwrap(), 2u64);
let is_rate_good = val_slashes
.iter(&shell.wl_storage)
Expand Down Expand Up @@ -4592,7 +4613,7 @@ mod test_finalize_block {
assert_eq!(current_epoch.0, 12_u64);

tracing::debug!("\nCHECK BOND AND UNBOND DETAILS");
let details = namada_proof_of_stake::bonds_and_unbonds(
let details = namada_proof_of_stake::queries::bonds_and_unbonds(
&shell.wl_storage,
None,
None,
Expand Down Expand Up @@ -4811,13 +4832,14 @@ mod test_finalize_block {
Epoch::default(),
);

let validator_stake = namada_proof_of_stake::read_validator_stake(
&shell.wl_storage,
&params,
&val2,
Epoch::default(),
)
.unwrap();
let validator_stake =
namada_proof_of_stake::storage::read_validator_stake(
&shell.wl_storage,
&params,
&val2,
Epoch::default(),
)
.unwrap();

let val3 = initial_consensus_set[2].clone();
let val4 = initial_consensus_set[3].clone();
Expand Down
Loading

0 comments on commit 42ccc50

Please sign in to comment.