NodeJackPot
// PROVABLY-FAIR ELIMINATION RAFFLE · CHAINLINK VRF 2.5 · VYPER 0.4.3
A provably-fair, on-chain elimination raffle. Players buy tickets at quadratic cost, Chainlink VRF 2.5 eliminates participants round by round until three survivors split the pot 70/20/10. Pull-payment payouts, 24-hour vesting, reentrancy guards, and rolling jackpots — designed so neither the operator nor any participant can predict or influence the outcome.
Vyper 0.4.3
Chainlink VRF 2.5
Moccasin
Snekmate
Hypothesis
Pull Payments
45+
Tests
100%
Coverage
3
Survivors / Round
24h
Payout Vesting
Mechanism
NodeJackPot is a single-round, multi-elimination raffle where ticket cost grows quadratically with the player's position in the queue. Each round, Chainlink VRF 2.5 supplies fresh randomness used to eliminate participants in batches until exactly three survivors remain.
- Quadratic pricing — Late buyers pay exponentially more; early commitment is rewarded
- VRF elimination — Each round's seed is committed before participation closes; no one (not even the contract owner) can predict who survives
- 70/20/10 split — Final three survivors take the pot in that ratio
- Rolling jackpot — Unclaimed prizes roll into the next round
Security Design
Every external surface assumes adversarial callers. State mutations follow strict checks-effects-interactions; payouts use the pull-payment pattern to isolate transfer failures from contract state.
- Reentrancy Guard — Snekmate
reentrancy_guard on every state-mutating entry point
- Overflow Protection — Vyper 0.4 checked arithmetic; explicit bounds on ticket counts
- VRF Verification — Callback-only state transitions; raw randomness is hashed before use
- Pull Payment Pattern — Winners withdraw their share; the contract never
sends on settlement
- Access Control — Owner role limited to round configuration; cannot touch funds or VRF seed
- Stateful Fuzzing — Hypothesis invariants verify pot conservation across arbitrary action sequences
Test Coverage
- Unit tests — Ticket pricing curve, queue management, round state transitions
- VRF integration — Mocked Chainlink coordinator with fuzzed seeds
- Payout flow — Pull-withdraw, vesting timer, rolling jackpot accounting
- Invariants —
sum(claims) + contract_balance == sum(deposits) across arbitrary sequences
Key Features
- Provably-fair via Chainlink VRF 2.5 — verifiable on-chain randomness
- Quadratic ticket pricing rewards early entry
- Pull-payment payouts with 24-hour vesting window
- Rolling jackpot — unclaimed prizes carry forward
- Zero owner access to funds or randomness