Refactor to a lazy rewarding system (#1127)
* Remove eager operator and delegator rewarding * Add mixnodes snapshoting * Add Intervals map, getter and setter * Refactor reward params * Refactor MixnodeToReward * Persist node reward params and results on chain * Update cw-storage-plus to 0.12.1 * Refactor delegation storage * Compound delegator reward command * Compound delegator reward command * Add defered delegate and undelegate * Compound on behalf command * Scale calculations to epoch * Rename interval -> epoch where practical * Store epochs on chain * Cleanup first pass * Adapt reporting to lazy rewarding * make clippy --all
This commit is contained in:
@@ -7,6 +7,7 @@ use crate::node_status_api::models::{
|
||||
};
|
||||
use crate::storage::ValidatorApiStorage;
|
||||
use crate::ValidatorCache;
|
||||
use mixnet_contract_common::reward_params::{NodeRewardParams, RewardParams};
|
||||
use rocket::http::Status;
|
||||
use rocket::serde::json::Json;
|
||||
use rocket::State;
|
||||
@@ -115,7 +116,7 @@ pub(crate) async fn get_mixnode_reward_estimation(
|
||||
) -> Result<Json<RewardEstimationResponse>, ErrorResponse> {
|
||||
let (bond, status) = cache.mixnode_details(&identity).await;
|
||||
if let Some(bond) = bond {
|
||||
let interval_reward_params = cache.interval_reward_params().await;
|
||||
let interval_reward_params = cache.epoch_reward_params().await;
|
||||
let as_at = interval_reward_params.timestamp();
|
||||
let interval_reward_params = interval_reward_params.into_inner();
|
||||
|
||||
@@ -128,8 +129,9 @@ pub(crate) async fn get_mixnode_reward_estimation(
|
||||
)
|
||||
.await
|
||||
.map_err(|err| ErrorResponse::new(err.to_string(), Status::NotFound))?;
|
||||
|
||||
match interval_reward_params.estimate_reward(&bond, uptime.u8(), status.is_active()) {
|
||||
let node_reward_params = NodeRewardParams::new(0, uptime.u8() as u128, status.is_active());
|
||||
let reward_params = RewardParams::new(interval_reward_params, node_reward_params);
|
||||
match bond.estimate_reward(&reward_params) {
|
||||
Ok((
|
||||
estimated_total_node_reward,
|
||||
estimated_operator_reward,
|
||||
@@ -166,13 +168,13 @@ pub(crate) async fn get_mixnode_stake_saturation(
|
||||
) -> Result<Json<StakeSaturationResponse>, ErrorResponse> {
|
||||
let (bond, _) = cache.mixnode_details(&identity).await;
|
||||
if let Some(bond) = bond {
|
||||
let interval_reward_params = cache.interval_reward_params().await;
|
||||
let interval_reward_params = cache.epoch_reward_params().await;
|
||||
let as_at = interval_reward_params.timestamp();
|
||||
let interval_reward_params = interval_reward_params.into_inner();
|
||||
|
||||
let saturation = bond.stake_saturation(
|
||||
interval_reward_params.circulating_supply,
|
||||
interval_reward_params.rewarded_set_size,
|
||||
interval_reward_params.circulating_supply(),
|
||||
interval_reward_params.rewarded_set_size() as u32,
|
||||
);
|
||||
|
||||
Ok(Json(StakeSaturationResponse {
|
||||
@@ -200,9 +202,9 @@ pub(crate) async fn get_mixnode_inclusion_probability(
|
||||
.fold(0u128, |acc, x| acc + x.total_bond().unwrap_or_default())
|
||||
as f64;
|
||||
|
||||
let rewarding_params = cache.interval_reward_params().await.into_inner();
|
||||
let rewarded_set_size = rewarding_params.rewarded_set_size as f64;
|
||||
let active_set_size = rewarding_params.active_set_size as f64;
|
||||
let rewarding_params = cache.epoch_reward_params().await.into_inner();
|
||||
let rewarded_set_size = rewarding_params.rewarded_set_size() as f64;
|
||||
let active_set_size = rewarding_params.active_set_size() as f64;
|
||||
|
||||
let prob_one_draw =
|
||||
target_mixnode.total_bond().unwrap_or_default() as f64 / total_bonded_tokens;
|
||||
|
||||
Reference in New Issue
Block a user