Contracts: Independent podium timers (Streak, Time Booster, WarBow) + epoch settlement
Context
Independent podium timers and per-podium epoch settlement. Parent epic: #238 (closed).
Relevant files
contracts/src/TimeArena.solcontracts/src/libraries/TimeMath.sol- Per-podium score tracking (adapt from
TimeCurve.sol_updateTopThreeMonotonic, streak/booster logic)
Acceptance criteria
- Four deadline storage slots + four epoch counters
- Each buy extends all four podium timers with podium-specific extension/reset params (see spec issue)
- On podium epoch end (deadline passed + qualifying buy or permissionless
rollPodiumEpoch(category)):- Snapshot top-3 (or last-3 for Last Buy)
- Pay winners from that podium's DOUB pool (4:2:1 within category)
- Roll seed vault → active pool
- Increment podium epoch; reset live scores for that podium only
- Last Buy reset additionally triggers global Last Buy epoch (CHARM/CRED)
Verification checklist
- Forge: Streak/TimeBooster/WarBow timers diverge from Last Buy after different buy patterns
- Epoch counters independent (assert unequal after time skew)