Bevor die Verlosung eine einzige echte Teilnahme angenommen hat, haben wir eine komplette Runde auf dem Ethereum-Mainnet mit unserem eigenen Geld laufen lassen — echtes USDC, echter Chainlink-VRF-Zufall, im Fünfzigtausendstel der Größe. Es hat funktioniert. Jede Transaktion unten steht auf der öffentlichen Chain und du kannst sie alle aufmachen.
| Schritt | Auf Etherscan |
|---|---|
| Erstes Los gekauft | 0xd6abe868…a90181 |
| …39 weitere Kauftransaktionen | 2.000 Lose, 20,00 USDC insgesamt |
| Ziehung bei Chainlink VRF angefordert | 0xa9065817…1d9f9a |
| Zufall geliefert und Runde abgerechnet | 0xe027c234…3be700 |
Die Runde hat 20,00 USDC eingesammelt und 20,00 USDC ausgezahlt. Weil das eine Generalprobe war, war dieselbe Adresse das Haus und jeder Gewinner, also kam alles zurück — aber der Vertrag wusste das nicht und hat exakt so aufgeteilt, wie er es in einer echten Runde tun wird.
Die Gewinner werden von Chainlink VRF v2.5 gezogen, das eine Zufallszahl zusammen mit einem kryptografischen Beweis liefert, dass sie nicht manipuliert wurde. Der Beweis wird on-chain geprüft, bevor unser Vertrag sie verwenden darf. Niemand — weder wir noch ein Miner noch Chainlink — kann die Gewinner aussuchen.
Wir benutzen dafür bewusst keine Blockdaten. Ein Block-Proposer sieht Werte wie prevrandao, bevor er veröffentlicht, und könnte eine Ziehung im Wert von einer Million Dollar still neu würfeln. Chainlink VRF kostet mehr und ist es wert.
| Anfrage | 0xa9065817…1d9f9a |
| Erfüllung | 0xe027c234…3be700 |
| Antwortzeit | 84 Sekunden |
| Tatsächlich berechnete LINK | 0,017217 von 50 in Reserve gehalten |
Alle 100 verschieden, alle im Bereich 0–1.999. Das zuerst gezogene Los (1501, in Rot) bekommt die Uhr; die anderen 99 bekommen Bargeld.
In der Reihenfolge, in der der Vertrag sie ausgeliefert hat. Los 1501 fehlt, weil es die Uhr gewonnen hat — ein physischer Gegenstand, der off-chain übergeben wird statt überwiesen.
| # | Gewinnlos | USDC ausgezahlt |
|---|---|---|
| 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 |
Echtes USDC ist geflossen, echter Zufall ist eingetroffen, die Rechnung ging exakt auf, und der Vertrag hat sich bis auf den letzten Cent selbst geleert, ohne dass jemand eingegriffen hat.
Eine funktionierende Generalprobe zeigt, dass der Vertrag das Richtige tut, solange niemand ihn angreift. Ob er jemandem standhält, der eine Million Dollar gewinnen kann, ist eine andere Frage — und die beantwortet nur ein professionelles Audit.
| Was | Adresse |
|---|---|
| Generalproben-Verlosung | 0x65B0A55B0d303381b4bf0aF95D9c1cb67E257a1D |
| Keeper (lässt sie unbeaufsichtigt laufen) | 0xFEA128525A0787FC512Cd815AA0c5Ab34B1c7e1e |
| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
| Chainlink-VRF-Koordinator | 0xD7f86b4b8Cae7D942340FF628F82735b7a20893a |
Dieser Generalprobenvertrag ist nicht der, den eine echte Runde verwenden wird. Er ist auf ein Fünfzigtausendstel der Größe konfiguriert, und seine Haus- und Guardian-Adressen sind die Test-Wallet. Der Produktivvertrag wird separat deployt und seine Adresse wird hier und auf der Verlosungsseite veröffentlicht, bevor er ein einziges Los annimmt.