From 6fe26d4e3eb97966a84b2a3386d9d31b72ca618f Mon Sep 17 00:00:00 2001 From: FiveMovesAhead Date: Fri, 5 Dec 2025 09:12:36 +0000 Subject: [PATCH] Calculate potential qualifiers. --- tig-benchmarker/common/structs.py | 1 + tig-protocol/src/contracts/opow.rs | 16 +++++++++++++++- tig-structs/src/core.rs | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) 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,