Verify a draw
Recompute both winners from public data.
Every draw publishes a snapshot file with the full eligible-holder set and the drand round. You can re-derive both winners yourself.
import json, hashlib, urllib.request
snap = json.load(open("draw-<timestamp>.json"))
# 1. Independently fetch the beacon for the draw's round.
url = f"https://api.drand.sh/{snap['drand']['chain']}/public/{snap['drand']['round']}"
beacon = json.load(urllib.request.urlopen(url))
assert beacon["randomness"] == snap["drand"]["randomness"] # (also verify its BLS signature)
rnd = snap["drand"]["randomness"]
holders = sorted(snap["holders"], key=lambda h: h["a"])
total = sum(int(h["e"]) for h in holders)
def winner_for(k):
acc = 0
for h in holders:
acc += int(h["e"])
if k < acc:
return h["a"]
# 2. Fee winner and ticket winner from the same randomness.
k_fee = int(rnd, 16) % total
k_token = int(hashlib.sha256(("token:" + rnd).encode()).hexdigest(), 16) % total
print("fee winner: ", winner_for(k_fee))
print("ticket winner:", winner_for(k_token))
# 3. Compare with the announced winners and the payout transactions.If a recomputed winner ever differed from the announced one, the proof would be public and permanent. The snapshot derives from on-chain balances, checkable against any node or explorer, and the randomness is BLS-verified against the pinned drand public key both on our side and in the check above.
Public API
| Endpoint | Returns |
|---|---|
GET /api/tokenomics | Live supply, prize float, fee accrual, next prizes, wallets, totals |
GET /api/draws?limit=N | Draw history: both winners, prizes, payout tx hashes, drand round |

