Change reward_share and coinbase in block_data to PreciseNumber.

This commit is contained in:
FiveMovesAhead 2025-02-06 10:03:33 +08:00
parent 44d8b93e5d
commit e7cc3b4b86
2 changed files with 31 additions and 26 deletions

View File

@ -136,40 +136,44 @@ pub(crate) async fn update(cache: &mut AddBlockCache) {
let zero = PreciseNumber::from(0);
for (delegatee, opow_data) in active_opow_block_data.iter_mut() {
opow_data.reward = opow_data.influence * reward_pool;
opow_data.reward_share = active_players_state[delegatee]
.reward_share
.as_ref()
.map_or(config.deposits.default_reward_share, |x| x.value)
.clone();
opow_data.coinbase = active_players_state[delegatee]
.coinbase
.as_ref()
.map_or_else(
|| HashMap::from([(delegatee.clone(), 1.0)]),
|x| x.value.clone(),
);
if opow_data.reward == zero {
continue;
}
let shared_amount = if opow_data.delegated_weighted_deposit == zero {
zero.clone()
} else {
opow_data.reward * PreciseNumber::from_f64(opow_data.reward_share)
};
let coinbase_amount = opow_data.reward - shared_amount;
if opow_data.delegated_weighted_deposit > zero {
opow_data.reward_share = opow_data.reward
* PreciseNumber::from_f64(
active_players_state[delegatee]
.reward_share
.as_ref()
.map_or(config.deposits.default_reward_share, |x| x.value)
.clone(),
)
}
let coinbase_amount = opow_data.reward - opow_data.reward_share;
for (output, fraction) in opow_data.coinbase.iter() {
let player_data = active_players_block_data.get_mut(output).unwrap();
for (output, fraction) in active_players_state[delegatee]
.coinbase
.as_ref()
.map_or_else(
|| HashMap::from([(delegatee.clone(), 1.0)]),
|x| x.value.clone(),
)
.iter()
{
let fraction = PreciseNumber::from_f64(*fraction);
let amount = coinbase_amount * fraction;
opow_data.coinbase.insert(output.clone(), amount.clone());
let player_data = active_players_block_data.get_mut(output).unwrap();
*player_data
.reward_by_type
.entry(RewardType::Benchmarker)
.or_insert(zero.clone()) += coinbase_amount * fraction;
.or_insert(zero.clone()) += amount;
}
if shared_amount == zero {
if opow_data.reward_share == zero {
continue;
}
@ -179,8 +183,9 @@ pub(crate) async fn update(cache: &mut AddBlockCache) {
*player_data
.reward_by_type
.entry(RewardType::Delegator)
.or_insert(zero.clone()) += shared_amount * fraction * player_data.weighted_deposit
/ opow_data.delegated_weighted_deposit;
.or_insert(zero.clone()) +=
opow_data.reward_share * fraction * player_data.weighted_deposit
/ opow_data.delegated_weighted_deposit;
}
}
}

View File

@ -353,8 +353,8 @@ serializable_struct_with_getters! {
self_deposit: PreciseNumber,
delegated_weighted_deposit: PreciseNumber,
delegators: HashSet<String>,
reward_share: f64,
coinbase: HashMap<String, f64>,
reward_share: PreciseNumber,
coinbase: HashMap<String, PreciseNumber>,
imbalance: PreciseNumber,
influence: PreciseNumber,
reward: PreciseNumber,