From a1d2134c3dfd72f7fc750fda395a2dceed4541df Mon Sep 17 00:00:00 2001 From: FiveMovesAhead Date: Mon, 17 Mar 2025 11:44:02 +0800 Subject: [PATCH] Require min solution ratio. --- tig-protocol/src/context.rs | 1 + tig-protocol/src/contracts/opow.rs | 15 +++++++++++++-- tig-structs/src/config.rs | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tig-protocol/src/context.rs b/tig-protocol/src/context.rs index 2dbfb3ee..6f706525 100644 --- a/tig-protocol/src/context.rs +++ b/tig-protocol/src/context.rs @@ -93,6 +93,7 @@ pub struct AddBlockCache { pub active_players_block_data: HashMap, pub active_opow_block_data: HashMap, pub active_challenges_block_data: HashMap, + pub active_challenges_prev_block_data: HashMap, pub active_algorithms_state: HashMap, pub active_algorithms_details: HashMap, pub active_algorithms_block_data: HashMap, diff --git a/tig-protocol/src/contracts/opow.rs b/tig-protocol/src/contracts/opow.rs index 70e41889..242c57fd 100644 --- a/tig-protocol/src/contracts/opow.rs +++ b/tig-protocol/src/contracts/opow.rs @@ -11,6 +11,7 @@ pub(crate) async fn update(cache: &mut AddBlockCache) { block_details, block_data, active_challenges_block_data, + active_challenges_prev_block_data, active_algorithms_state, active_algorithms_details, active_algorithms_block_data, @@ -136,7 +137,12 @@ pub(crate) async fn update(cache: &mut AddBlockCache) { let mut max_qualifiers_by_player = max_qualifiers_by_player.clone(); let mut curr_frontier_index = 0; let challenge_data = active_challenges_block_data.get_mut(challenge_id).unwrap(); - for (settings, &num_solutions, _) in solutions.iter() { + let prev_solution_ratio = active_challenges_prev_block_data + .get(challenge_id) + .map(|x| x.average_solution_ratio) + .unwrap_or_default(); + let min_solution_ratio = prev_solution_ratio * config.opow.min_solution_ratio_factor; + for (settings, &num_solutions, &num_nonces) in solutions.iter() { let BenchmarkSettings { player_id, algorithm_id, @@ -164,7 +170,12 @@ pub(crate) async fn update(cache: &mut AddBlockCache) { let algorithm_data = active_algorithms_block_data.get_mut(algorithm_id).unwrap(); let max_qualifiers = max_qualifiers_by_player.get(player_id).unwrap().clone(); - let num_qualifiers = num_solutions.min(max_qualifiers); + let solution_ratio = num_solutions as f64 / num_nonces as f64; + let num_qualifiers = if solution_ratio >= min_solution_ratio { + num_solutions.min(max_qualifiers) + } else { + 0 + }; max_qualifiers_by_player.insert(player_id.clone(), max_qualifiers - num_qualifiers); if num_qualifiers > 0 { diff --git a/tig-structs/src/config.rs b/tig-structs/src/config.rs index 81c7a362..719f3016 100644 --- a/tig-structs/src/config.rs +++ b/tig-structs/src/config.rs @@ -112,6 +112,7 @@ serializable_struct_with_getters! { deposit_to_cutoff_ratio: f64, max_coinbase_outputs: usize, coinbase_update_period: u32, + min_solution_ratio_factor: f64, } } serializable_struct_with_getters! {