Summary
pulse_token/src/lib.rs mint (lines ~88-114) has no supply ceiling. Every claim mints WIN_TOKENS (10 PULSE) or LOSE_TOKENS (2 PULSE), and every register_referral mints WELCOME_BONUS_TOKENS (1 PULSE). With no cap, total_supply grows without bound.
Additionally, leaderboard/src/lib.rs has two independent minting entry points with divergent semantics:
reward (market-trusted): increments won_bets/lost_bets
reward_bonus (referral-trusted): does NOT increment won_bets/lost_bets
This means total_bets (= won + lost) silently undercounts bonus-only activity and the same reward can flow through both paths with no reconciliation.
Impact
- Infinite inflation: PULSE has no hard cap; total supply is unbounded.
- Divergent accounting:
reward and reward_bonus track different state, making total_bets unreliable.
- No single authority controls the mint ceiling — both the market contract and the referral registry can mint.
Fix
- Enforce a
MAX_SUPPLY cap in mint, checked against total_supply.
- Unify
reward/reward_bonus into a single minting path with consistent bet-count accounting.
- Document and restrict the trusted minting authority.
Summary
pulse_token/src/lib.rsmint(lines ~88-114) has no supply ceiling. EveryclaimmintsWIN_TOKENS(10 PULSE) orLOSE_TOKENS(2 PULSE), and everyregister_referralmintsWELCOME_BONUS_TOKENS(1 PULSE). With no cap,total_supplygrows without bound.Additionally,
leaderboard/src/lib.rshas two independent minting entry points with divergent semantics:reward(market-trusted): incrementswon_bets/lost_betsreward_bonus(referral-trusted): does NOT incrementwon_bets/lost_betsThis means
total_bets(=won + lost) silently undercounts bonus-only activity and the same reward can flow through both paths with no reconciliation.Impact
rewardandreward_bonustrack different state, makingtotal_betsunreliable.Fix
MAX_SUPPLYcap inmint, checked againsttotal_supply.reward/reward_bonusinto a single minting path with consistent bet-count accounting.