Summary
None of the four contracts (prediction_market, pulse_token, referral_registry, leaderboard) implement an emergency pause or circuit-breaker. If a vulnerability is discovered or a dependency is compromised, there is no way to halt risk-creating operations until a code fix is deployed.
Impact
- During an active exploit, new bets, mints, and referrals continue to flow in, amplifying losses.
- Users cannot exit safely —
cancel_refund and claim may depend on compromised state.
- The only mitigation is an upgrade, which itself requires an admin key (see issue: arbitrary WASM replacement).
Fix
- Add a
Pausable trait to every contract with a set_paused(bool) admin entry point.
- Block all state-mutating entry points while paused:
place_bet, create_market, resolve_market, cancel_market, mint, transfer, burn, register_referral, credit.
- Keep read-only and recovery paths open:
balance, total_supply, get_payout, claim (so users can still exit).
- Emit a
Paused / Unpaused event for off-chain monitoring.
Summary
None of the four contracts (prediction_market, pulse_token, referral_registry, leaderboard) implement an emergency pause or circuit-breaker. If a vulnerability is discovered or a dependency is compromised, there is no way to halt risk-creating operations until a code fix is deployed.
Impact
cancel_refundandclaimmay depend on compromised state.Fix
Pausabletrait to every contract with aset_paused(bool)admin entry point.place_bet,create_market,resolve_market,cancel_market,mint,transfer,burn,register_referral,credit.balance,total_supply,get_payout,claim(so users can still exit).Paused/Unpausedevent for off-chain monitoring.