Skip to content

Commit 68c1dde

Browse files
committed
testing
1 parent c39f64c commit 68c1dde

File tree

2 files changed

+77
-2
lines changed

2 files changed

+77
-2
lines changed

crates/proof_of_stake/src/rewards.rs

+67-2
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,13 @@ where
695695
mod tests {
696696
use std::str::FromStr;
697697

698+
use namada_parameters::storage::get_epochs_per_year_key;
699+
use namada_state::testing::TestState;
700+
use namada_trans_token::storage_key::minted_balance_key;
701+
use storage::write_pos_params;
702+
698703
use super::*;
704+
use crate::OwnedPosParams;
699705

700706
#[test]
701707
fn test_inflation_calc_up() {
@@ -877,10 +883,19 @@ mod tests {
877883

878884
#[test]
879885
fn test_pos_inflation_playground() {
886+
let mut storage = TestState::default();
887+
let gov_params =
888+
namada_governance::parameters::GovernanceParameters::default();
889+
gov_params.init_storage(&mut storage).unwrap();
890+
write_pos_params(&mut storage, &OwnedPosParams::default()).unwrap();
891+
880892
let epochs_per_year = 365_u64;
893+
let epy_key = get_epochs_per_year_key();
894+
storage.write(&epy_key, epochs_per_year).unwrap();
881895

882896
let init_locked_ratio = Dec::from_str("0.1").unwrap();
883897
let mut last_locked_ratio = init_locked_ratio;
898+
884899
let total_native_tokens = 1_000_000_000_u64;
885900
let locked_amount = u64::try_from(
886901
(init_locked_ratio * total_native_tokens).to_uint().unwrap(),
@@ -891,6 +906,13 @@ mod tests {
891906
let mut total_native_tokens =
892907
token::Amount::native_whole(total_native_tokens);
893908

909+
update_state_for_pos_playground(
910+
&mut storage,
911+
last_locked_ratio,
912+
last_inflation_amount,
913+
total_native_tokens,
914+
);
915+
894916
let max_reward_rate = Dec::from_str("0.1").unwrap();
895917
let target_ratio = Dec::from_str("0.66666666").unwrap();
896918
let p_gain_nom = Dec::from_str("0.25").unwrap();
@@ -917,17 +939,42 @@ mod tests {
917939
let locked_ratio = Dec::try_from(locked_amount).unwrap()
918940
/ Dec::try_from(total_native_tokens).unwrap();
919941

920-
let rate = Dec::try_from(inflation).unwrap()
942+
let inflation_rate = Dec::try_from(inflation).unwrap()
921943
* Dec::from(epochs_per_year)
922944
/ Dec::try_from(total_native_tokens).unwrap();
945+
let staking_rate = inflation_rate / locked_ratio;
946+
923947
println!(
924948
"Round {round}: Locked ratio: {locked_ratio}, inflation rate: \
925-
{rate}",
949+
{inflation_rate}, staking rate: {staking_rate}",
926950
);
927951

928952
last_inflation_amount = inflation;
929953
total_native_tokens += inflation;
930954
last_locked_ratio = locked_ratio;
955+
update_state_for_pos_playground(
956+
&mut storage,
957+
last_locked_ratio,
958+
last_inflation_amount,
959+
total_native_tokens,
960+
);
961+
962+
let query_staking_rate = estimate_staking_reward_rate::<
963+
_,
964+
namada_trans_token::Store<_>,
965+
namada_parameters::Store<_>,
966+
>(&storage)
967+
.unwrap();
968+
// println!(" ----> Query staking rate: {query_staking_rate}");
969+
if !staking_rate.is_zero() && !query_staking_rate.is_zero() {
970+
let ratio = staking_rate / query_staking_rate;
971+
let residual = ratio.abs_diff(Dec::one()).unwrap();
972+
assert!(residual < Dec::from_str("0.001").unwrap());
973+
// println!(
974+
// " ----> Ratio: {}\n",
975+
// staking_rate / query_staking_rate
976+
// );
977+
}
931978

932979
// if rate.abs_diff(&controller.max_reward_rate)
933980
// < Dec::from_str("0.01").unwrap()
@@ -965,4 +1012,22 @@ mod tests {
9651012
// );
9661013
}
9671014
}
1015+
1016+
fn update_state_for_pos_playground<S>(
1017+
storage: &mut S,
1018+
last_staked_ratio: Dec,
1019+
last_inflation_amount: token::Amount,
1020+
total_native_amount: token::Amount,
1021+
) where
1022+
S: StorageRead + StorageWrite,
1023+
{
1024+
write_last_staked_ratio(storage, last_staked_ratio).unwrap();
1025+
write_last_pos_inflation_amount(storage, last_inflation_amount)
1026+
.unwrap();
1027+
let total_native_tokens_key =
1028+
minted_balance_key(&storage.get_native_token().unwrap());
1029+
storage
1030+
.write(&total_native_tokens_key, total_native_amount)
1031+
.unwrap();
1032+
}
9681033
}

crates/tests/src/integration/ledger_tests.rs

+10
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,16 @@ fn pos_rewards() -> Result<()> {
544544
.unwrap();
545545
assert!(amount_post > amount_pre);
546546

547+
let query_staking_rewards_rate =
548+
vec!["staking-rewards-rate", "--node", &validator_one_rpc];
549+
let captured = CapturedOutput::of(|| {
550+
run(&node, Bin::Client, query_staking_rewards_rate)
551+
});
552+
assert_matches!(captured.result, Ok(_));
553+
let _res = captured
554+
.matches(r"Current annual staking rewards rate: 63.483")
555+
.expect("Test failed");
556+
547557
Ok(())
548558
}
549559

0 commit comments

Comments
 (0)