The math
GeneratedEvery panel in the Quintile Simulator is one of the formulas below. The contract runs the same equations in Solidity; the simulator is a faithful JS port, and nothing here needs a wallet.
Pot and expected value
Let n be tickets sold, p the ticket price, d donations (after the cap, with overflow d' rolling forward), and f = 0.01 the protocol fee.
| ticket revenue (net of fee) | R = n · p · (1 − f) |
| pot | P = R + d |
| EV per ticket | EV = P / n |
| edge vs. price | edge = (EV − p) / p |
Each ticket has an exactly equal share of the pot in expectation — the tiers redistribute the same total. EV is what a single ticket is worth on average; edge is how that compares to the price paid.
Positive-EV rounds (EVL)
A round is positive-EV when donations more than cover the 1% fee skimmed from ticket spend. Concretely:
positive_EV ↔ d · 99 > Rgross, where Rgross = n · p
Equivalently, EV > p. When that flips, the round is eligible to mint the EVL credential to participants.
Tier counts
About one ticket in five wins. The contract assigns three legs deterministically from n:
| Grand winners | g = 1 for n < 100, g = 2 for 100 ≤ n < 1000, g = 3 for n ≥ 1000 |
| Second-decile winners | s = ⌊ n / 10 ⌋ |
| Top-decile winners | t = s when n mod 10 ≥ 5, otherwise t = s − g |
| Total winners | W = g + t + s |
Tier shares
The pool splits 20% / 50% / 30% across Grand / Top / Second, evenly within each leg:
| Grand share | P · 0.20 / g |
| Top-decile share | P · 0.50 / t |
| Second-decile share | P · 0.30 / s |
Per-ticket value is therefore Grand » Top > Second. Dust (tiny rounding remainders) rolls into the next round — see Rules > Prize Tiers.
Your odds with k tickets
Winners are drawn uniformly without replacement, so the chance that you hold at least one winning ticket given you hold k out of n is:
P(win ≥1) = 1 − ∏i=0..W−1 (n − k − i) / (n − i)
Expected winning tickets are W · k / n; expected payout is k · EV (by symmetry); expected net is payout − cost.
Compression curve
Let b(P) be the deadline distance in blocks at pot P. With block constants BLOCK_WEEK = 50400, BLOCK_HOUR = 300, BLOCK_MIN = 5, and curve knees Pmin = 1, Pknee = 21, Pcap = 42 (canonical Ether scale):
b(P) = BLOCK_WEEK for P < Pmin
b(P) = BLOCK_WEEK − (BLOCK_WEEK − BLOCK_HOUR) · (P − Pmin) / (Pknee − Pmin) for Pmin ≤ P ≤ Pknee (linear leg)
b(P) = BLOCK_HOUR − (BLOCK_HOUR − BLOCK_MIN) · ((P − Pknee) / (Pcap − Pknee))2 for Pknee < P < Pcap (quadratic leg)
b(P) = BLOCK_MIN for P ≥ Pcap
Each game variant rescales (Pmin, Pknee, Pcap) proportionally with its donation cap. The prose explanation of the knee, cap and overflow is in Blocks & time.
For a shorter EV explanation, see Expected Value. Play a round: Quintile Simulator.