Draw Verification
WHACK AN ORK
Draw Result
- Winner
- Smith, Kent
- Winning ticket
- #88
- Entries in pool
- 1561 (all entrants)
- Winner index
- 28 (0-based)
- Draw executed
- 3 Sep 2026, 8:31 PM
- Entropy source
- secrets.SystemRandom (instant-win positions at setup)
- Fairness mechanism
- SHA-256 commit-reveal — selection by sha256(legion-draw-v1:draw:draw_secret:pool_hash:drand_randomness:counter) rejection sampling
How This Result Was Produced
7 steps, each one checkable against the values published below. Nothing here depends on trusting us — every input is shown.
Verify commitment was published before the draw
This sha256 hash was published when the competition was created. It proves the draw_secret could not have been changed after tickets were sold.
5579f08c661f07a16b9ca476cb4735d16e5317345ed0a10f4bfa359653e9724d
Verify the pool-freeze commitment was published before the beacon round
sha256 of the exact UTF-8 string 'legion-draw-v1:pool_freeze:' + pool_hash + ':' + drand_chain_hash + ':' + str(round_number) — colon-separated, no spaces, no trailing newline. Published before the targeted round resolved, it pins both the entry pool and the round while the round's randomness was still unknowable. Rebuild it from this page's published values with the command below.
a0766e99627d5655d2feeee2eeaaa82e325a76f7228978e43e696b7ac6467b58
python3 -c "import hashlib; print(hashlib.sha256('legion-draw-v1:pool_freeze:b0c78ff9f4d1ac82de7a73d2c45386e9b86109ccd3c6d7258a746ce752e33665:52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971:31886825'.encode()).hexdigest())"
Verify draw_secret matches commitment_hash
The draw_secret is revealed below. sha256(draw_secret) is shown — it must equal the commitment_hash in step 1.
draw_secret (input)
9a0eb3532950bb0f842c5c6b65bd5455105bf18af8cd22c8a4f729aac6a702af
sha256(draw_secret) must equal step 1
5579f08c661f07a16b9ca476cb4735d16e5317345ed0a10f4bfa359653e9724d
Verify the entry pool hash
sha256 of every ticket number in the draw pool, in ascending numeric order, joined with commas and no spaces.
b0c78ff9f4d1ac82de7a73d2c45386e9b86109ccd3c6d7258a746ce752e33665
Verify the drand beacon randomness
Round 31886825 of the public drand randomness beacon (chain 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971). This value is published independently by multiple operators and could not have been known when the pool above was frozen. Check it yourself: fetch https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971/public/31886825, hex-decode the response's 'signature' field into raw bytes, then compute sha256 of those bytes — it must match the value shown here. (Hashing the ASCII hex text of the signature instead of the decoded bytes gives a different, wrong answer.) The command below does exactly that.
92afbeffa8844d0df66d189370add00d283ba551b614649e4da5d9ca765e2059
python3 -c "import hashlib, json, urllib.request; r = json.load(urllib.request.urlopen('https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971/public/31886825')); print(hashlib.sha256(bytes.fromhex(r['signature'])).hexdigest())"
Verify the beacon's BLS signature
Before accepting the randomness above, the platform checked drand's BLS12-381 signature for this round against this chain public key — a relay can withhold a round but cannot forge one without drand's private key. Fetch the round's 'signature' field from the URL above and verify e(H(round_bytes), public_key) == e(signature, G2_generator) yourself with any BLS12-381 library; source: https://drand.love/developer/http-api/.
83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a
Reproduce the winner selection (rejection sampling)
Starting at counter=0, compute sha256(f'legion-draw-v1:draw:{draw_secret}:{pool_hash}:{drand_randomness}:{counter}') as a 256-bit integer. Let limit be the largest multiple of N below 2^256. If the value is >= limit, increment counter and retry. Otherwise winner_index = value mod N.
counter=0, winner_index=28
Check It Yourself
Run every check in your own browser. It recomputes the hashes and the winner selection locally from the values published on this page, and fetches the drand round directly from the public relays — nothing is sent to our servers, so a pass cannot depend on trusting us.
- Confirm sha256(draw_secret) equals the commitment hash in step 1.
-
Confirm the sha256 of the entry pool below equals the pool hash in step 3. Hash the text
exactly as shown — ticket numbers in ascending numeric order, separated by commas, with no
spaces and no trailing newline.
Entry pool — ticket numbers in ascending numeric order
4,8,16,17,21,22,23,26,27,28,30,32,33,36,43,44,45,48,54,56,62,66,70,74,75,83,86,87,88,89,91,92,95,98,101,104,108,109,112,115,116,119,125,126,128,131,132,134,136,137,142,143,144,145,149,150,151,153,156,160,161,162,167,168,170,174,176,178,179,186,194,196,200,201,203,204,205,206,207,208,210,217,219,221,222,223,227,229,231,232,234,236,238,240,241,244,248,252,253,254,256,257,261,263,264,265,274,276,280,288,290,292,293,294,301,302,304,305,307,309,319,322,325,330,332,333,335,336,337,338,340,347,348,350,352,353,354,356,357,362,366,370,372,373,375,376,377,380,382,383,385,390,391,394,395,396,397,398,399,400,405,406,407,408,413,414,415,417,419,424,427,432,433,434,435,437,438,439,440,441,450,452,453,459,461,462,467,472,476,478,484,485,489,490,496,505,507,511,512,514,515,516,517,520,524,526,527,529,533,537,540,547,549,550,551,552,554,557,558,559,565,568,574,577,580,585,588,592,595,599,601,603,606,610,611,612,613,617,618,619,620,623,624,625,626,629,630,633,634,651,652,655,656,658,661,664,666,670,672,673,675,677,678,681,684,688,690,693,698,701,702,703,704,706,708,715,720,722,724,726,732,733,734,737,738,740,741,742,743,745,746,749,751,753,757,758,762,766,767,768,771,775,776,784,790,791,795,796,797,798,799,807,813,814,816,818,824,826,827,828,829,830,834,836,839,841,842,843,844,846,847,850,852,855,856,857,860,863,865,866,870,871,874,877,879,882,884,885,891,896,898,899,901,902,905,907,908,912,913,921,923,924,928,933,934,935,936,937,941,943,945,951,954,955,956,959,962,963,966,967,968,970,971,977,981,982,984,985,986,987,993,998,999,1000,1014,1019,1020,1021,1026,1032,1037,1040,1041,1045,1046,1047,1049,1050,1052,1055,1059,1060,1061,1067,1068,1069,1070,1073,1074,1075,1079,1081,1084,1085,1086,1089,1090,1091,1092,1096,1099,1100,1102,1107,1108,1111,1112,1115,1118,1120,1123,1125,1127,1128,1130,1131,1132,1135,1139,1141,1143,1144,1145,1149,1152,1153,1154,1158,1159,1162,1164,1165,1166,1167,1172,1173,1175,1180,1181,1182,1183,1184,1186,1187,1189,1191,1192,1194,1197,1199,1200,1202,1208,1209,1212,1216,1217,1220,1221,1222,1223,1231,1234,1238,1239,1242,1243,1245,1248,1250,1251,1252,1260,1265,1267,1269,1272,1274,1276,1277,1280,1281,1283,1285,1286,1294,1295,1299,1306,1308,1310,1311,1312,1315,1316,1317,1319,1321,1322,1324,1328,1330,1333,1340,1356,1357,1362,1363,1364,1367,1368,1369,1371,1372,1379,1386,1388,1389,1392,1393,1396,1397,1399,1400,1401,1402,1403,1405,1407,1409,1410,1413,1414,1424,1425,1427,1432,1437,1440,1442,1445,1446,1454,1455,1456,1458,1459,1462,1464,1465,1466,1468,1470,1473,1476,1481,1482,1487,1488,1489,1492,1495,1497,1500,1504,1507,1509,1511,1513,1517,1523,1525,1527,1531,1534,1536,1537,1540,1542,1551,1553,1555,1556,1557,1559,1564,1567,1569,1570,1576,1579,1583,1587,1588,1589,1595,1598,1603,1609,1611,1612,1613,1615,1618,1621,1622,1627,1628,1630,1633,1634,1641,1642,1643,1646,1655,1658,1659,1661,1662,1663,1664,1665,1666,1671,1677,1679,1680,1683,1689,1691,1692,1694,1695,1696,1699,1700,1702,1704,1711,1714,1715,1716,1721,1722,1725,1727,1729,1732,1737,1740,1742,1743,1748,1750,1751,1755,1758,1759,1765,1766,1769,1771,1775,1779,1780,1781,1793,1794,1799,1801,1805,1807,1808,1813,1818,1819,1821,1825,1830,1831,1832,1834,1836,1840,1842,1844,1852,1857,1859,1861,1862,1863,1864,1865,1872,1873,1874,1876,1879,1880,1881,1883,1885,1886,1888,1889,1890,1891,1896,1897,1898,1900,1904,1912,1913,1921,1922,1925,1927,1929,1930,1931,1932,1934,1936,1939,1944,1947,1948,1949,1951,1952,1953,1956,1958,1961,1964,1965,1968,1969,1970,1971,1979,1980,1981,1985,1987,1990,1994,1997,2000,2002,2012,2016,2018,2020,2021,2025,2027,2029,2031,2032,2041,2042,2043,2045,2046,2047,2055,2056,2057,2058,2059,2060,2062,2063,2065,2067,2075,2078,2080,2083,2084,2088,2089,2090,2092,2094,2099,2100,2102,2103,2107,2108,2114,2115,2118,2122,2126,2128,2129,2132,2133,2138,2139,2140,2146,2151,2154,2155,2156,2157,2159,2162,2164,2167,2169,2173,2175,2176,2181,2182,2186,2189,2191,2192,2197,2201,2206,2207,2208,2209,2214,2215,2219,2225,2226,2228,2229,2235,2238,2239,2243,2250,2251,2254,2257,2259,2263,2264,2265,2271,2275,2282,2283,2286,2290,2293,2294,2298,2303,2305,2308,2310,2311,2314,2318,2320,2326,2327,2332,2333,2334,2335,2336,2337,2339,2340,2344,2345,2346,2347,2350,2353,2354,2355,2358,2359,2364,2365,2367,2368,2371,2373,2375,2379,2380,2381,2382,2383,2384,2385,2386,2392,2397,2401,2406,2407,2413,2417,2422,2427,2429,2430,2431,2432,2433,2439,2441,2442,2446,2447,2449,2454,2456,2458,2460,2462,2464,2466,2468,2471,2474,2475,2477,2479,2485,2487,2489,2490,2493,2495,2499,2501,2504,2505,2506,2508,2514,2520,2521,2523,2524,2526,2527,2529,2532,2537,2541,2545,2547,2548,2549,2553,2554,2555,2558,2561,2562,2564,2567,2569,2577,2579,2581,2583,2584,2596,2598,2600,2601,2605,2606,2608,2611,2612,2616,2618,2619,2620,2623,2625,2629,2630,2631,2633,2637,2639,2644,2645,2647,2651,2658,2659,2660,2661,2662,2663,2665,2666,2667,2675,2677,2679,2681,2682,2683,2684,2686,2687,2689,2690,2695,2697,2704,2705,2706,2712,2714,2715,2716,2719,2721,2723,2725,2727,2730,2731,2732,2733,2734,2735,2745,2746,2749,2750,2751,2752,2760,2763,2765,2767,2768,2769,2770,2773,2774,2775,2777,2782,2794,2796,2797,2802,2806,2813,2815,2817,2818,2820,2822,2823,2825,2832,2833,2838,2839,2840,2843,2844,2846,2848,2856,2858,2860,2861,2863,2867,2871,2872,2873,2874,2875,2877,2884,2887,2888,2890,2891,2896,2897,2898,2899,2902,2903,2904,2905,2910,2916,2921,2925,2926,2928,2929,2931,2932,2933,2934,2938,2940,2941,2943,2945,2951,2954,2957,2961,2964,2965,2967,2969,2971,2974,2975,2981,2982,2986,2991,2995,2996,2998,2999,3004,3007,3008,3015,3017,3018,3020,3031,3032,3035,3036,3038,3040,3046,3049,3051,3052,3057,3058,3059,3061,3063,3065,3067,3068,3070,3073,3076,3077,3081,3082,3083,3086,3088,3089,3090,3091,3097,3098,3100,3102,3103,3104,3105,3109,3121,3122,3126,3130,3132,3137,3141,3142,3148,3149,3151,3153,3156,3157,3160,3161,3167,3174,3175,3176,3177,3181,3183,3184,3185,3187,3188,3189,3190,3194,3196,3205,3206,3208,3209,3210,3212,3218,3221,3222,3228,3230,3231,3234,3237,3240,3241,3244,3249,3250,3251,3252,3253,3255,3258,3259,3260,3269,3270,3271,3273,3275,3277,3279,3280,3282,3283,3284,3286,3287,3288,3291,3292,3294,3295,3298,3301,3302,3303,3304,3305,3316,3318,3321,3323,3324,3326,3333,3334,3336,3338,3340,3343,3355,3356,3363,3365,3370,3373,3375,3379,3385,3386,3390,3392,3399,3400,3401,3402,3404,3406,3407,3408,3410,3417,3421,3423,3424,3429,3430,3431,3434,3439,3441,3442,3446,3447,3448,3449,3457,3458,3459,3460,3461,3463,3465,3466,3467,3468,3469,3470,3474,3477,3479,3487,3489,3490,3494,3495,3498,3499,3501,3504,3505,3506,3508,3509,3513,3515,3516,3517,3518,3519,3521,3524,3529,3532,3533,3536,3540,3541,3544,3545,3546,3547,3550,3554,3557,3564,3567,3570,3573,3577,3578,3583,3588,3590,3591,3592,3596,3598,3601,3607,3611,3613,3615,3616,3617,3618,3619,3625,3628,3629,3631,3632,3634,3637,3639,3640,3641,3643,3644,3653,3655,3657,3659,3666,3672,3673,3678,3679,3680,3682,3684,3688,3689,3693,3694,3695,3700,3701,3704,3705,3706,3709,3711,3712,3713,3714,3715,3716,3719,3720,3721,3724,3725,3731,3732,3733,3734,3735,3738,3740,3741,3748,3751,3752,3753,3754,3756,3757,3767,3768,3769,3771,3775,3784,3788,3796,3800,3802,3803,3805,3806,3812,3815,3822,3826,3828,3830,3833,3836,3839,3844,3845,3848,3849,3850,3852,3855,3856,3857,3860,3861,3863,3866,3869,3871,3873,3874,3876,3877,3878,3885,3889,3891,3894,3895,3896,3899,3902,3904,3905,3908,3913,3918,3919,3922,3924,3931,3932,3944,3945,3947,3951,3954,3955,3956,3957,3958,3959,3965,3969,3971,3973,3980,3983,3985,3987,3989,3995,3998,4000 -
Run the pre-filled command below to reproduce the beacon-seeded rejection-sampling winner
index (counter=?, expected
winner_index=28). This folds in the drand beacon randomness from
the step above alongside the draw secret and pool hash, so the winner could not have been
known until that round resolved.
python3 - <<'PY' import hashlib draw_secret = '9a0eb3532950bb0f842c5c6b65bd5455105bf18af8cd22c8a4f729aac6a702af' pool_hash = 'b0c78ff9f4d1ac82de7a73d2c45386e9b86109ccd3c6d7258a746ce752e33665' beacon_randomness = '92afbeffa8844d0df66d189370add00d283ba551b614649e4da5d9ca765e2059' total_entries = 1561 counter = 0 limit = (1 << 256) - ((1 << 256) % total_entries) while True: seed = hashlib.sha256(f'legion-draw-v1:draw:{draw_secret}:{pool_hash}:{beacon_randomness}:{counter}'.encode()).digest() candidate = int.from_bytes(seed[:32], 'big') if candidate < limit: print(f'counter={counter} winner_index={candidate % total_entries}') break counter += 1 PY
Full Entry List
All sold tickets with entry method (no personal names). This competition had no engagement question, so the file carries no answer column. Download it to cross-reference ticket numbers against the draw pool; the "In Main Draw" column marks which rows formed it.
Download entry list CSVIndependent Timestamp Proof
Each commitment hash is anchored to the Bitcoin blockchain via
OpenTimestamps. A confirmed
proof establishes the hash existed before the Bitcoin block that attests it —
checkable without trusting our records. Save the commitment hash to a file and check the proof
with the free ots tool:
printf '%s' 'COMMITMENT_HASH' > commitment.txt && ots verify -f commitment.txt proof.ots
Draw commitment — anchored in Bitcoin 20 Aug 2026 09:04 UTC
5579f08c661f07a16b9ca476cb4735d16e5317345ed0a10f4bfa359653e9724d
Download OTS proof
Instant win commitment — anchored in Bitcoin 20 Aug 2026 09:04 UTC
72b858ebbb21527786e4a999d4877d0a45b2f2a452b7a09d7158341f73229f89
Download OTS proof
Pool freeze commitment — anchored in Bitcoin 3 Sep 2026 22:04 UTC
a0766e99627d5655d2feeee2eeaaa82e325a76f7228978e43e696b7ac6467b58
What this proof does and does not show: Bitcoin confirmation takes hours, while the targeted drand round resolves seconds after the pool freeze — so a confirmed proof here demonstrates the pool-freeze commitment existed before its attesting block, not that the freeze happened before the drand round. The freeze-before-round ordering rests on the commitment having been published before the round resolved (step 2 above) and on our audit records.
Download OTS proof