Before the raffle took a single real entry, we ran a complete round on Ethereum mainnet with our own money — real USDC, real Chainlink VRF randomness, at one fifty-thousandth of the size. It worked. Every transaction below is on the public chain and you can open all of them.
| Step | On Etherscan |
|---|---|
| First ticket bought | 0xd6abe868…a90181 |
| …39 more purchase transactions | 2,000 tickets, 20.00 USDC in total |
| Draw requested from Chainlink VRF | 0xa9065817…1d9f9a |
| Randomness delivered and round settled | 0xe027c234…3be700 |
The round collected 20.00 USDC and paid out 20.00 USDC. Because this was a rehearsal, the same address was the house and every winner, so all of it came back — but the contract did not know that, and split it exactly as it will in a real round.
Winners are drawn by Chainlink VRF v2.5, which produces a random number together with a cryptographic proof that it was not tampered with. The proof is verified on-chain before our contract is allowed to use it. Nobody — not us, not a miner, not Chainlink — can pick the winners.
We deliberately do not use block data for this. A block proposer can see values like prevrandao before publishing, and could quietly re-roll a draw worth a million dollars. Chainlink VRF costs more and is worth it.
| Request | 0xa9065817…1d9f9a |
| Fulfilment | 0xe027c234…3be700 |
| Time to answer | 84 seconds |
| LINK actually charged | 0.017217 of 50 held in reserve |
All 100 distinct, all inside the 0–1,999 range. The first drawn ticket (1501, in red) takes the watch; the other 99 take cash.
In the order the contract delivered them. Ticket 1501 is absent because it won the watch, which is a physical object handed over off-chain rather than a transfer.
| # | Winning ticket | USDC paid |
|---|---|---|
| 1 | 1097 | 0.08 |
| 2 | 56 | 0.08 |
| 3 | 1962 | 0.08 |
| 4 | 468 | 0.08 |
| 5 | 1576 | 0.08 |
| 6 | 75 | 0.08 |
| 7 | 251 | 0.08 |
| 8 | 998 | 0.08 |
| 9 | 731 | 0.08 |
| 10 | 1999 | 0.08 |
| 11 | 391 | 0.08 |
| 12 | 766 | 0.08 |
| 13 | 1672 | 0.08 |
| 14 | 1065 | 0.08 |
| 15 | 869 | 0.08 |
| 16 | 1547 | 0.08 |
| 17 | 146 | 0.08 |
| 18 | 1788 | 0.08 |
| 19 | 887 | 0.08 |
| 20 | 558 | 0.08 |
| 21 | 1040 | 0.08 |
| 22 | 395 | 0.08 |
| 23 | 1370 | 0.08 |
| 24 | 846 | 0.08 |
| 25 | 1631 | 0.08 |
| 26 | 1581 | 0.08 |
| 27 | 696 | 0.08 |
| 28 | 755 | 0.08 |
| 29 | 986 | 0.08 |
| 30 | 1652 | 0.08 |
| 31 | 1664 | 0.08 |
| 32 | 625 | 0.08 |
| 33 | 1123 | 0.08 |
| 34 | 847 | 0.08 |
| 35 | 52 | 0.08 |
| 36 | 1471 | 0.08 |
| 37 | 895 | 0.08 |
| 38 | 747 | 0.08 |
| 39 | 598 | 0.08 |
| 40 | 1092 | 0.08 |
| 41 | 1755 | 0.08 |
| 42 | 1585 | 0.08 |
| 43 | 1514 | 0.08 |
| 44 | 763 | 0.08 |
| 45 | 1235 | 0.08 |
| 46 | 179 | 0.08 |
| 47 | 1503 | 0.08 |
| 48 | 913 | 0.08 |
| 49 | 1003 | 0.08 |
| 50 | 245 | 0.08 |
| 51 | 555 | 0.08 |
| 52 | 1388 | 0.08 |
| 53 | 213 | 0.08 |
| 54 | 619 | 0.08 |
| 55 | 1485 | 0.08 |
| 56 | 935 | 0.08 |
| 57 | 610 | 0.08 |
| 58 | 715 | 0.08 |
| 59 | 107 | 0.08 |
| 60 | 1158 | 0.08 |
| 61 | 965 | 0.08 |
| 62 | 1764 | 0.08 |
| 63 | 660 | 0.08 |
| 64 | 1453 | 0.08 |
| 65 | 1175 | 0.08 |
| 66 | 1810 | 0.08 |
| 67 | 659 | 0.08 |
| 68 | 633 | 0.08 |
| 69 | 47 | 0.08 |
| 70 | 830 | 0.08 |
| 71 | 743 | 0.08 |
| 72 | 201 | 0.08 |
| 73 | 461 | 0.08 |
| 74 | 589 | 0.08 |
| 75 | 1510 | 0.08 |
| 76 | 1919 | 0.08 |
| 77 | 883 | 0.08 |
| 78 | 1297 | 0.08 |
| 79 | 478 | 0.08 |
| 80 | 121 | 0.08 |
| 81 | 1829 | 0.08 |
| 82 | 1634 | 0.08 |
| 83 | 1523 | 0.08 |
| 84 | 1749 | 0.08 |
| 85 | 989 | 0.08 |
| 86 | 1386 | 0.08 |
| 87 | 576 | 0.08 |
| 88 | 741 | 0.08 |
| 89 | 480 | 0.08 |
| 90 | 258 | 0.08 |
| 91 | 1371 | 0.08 |
| 92 | 1206 | 0.08 |
| 93 | 1941 | 0.08 |
| 94 | 1400 | 0.08 |
| 95 | 484 | 0.08 |
| 96 | 1410 | 0.08 |
| 97 | 686 | 0.08 |
| 98 | 108 | 0.08 |
| 99 | 812 | 0.08 |
Real USDC moved, real randomness arrived, the arithmetic came out exact, and the contract emptied itself to the last cent without anyone intervening.
A working rehearsal shows the contract does the right thing when nobody is attacking it. That is a different question from whether it resists someone with a million dollars to win, and only a professional audit answers the second.
| What | Address |
|---|---|
| Rehearsal raffle | 0x65B0A55B0d303381b4bf0aF95D9c1cb67E257a1D |
| Keeper (runs it unattended) | 0xFEA128525A0787FC512Cd815AA0c5Ab34B1c7e1e |
| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
| Chainlink VRF coordinator | 0xD7f86b4b8Cae7D942340FF628F82735b7a20893a |
This rehearsal contract is not the one a real round will use. It is configured at one fifty-thousandth scale, and its house and guardian addresses are the test wallet. The production contract is deployed separately and its address will be published here and on the raffle page before it accepts a single ticket.