← Back to the wheel

Every draft is provably fair.

The server cannot pick a winner and cannot bias the randomness. Here is how, and how to check it yourself with nothing but a hash function.

How a winner is chosen

  1. 1. Commit. Before a round closes the server generates a secret seed and publishes only its SHA-256 hash. That hash is the commitment, and it is on record before anyone knows the outcome.
  2. 2. Snapshot. When the clock hits zero, every wallet's balance becomes its draft weight. Liquidity vaults, the pack wallet, and any wallet holding more than 6% of the eligible supply are removed from the draw.
  3. 3. Public entropy. The blockhash of the first confirmed Solana slot at or after the close is the second input. Nobody running this site produces blocks, so nobody can steer it.
  4. 4. Draw. The draw number is SHA-256(seed + ":" + blockhash) read as an integer, modulo the total weight. Wallets are laid end to end in the snapshot order; the wallet whose segment contains that number wins.
  5. 5. Reveal. The seed is published with the result. Hash it: it matches the commitment. Recompute step 4: it lands on the same wallet.

Verify a draft yourself

Take any draw from /api/fairness and run:

const { createHash } = require("crypto");
const d = /* one entry from /api/fairness */;
const sha = (s) => createHash("sha256").update(s).digest("hex");

console.log(sha(d.seed) === d.commitment);                 // 1. the seed matches the published commitment
const r = BigInt("0x" + sha(d.seed + ":" + d.blockhash));   // 2. the draw number
let cursor = r % BigInt(d.totalWeightRaw);
let winner;
for (const h of d.snapshot) {                               // 3. walk the snapshot
  if (cursor < BigInt(h.weightRaw)) { winner = h.owner; break; }
  cursor -= BigInt(h.weightRaw);
}
console.log(winner === d.winner);                           // 4. same wallet the site announced

The blockhash for a slot can be checked on any Solana explorer. The snapshot hash lets you confirm the holder list was not edited after the fact.

Live commitments

Round 2761 · committed 7:39:57 PM

73415afb696eb8c4fc431641235e9add7451b414c899ec526e1200f96fa8921e

Round 2762 · committed 8:04:57 PM

df21dbb8a04f6a91afe47cac38eb7f7b7d36ff2646adaa86a89ab7629f94e060

Latest draw, fully revealed

Replay draft 2761 ↗ — the exact spin, the cards, and a one-click check that recomputes this proof in your browser.

Winner
7sXpmvN7A5LYGhHZik9CoyQCv44FqBzMd7FRiLWzmVjR
Commitment
73415afb696eb8c4fc431641235e9add7451b414c899ec526e1200f96fa8921e
Seed
13756ee5a6273fb8bd83c479333052a30fcbc1890db965fad7152197a140e838
Slot
467042673
Blockhash
EFkw4ZTMQXMpJX7MySDu2patEtpUpuWbnrnz1K5YNgYy
Draw number
044baf888358fae13f462c2df591a825d981ee65fc65b5933152b6728e6d1768
Total weight
43038512840982
Snapshot hash
6f66ac6f9cfa9ba318561e92cbc83af48c45743358fd58307717cab13d9d924f
Wallets in snapshot
89

Recent drafts

Card contents are chosen by Collector Crypt's on-chain VRF, independently verifiable on their side. Full data: /api/fairness.