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

EndpointReturns
GET /api/tokenomicsLive supply, prize float, fee accrual, next prizes, wallets, totals
GET /api/draws?limit=NDraw history: both winners, prizes, payout tx hashes, drand round

On this page