diff --git a/tig-benchmarker/common/structs.py b/tig-benchmarker/common/structs.py index ebb9bbd7..894f852d 100644 --- a/tig-benchmarker/common/structs.py +++ b/tig-benchmarker/common/structs.py @@ -196,6 +196,7 @@ class Challenge(FromDict): @dataclass class OPoWBlockData(FromDict): num_qualifiers_by_challenge_by_track: Dict[str, Dict[str, int]] + num_potential_qualifiers_by_challenge_by_track: Dict[str, Dict[str, int]] cutoff: int weighted_delegated_deposit: PreciseNumber weighted_self_deposit: PreciseNumber diff --git a/tig-protocol/src/contracts/opow.rs b/tig-protocol/src/contracts/opow.rs index 820a0017..33ef7a3c 100644 --- a/tig-protocol/src/contracts/opow.rs +++ b/tig-protocol/src/contracts/opow.rs @@ -151,7 +151,8 @@ pub(crate) async fn update(cache: &mut AddBlockCache) { HashMap::>>::new(); let mut num_qualifiers_by_player_by_track = HashMap::>::new(); - let mut num_qualifiers_by_player = HashMap::::new(); + let mut num_potential_qualifiers_by_player_by_track = + HashMap::>::new(); let mut max_qualifiers_by_player = max_qualifiers_by_player.clone(); let mut track_rank = bundles_by_track @@ -166,6 +167,11 @@ pub(crate) async fn update(cache: &mut AddBlockCache) { if let Some(idx) = (*rank..bundles_by_track[track_id].len()).find(|&idx| { let player_id = &bundles_by_track[track_id][idx].0.player_id; if max_qualifiers_by_player[player_id] == 0 { + *num_potential_qualifiers_by_player_by_track + .entry(player_id.clone()) + .or_default() + .entry(track_id.clone()) + .or_default() += 1; false } else { *max_qualifiers_by_player.get_mut(player_id).unwrap() -= 1; @@ -218,6 +224,14 @@ pub(crate) async fn update(cache: &mut AddBlockCache) { .num_qualifiers_by_challenge_by_track .insert(challenge_id.clone(), num_qualifiers_by_track); } + for (player_id, num_potential_qualifiers_by_track) in + num_potential_qualifiers_by_player_by_track + { + let opow_data = active_opow_block_data.get_mut(&player_id).unwrap(); + opow_data + .num_potential_qualifiers_by_challenge_by_track + .insert(challenge_id.clone(), num_potential_qualifiers_by_track); + } for (algorithm_id, num_qualifiers_by_track_by_player) in num_qualifiers_by_code_by_track_by_player { diff --git a/tig-structs/src/core.rs b/tig-structs/src/core.rs index fc035fee..8c223680 100644 --- a/tig-structs/src/core.rs +++ b/tig-structs/src/core.rs @@ -351,6 +351,7 @@ serializable_struct_with_getters! { serializable_struct_with_getters! { OPoWBlockData { num_qualifiers_by_challenge_by_track: HashMap>, + num_potential_qualifiers_by_challenge_by_track: HashMap>, cutoff: u64, weighted_self_deposit: PreciseNumber, weighted_delegated_deposit: PreciseNumber,