{
  "version": 1,
  "generatedAt": "2026-10-09T14:41:42.734Z",
  "raffle": {
    "slug": "test",
    "title": "test",
    "status": "reviewed",
    "url": "https://raffle.ryu.land/raffle/test",
    "verifyUrl": "https://raffle.ryu.land/raffle/test/verify",
    "proofUrl": "https://raffle.ryu.land/api/raffle/proof/test"
  },
  "algorithm": {
    "drandChainHash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
    "drandGenesis": 1692803367,
    "drandPeriodSeconds": 3,
    "beaconDelaySeconds": 300,
    "announceLeadSeconds": 120,
    "summary": [
      "commitment  = sha256hex(serverSeed)",
      "beaconRound = first drand quicknet round with time >= closesAt + 5 min (or a later round announced before it existed, see beaconHistory)",
      "frozenAt    < time(beaconRound)",
      "entryHash   = sha256hex(ticketLines.join(\"\\n\"))",
      "randomness  = sha256hex(drand signature bytes)",
      "seed        = HMAC-SHA256(key = utf8(serverSeed), msg = utf8(randomness + \":\" + entryHash)), hex",
      "units in order: prizes by position, units 1..quantity; unitKey = prizeId:unit:run",
      "pool (run 1): drop_all = tickets that have not won an earlier unit; drop_prize = not won this prize; stay = everyone",
      "pool (re-run): every ticket that has not won any earlier run (voided or not), in log order; seed from the re-run's own round",
      "attempt = 0,1,...: r = BigInt(HMAC-SHA256(key = utf8(seed), msg = unitKey + \":\" + attempt)); accept r < floor(2^256 / n) * n",
      "winner = pool[r mod n] (pool keeps ticket-list order)"
    ]
  },
  "winnerMode": "drop_all",
  "closesAt": "2026-10-09T13:30:00+00:00",
  "commitment": "164045a7754b1f1cc7cfa29a2facca63ef7b38843b9e927c9d641d3dda86e686",
  "committedAt": "2026-10-09T13:28:03.768067+00:00",
  "serverSeed": "b1ff8aaddbfa32f9c88273e66d83135b929b0693738ccf0acc2a558cbcc7d519",
  "seedPublishedAt": "2026-10-09T13:52:26.914+00:00",
  "beacon": {
    "round": 32916512,
    "time": "2026-10-09T13:35:00+00:00",
    "announcedAt": "2026-10-09T13:28:03.748+00:00",
    "urls": [
      "https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971/public/32916512",
      "https://api2.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971/public/32916512",
      "https://api3.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971/public/32916512"
    ],
    "drand": {
      "round": 32916512,
      "signature": "862209022dd37be1b4b9c9d374a2c2e5ee0e946bcc9c3c960d8fee40a63a4390606ac0b13691c7238c9a98de5d7c356d",
      "randomness": "4c2393df2f8eebaa296ca902d299d0887cf0edef645bc0611ad5a1278b0cba3a"
    }
  },
  "beaconHistory": [],
  "ticketList": {
    "frozenAt": "2026-10-09T13:31:33.531+00:00",
    "entryHash": "b9f7bdb92a6b80d79d43eccf981c985a6bd0ddd7236fb8172d6aa67339daab83",
    "count": 1,
    "lines": [
      "T-0001 J***l R."
    ]
  },
  "drawSeed": "9147bf66f5e2e9dd1476a0dc6e76fef2e0fdf536d831f45bc4e3edac1fef6572",
  "prizes": [
    {
      "position": 0,
      "id": "6842256f-26d9-4db0-b730-242a102bdb58",
      "title": "Showcase: Murders at Karlov Manor · Rainbow Foil",
      "quantity": 1
    }
  ],
  "runs": [
    {
      "sequence": 1,
      "prizeId": "6842256f-26d9-4db0-b730-242a102bdb58",
      "unit": 1,
      "run": 1,
      "unitKey": "6842256f-26d9-4db0-b730-242a102bdb58:1:1",
      "beaconRound": 32916512,
      "roundTime": "2026-10-09T13:35:00.000Z",
      "announcedAt": "2026-10-09T13:28:03.775+00:00",
      "drand": null,
      "seed": "9147bf66f5e2e9dd1476a0dc6e76fef2e0fdf536d831f45bc4e3edac1fef6572",
      "poolSize": 1,
      "poolIndex": 0,
      "attempts": 1,
      "winner": "T-0001 J***l R.",
      "status": "won",
      "voidedReason": null,
      "drawnAt": "2026-10-09T13:35:38.779+00:00"
    }
  ]
}