NateRich.net Docs Research Software Worlds

The math

Generated

Every 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)
potP = R + d
EV per ticketEV = P / n
edge vs. priceedge = (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 winnersg = 1 for n < 100,  g = 2 for 100 ≤ n < 1000,  g = 3 for n ≥ 1000
Second-decile winnerss = ⌊ n / 10 ⌋
Top-decile winnerst = s when n mod 10 ≥ 5, otherwise t = s − g
Total winnersW = g + t + s

Tier shares

The pool splits 20% / 50% / 30% across Grand / Top / Second, evenly within each leg:

Grand shareP · 0.20 / g
Top-decile shareP · 0.50 / t
Second-decile shareP · 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.