HOW IT WORKS

The mechanic

1 · Pick a slot

Minnow v1.1 has 100 slots from 0.001 Ξ → 0.1 Ξ (step 0.001 Ξ). The amount you send IS your guess. Each slot can only be claimed once · first come, first served.

Buy via enter(roundId, slotIndex) or batch-enter up to 10 slots in one tx with enterBatch(roundId, slotIndex[]).

2 · Seed the pool

Every round starts in a seed phase. Entries accumulate. When the cumulative pot crosses the round's seed threshold · set by the creator from 0.015 Ξ to 1 Ξ (defaults to 0.05 Ξ) · the pot is considered seeded and the game IMMEDIATELY transitions to active phase. The seed cap is a 6-hour ceiling, not a fixed duration · seed can end in minutes if entries pile in fast.

If the seed cap passes without crossing the threshold, every entry is refunded (gas is lost, but ETH comes back).

Seeders capture a permanent slice of the pot. If you contribute during seed phase, you own a fixed % of the seed dividend pool · which pays out against the FINAL pot, not the pot at threshold.

3 · Active phase

Once the threshold is hit, a 6-hour sliding timer starts. Every new entry resets it. The active phase has a hard 12-hour ceiling · after that, the game enters Final Countdown.

If all slots fill at any point, the round IMMEDIATELY jumps to ready-to-settle and skips Final Countdown entirely.

4 · Final countdown (no resets)

A fixed 6-hour countdown that cannot be reset. New entries are still accepted, but the clock keeps ticking. Last chance to lock your slot.

5 · Random target reveals · dual-oracle VRF

When the timer hits zero (or all slots fill, whichever comes first), the contract fires two simultaneous randomness requests · Chainlink VRF v2.5 (ETH-native, no LINK) and Supra dVRF V3. Whichever callback arrives first wins; the second is a graceful no-op. The contract self-funds both subscriptions (1% of every pot tops them up).

Settlement runs in three phases:

  • settle(roundId) · permissionless. Fires both oracle requests. No keeper bounty for this step itself.
  • Oracle callback (first to arrive) · stores the random word.
  • finalizeSettlement(roundId) · permissionless. Ranks the top 3 closest slots, credits pull-payment payouts, sends the $BURN rake. Earns the keeper bounty (capped at 0.01 Ξ).

If both callbacks stall, anyone can call requestRandomnessAgain(roundId) after 30 min for a 0.0001 Ξ bounty. Capped at 3 attempts per oracle. If everything fails, the round is recovered via the 72-hour emergency refund path · no honest player loses their entry.

6 · Withdraw (pull-payment)

Winners, seed dividend recipients, and (in refund cases) original claimers all use pull-payment withdrawal: withdrawPayout(roundId), withdrawSeedDividend(roundId), withdrawRefund(roundId, slotIndex) (one call per refunded slot). You call a function, you get your ETH. No one can block you. No one can extract on your behalf.