DEMONICS
nothing up our sleeve

Proof.

Every night at 00:20 UTC, 10% of the pool wins a spot and leaves it. Everyone else stays in for the next night. Each round is decided by a random seed we commit to before it runs: the hash goes up a day early, the seed itself comes out once the round is drawn, and the pool it was drawn from is frozen and published. Anyone can replay any round and confirm it produced the winners we published.

Spots won0 / 6,000
In the pool109
Tickets in the pot378
Rounds drawn0

The next round

round 1 · sha256(seed)
b446a3ca6bf5aff2a341184dc81ff855de37475447c8cfcb160ca4cf17e178d3

Committed Sat, 26 Sep 2026 01:19:05 GMT. It draws at 00:20 UTC.

How to check a round

Each entry in the round's pool gets a key of u ^ (1 / tickets), where u comes from HMAC-SHA256(seed, entryId). The highest ceil(pool × 10%) keys win, capped by the spots left. More tickets pushes your key closer to 1, so the weighting is exact, and because every input is published, the result is reproducible.

// pool: the round's frozen entries, published below
const key = (seed, id, tickets) => {
  const mac = crypto.createHmac("sha256", seed).update(id).digest();
  const hi = mac.readUInt32BE(0) & 0xfffff;   // 20 bits
  const lo = mac.readUInt32BE(4);              // 32 bits
  const u  = (hi * 2 ** 32 + lo + 1) / (2 ** 52 + 1);
  return Math.pow(u, 1 / Math.max(1, tickets));
};

const n = Math.min(SPOTS_LEFT, Math.max(1, Math.ceil(pool.length * 1000 / 10000)));
pool
  .map(e => ({ ...e, k: key(SEED, e.id, e.tickets) }))
  .sort((a, b) => b.k - a.k || a.id.localeCompare(b.id))
  .slice(0, n)
  .map(e => e.id);

Same code the draw runs, from src/lib/draw.ts. Ties break on entry id so the order is fully determined.

← back to hell