RyuLand Raffles
Drawn

test

test

Prizes

  • Showcase: Murders at Karlov Manor · Rainbow Foil

    Showcase: Murders at Karlov Manor · Rainbow Foil

    × 1

How it works

  • Open to everyone. Free to enter.
  • One entry per person (per email address).
  • One entry per shipping address.
  • Switzerland only: shipping within Switzerland, or pick-up at Kanalgasse 28, 2502 Biel. You choose before entering.
  • You'll get an email: your entry only counts once you click the link in it.
  • Winning gives you the right to buy the prize at the shop price. You get an order to pay; unpaid within 48 hours, the next ticket moves up.
  • You can win at most one prize.
  • Results are provisional until we've checked each winner by hand. Winners hear from us by email; nothing is sent during the draw.
  • Showcase: Murders at Karlov Manor · Rainbow Foil

    Showcase: Murders at Karlov Manor · Rainbow Foil

    1. T-0001 J***l R.
Every draw, in order (1)

Re-runs and voided wins stay in this log for good, with the reason.

  1. Showcase: Murders at Karlov Manor · Rainbow Foil #1 · run 1 (round 32916512) → T-0001 J***l R.

Fairness proof

Check it yourself
Our sealed secret (SHA-256 fingerprint)
164045a7754b1f1cc7cfa29a2facca63ef7b38843b9e927c9d641d3dda86e686Published when the raffle opened, Fri, 9 October 2026 at 15:28. The secret itself is revealed after the review.
drand beacon round
Round 32916512 · Fri, 9 October 2026 at 15:35:00Entry closes Fri, 9 October 2026 at 15:30:00; the beacon round comes out at Fri, 9 October 2026 at 15:35:00, at least 5 minutes later.Its random number doesn't exist yet while people enter, nor when we freeze the ticket list.
Ticket list fingerprint
b9f7bdb92a6b80d79d43eccf981c985a6bd0ddd7236fb8172d6aa67339daab831 tickets, frozen Fri, 9 October 2026 at 15:31:33. Frozen before the beacon round.
Show the ticket list (1)
T-0001 J***l R.
The secret, revealed
b1ff8aaddbfa32f9c88273e66d83135b929b0693738ccf0acc2a558cbcc7d519Revealed Fri, 9 October 2026 at 15:52:26. sha256 of it is the fingerprint above.
drand number of the beacon round
4c2393df2f8eebaa296ca902d299d0887cf0edef645bc0611ad5a1278b0cba3a
Draw seed
9147bf66f5e2e9dd1476a0dc6e76fef2e0fdf536d831f45bc4e3edac1fef6572

How we keep it fair

We use drand, a public random number service run by the League of Entropy (Cloudflare, universities and others). Every 3 seconds it publishes a new random number, called a round. Nobody can know a round's number before its time — not even us.

  1. Raffle opens: we roll a secret number and publish its fingerprint. Like a sealed envelope — you see the envelope, not what's inside, and we can't swap it later.
  2. Entry closes: we freeze the masked ticket list and publish it with its fingerprint and the exact time. Five minutes later drand publishes the announced round's number. The list must be frozen before that round — if it isn't, we announce a new, later round here first.
  3. Mix: secret + drand number + ticket-list fingerprint are mixed into one draw seed.
  4. Each prize: the seed becomes a big number; the remainder when dividing by the number of tickets still in is the winning position in the list. Afterwards we reveal the secret so anyone can redo it.

Why nobody can cheat, us included

  • The secret is sealed before anyone enters (the fingerprint proves it).
  • The drand number doesn't exist yet while people can enter, nor when the ticket list is frozen (the times are published).
  • The ticket list is sealed too: adding fake tickets changes the result unpredictably, so it can't steer a winner.
  • Re-running a prize needs a new drand round that is announced here before it exists, and leaves out everyone who has already won — so a re-run can't be used to pick someone.
The maths, for the curious
commitment = sha256(serverSeed)
entryHash  = sha256(ticketLines.join("\n"))
beaconRound = first drand round at or after entryClose + 5 min
frozenAt   < time(beaconRound)   (else: a new, later round is announced)
seed       = HMAC-SHA256(serverSeed, drandRandomness + ":" + entryHash)
for each prize unit (prizes in order, units 1..n):
  unitKey = prizeId + ":" + unit + ":" + run
  attempt = 0, 1, …
    r = HMAC-SHA256(seed, unitKey + ":" + attempt)  as a 256-bit number
    accept if r < floor(2^256 / n) · n           (n = tickets still in)
  winner = tickets[r mod n]
re-run of a unit: new announced round, seed from its randomness,
  every ticket that has won any earlier run is out

drand quicknet (chain 52db9ba70e0c…). If the big number lands in the tiny leftover range above the last full multiple of the ticket count, it is hashed again — that keeps every ticket at exactly 1 in n.