← End of Summer Giveaway

Draw proof

A fingerprint of the seed was published before entries closed, and the seed itself after the draw. Anyone can repeat the draw from the numbers on this page.

  1. Seed commitment publishedsha256: ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b
  2. Entries frozen63 entries · 55 tickets · 5 excluded · ledger sha256: 84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2The Discord message carrying this hash
  3. Seed revealedseed: 6c6f58b9884b4366de36614edf8abeb6daf20d3887e862adcf356d860639e9bd
  4. Commitment matches revealed seedsha256(seed) == commitment
  5. Winners drawn and pinged5 winners · 3 pinged in Discord
The ladder
3 prizes were passed to the next backup on the ladder: not marked received by the collect-by date.
RankWinnerPrize
  1. #1Weisepassed to 𝑺𝒂𝒊𝒛2009💙💙, next on the backup ladder10€ GIFT CARD27 · 332ddbd1…d2e9
  2. #2Sponkpassed to ARULPLAYZ, next on the backup ladder10€ GIFT CARD41 · 2143209f…5807
  3. #3!!!佑passed to NiaaazL, next on the backup ladder10€ GIFT CARD13 · e9742480…44c2
  4. #4ARESnot marked received, no backup was left10€ GIFT CARD36 · a71693c5…a1d8
Show all 5 ranks
  1. #5DevilBadAzznot marked received, no backup was left10€ GIFT CARD12 · f6ff6916…e6fc
Check it yourself

Hash the revealed seed and compare it with the commitment. Then run the ladder with the same two hashes: you should get the ranks above.

Show the maths

In a terminal

It needs Node and nothing else. The seed is used exactly as printed, as text; each winning ticket is taken from the digest by rejection sampling over the tickets still in play.

# 1. The seed we revealed is the seed we committed to.
node -e 'console.log(require("crypto").createHash("sha256").update("6c6f58b9884b4366de36614edf8abeb6daf20d3887e862adcf356d860639e9bd").digest("hex"))'
#    expect: ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b

# 2. Recompute the ladder. Each step's message is fixed by the two published
#    hashes and the step number; nothing else feeds into it.
node -e '
const { createHmac } = require("crypto");
const seed = "6c6f58b9884b4366de36614edf8abeb6daf20d3887e862adcf356d860639e9bd";
const msg  = (k) => ["5gw-draw-v1", "9", "ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b", "84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2", k].join("|");
for (let k = 0; k < 10; k++) {
  console.log(k, createHmac("sha256", seed).update(msg(k)).digest("hex"));
}
'
#    compare each line against the HMAC output printed on this page.

Every step

Including the ones that awarded nothing. A rejected sample fell in the biased tail of the digest and was discarded to keep the draw uniform; a skip is a candidate the prize could not go to, either because they no longer qualified or because Discord would not confirm them. Drawn or skipped, an entry leaves with all of its tickets. A step marked Repeat gave a second prize to someone who already won: that happens only once every ticket has been drawn and a prize is still unhanded.

  1. k = 0AwardedWinner 1
    Tickets in play
    55
    Winning ticket
    27
    Entry
    J7ZCH1NT6Y76
    HMAC message5gw-draw-v1|9|ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b|84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2|0HMAC-SHA256 output332ddbd1a5aacce453be0b10b22e37b15fef7cd24a6f4b90577e043dbe2ed2e9
  2. k = 1AwardedWinner 2
    Tickets in play
    54
    Winning ticket
    41
    Entry
    G0F78Q1QNQJQ
    HMAC message5gw-draw-v1|9|ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b|84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2|1HMAC-SHA256 output2143209fabdc8f634e5f0b1f2c0350b79667ce0494cffe2ef37a546aa4ea5807
  3. k = 2AwardedWinner 3
    Tickets in play
    53
    Winning ticket
    13
    Entry
    QEB9CCDCWDNB
    HMAC message5gw-draw-v1|9|ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b|84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2|2HMAC-SHA256 outpute974248078bda32620b59951029ca55176c5e1dd9525dfd9aa62d72189e644c2
  4. k = 3AwardedWinner 4
    Tickets in play
    52
    Winning ticket
    36
    Entry
    D5G61TGQKPF1
    HMAC message5gw-draw-v1|9|ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b|84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2|3HMAC-SHA256 outputa71693c54f462b19f3a0d6fb53b6b306a053a2fbd25fff17b0437187888ba1d8
  5. k = 4AwardedWinner 5
    Tickets in play
    51
    Winning ticket
    12
    Entry
    WP9DMDDH48V0
    HMAC message5gw-draw-v1|9|ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b|84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2|4HMAC-SHA256 outputf6ff691665c8d8f36471000893484b97881f76c917f446fe63780ffdf476e6fc
  6. k = 5AwardedBackup 1
    Tickets in play
    50
    Winning ticket
    5
    Entry
    FQGG1GR7AT27
    HMAC message5gw-draw-v1|9|ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b|84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2|5HMAC-SHA256 output0ed4f86925dec7161d13831b9808e2dfbb238d0f383174f6a07d3dcc0facce22
  7. k = 6AwardedBackup 2
    Tickets in play
    49
    Winning ticket
    6
    Entry
    DS3WJ3S41FSM
    HMAC message5gw-draw-v1|9|ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b|84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2|6HMAC-SHA256 output75d07a53877e353906c04ed9b4abd9ba1a814be47975fa2c6eacbc5a43ba21f0
  8. k = 7AwardedBackup 3
    Tickets in play
    48
    Winning ticket
    23
    Entry
    MJQ9WQ18WJFP
    HMAC message5gw-draw-v1|9|ef9ea704b6df790264999de1dcc66180bad3b928217acbc22b4283d10bd75a9b|84beb20d76b33fb55fae79cd4cb5ed964769efee1ed609e6684b0c7241b93bd2|7HMAC-SHA256 outputfff712d0b69fd4a2997874df9a7112862a370cb12e4bcfab29c9141866f4098c

The frozen ledger

63 rows

Every entry in order, under a per-giveaway pseudonym. One ticket for each store server the entrant was verified in, laid end to end from 1 in this order. Zero tickets is a real row that cannot win: an excluded entry, or an entrant who was in none of the servers.

#EntryTicketsTicket rangeStatus at freeze
162E9PXTYBCFX11 - 1In the draw
2KCH5VM12V08V12 - 2In the draw
3H9FDYEM6G2YX13 - 3In the draw
4G0NQAVTV271E14 - 4In the draw
5FQGG1GR7AT2715 - 5In the draw
6DS3WJ3S41FSM16 - 6In the draw
79BM3J1HSBQ5R17 - 7In the draw
8JXMACSPZ80RV18 - 8In the draw
90NPQ38KGSW6519 - 9In the draw
100HMY3PGXECXF110 - 10In the draw
11QC4P855TZ0CY111 - 11In the draw
12WP9DMDDH48V0112 - 12In the draw
13QEB9CCDCWDNB113 - 13In the draw
14JKEBX6MVYADM114 - 14In the draw
15R7B4YC61M8YQ115 - 15In the draw
1630FP9C6H9A0W116 - 16In the draw
172PEJ0X1DQN2V117 - 17In the draw
18CZ2BRMEWD874118 - 18In the draw
19EXCEVSBSWXWN119 - 19In the draw
20BZ2VZC035PMY120 - 20In the draw
21EDE9VFRKZM4T121 - 21In the draw
225Q0XN2C6W9NH122 - 22In the draw
23MJQ9WQ18WJFP123 - 23In the draw
24ABV2P0SEX4YK124 - 24In the draw
25TAQJ13NSC4FR125 - 25In the draw
2672P58643V4VC126 - 26In the draw
27J7ZCH1NT6Y76127 - 27In the draw
28V444BWAG3DAJ128 - 28In the draw
298A4VK6PP6DG8129 - 29In the draw
301MXPEGVR1S97130 - 30In the draw
311N8P274NDV7H131 - 31In the draw
32MHNSXZTE3MFZ132 - 32In the draw
33J2FFZNRRC32H133 - 33In the draw
34879KBAYCBTGQ134 - 34In the draw
35ZNPHS5FNFGSF135 - 35In the draw
36D5G61TGQKPF1136 - 36In the draw
37RCH0QNEWAW9V137 - 37In the draw
389MY2AQ8KP94H138 - 38In the draw
394F39WZ8EZW8Q139 - 39In the draw
40NDKWGWMBJQ71140 - 40In the draw
41G0F78Q1QNQJQ141 - 41In the draw
42X58K71ZJ9C52142 - 42In the draw
43G179EX5AR51Q143 - 43In the draw
44SZWHSAP3X0C9144 - 44In the draw
45WV43GM0NJNMD145 - 45In the draw
46NNPV032EAS460-Held back
47KNH8AYZ2572V146 - 46In the draw
489XGT8X9K8RX50-Held back
49MVGQ1QP5718H147 - 47In the draw
50RQ19N2Y9MSVQ0-In the draw
519383M6Z0CYS50-In the draw
52GFPQS83MVK04148 - 48In the draw
5326TEZBSGNZEX149 - 49In the draw
54QCKHYJ0TET180-In the draw
557MVN4S3MHVDD150 - 50In the draw
56ZXS6HV3N919W151 - 51In the draw
57T52ZJDYSVGXM0-Held back
58TGA22P1KCVCN0-Held back
59CTNVBCTC4RKA0-Held back
60WBKW166HBWCH152 - 52In the draw
61NNKBFPYD5635153 - 53In the draw
62QV2AQGV25CMN154 - 54In the draw
637KK565V2BP9R155 - 55In the draw

Join order

Joining is first come, first served. A store an admin added is marked as such.

OrderStoreJoinedStatusAdded by
#1DEVHUBPostedJoined in queue

Draw algorithm: 5gw-draw-v1.