@@ -137,6 +137,7 @@ const DEFAULT_CLAIM_PERIOD_SECONDS: u64 = 90 * 24 * 60 * 60;
137137const GLOBAL_CLAIM_PERIOD_KEY : & str = "claim_timeout" ;
138138const MARKET_CLAIM_PERIODS_KEY : & str = "claim_overrides" ;
139139const TREASURY_STORAGE_KEY : & str = "Treasury" ;
140+ const GLOBAL_MIN_POOL_SIZE_KEY : & str = "global_min_pool" ;
140141
141142#[ contractimpl]
142143impl PredictifyHybrid {
@@ -3602,6 +3603,44 @@ impl PredictifyHybrid {
36023603 Ok ( ( ) )
36033604 }
36043605
3606+ /// Set global minimum pool size for resolution (admin only).
3607+ ///
3608+ /// Applies to all markets where `min_pool_size` is `None`.
3609+ /// A value of 0 disables any global minimum.
3610+ pub fn set_global_min_pool_size (
3611+ env : Env ,
3612+ admin : Address ,
3613+ min_pool : i128 ,
3614+ ) -> Result < ( ) , Error > {
3615+ admin. require_auth ( ) ;
3616+ let stored_admin: Address = env
3617+ . storage ( )
3618+ . persistent ( )
3619+ . get ( & Symbol :: new ( & env, "Admin" ) )
3620+ . unwrap_or_else ( || panic_with_error ! ( env, Error :: AdminNotSet ) ) ;
3621+ if admin != stored_admin {
3622+ return Err ( Error :: Unauthorized ) ;
3623+ }
3624+
3625+ if min_pool < 0 {
3626+ return Err ( Error :: InvalidInput ) ;
3627+ }
3628+
3629+ env. storage ( )
3630+ . persistent ( )
3631+ . set ( & Symbol :: new ( & env, GLOBAL_MIN_POOL_SIZE_KEY ) , & min_pool) ;
3632+ Ok ( ( ) )
3633+ }
3634+
3635+ /// Get global minimum pool size for resolution.
3636+ /// Returns 0 when not configured.
3637+ pub fn get_global_min_pool_size ( env : Env ) -> i128 {
3638+ env. storage ( )
3639+ . persistent ( )
3640+ . get ( & Symbol :: new ( & env, GLOBAL_MIN_POOL_SIZE_KEY ) )
3641+ . unwrap_or ( 0 )
3642+ }
3643+
36053644 /// Set per-event minimum and maximum bet limits (admin only).
36063645 /// Overrides global limits for the given market.
36073646 pub fn set_event_bet_limits (
@@ -4584,8 +4623,13 @@ impl PredictifyHybrid {
45844623 return Err ( Error :: MarketClosed ) ;
45854624 }
45864625
4587- // Verify min_pool_size is set and not met
4588- let min_pool = market. min_pool_size . unwrap_or ( 0 ) ;
4626+ // Verify effective min pool is set and not met (per-market override, else global)
4627+ let global_min: i128 = env
4628+ . storage ( )
4629+ . persistent ( )
4630+ . get ( & Symbol :: new ( & env, GLOBAL_MIN_POOL_SIZE_KEY ) )
4631+ . unwrap_or ( 0 ) ;
4632+ let min_pool = market. min_pool_size . unwrap_or ( global_min) ;
45894633 if min_pool <= 0 || market. total_staked >= min_pool {
45904634 return Err ( Error :: InvalidState ) ;
45914635 }
0 commit comments