Mat engem zoufälleg Orakel mat dem Beispill vun enger Lotterie

Engem Moien koum ech op en Artikel iwwer verifizéierbar zoufälleg Zuel Generator op der Waves Plattform blockchain.

D'Gesamtbild war kloer, awer déi spezifesch Ëmsetzungsmethod war net. E puer Coden, Ënnerschrëften, wat, wou, firwat?

Verschidde Konsultatiounen mam Auteur vum Orakel, als Resultat war et méiglech d'Zeechnungslogik (a PHP ëmgesat) mat engem Algorithmus ze kombinéieren fir eng zoufälleg Zuel ze kréien.

  1. Um Ufank vum Tournoi/Ronn froe mir den éischten Deel vum Code (R-Code) vum Orakel.

    Am Moment gëtt et keng Informatioun iwwer d'Zuel vun de Spiller, d'Zuel vun de Präisplazen, d'Gréisst vun de Präisbezuelungen oder d'Existenz vun der Lotterie am Allgemengen. Den Orakel, duerch eng Transaktioun, gëtt e perséinlechen zoufälleg Code eraus, deen dann nëmmen eemol benotzt ka ginn an nëmmen vun deenen, déi et gefrot hunn. Iwwregens, kann de R-Code "kaaft" ginn (dat heescht d'Käschte vun der Ufro Transaktioun + Kompensatioun un den Orakel fir d'Äntwert Transaktioun, dëst ass e Betrag vun ongeféier $ 0.015 um aktuellen Taux, de Code selwer gëtt gratis erausginn ) e puer Mol am Viraus, fir net méi spéit op den Empfang vun der Äntwerttransaktioun ze waarden. Ech hunn e klenge regelméisseg aktualiséierte Puffer an der Datebank gemaach.

  2. Den Tournoi dauert normalerweis 60 Block vun der Waves Plattform Blockchain, am Moment ass et ongeféier 1 Stonn. Den Tournoi gëtt als fäerdeg an zougemaach ugesinn, wann no 60 Blocken op d'mannst zwee Ticketen dra sinn, soss gëtt d'Tournoiaktivitéitszäit fir déi nächst 60 Block verlängert.
  3. Direkt nodeems den Tournoi zou ass, generéiere mir a schécken eng Datumtransaktioun (mir bezuelen och eng Kommissioun vun ongeféier $ 0.005 dofir), wann néideg, e puer, an deenen all d'Konditioune vun der Zeechnung opgeholl ginn an eng bestallt Lëscht vu Spiller (Ticketen) aus deem mir d'Gewënner auswielen mussen.
  4. Op dëser Etapp hu mir schonn den éischten Deel vum Code (R-Code) plus d'Transaktiounsdatum ID (TXID). Mir schécken se fir d'Ënnerschrëft un d'Orakel a Form vu Konkatenatioun (R-Code + TXID), erëm bezuelen mir eng Kommissioun + Kompensatioun. Den Orakel iwwerpréift déi kritt Donnéeën fir Eenzegaartegkeet a gehéiert, an als Äntwert schéckt eis den zweeten Deel vum Code (S-Code) am Sha256-Format, deen den Ausgangspunkt fir den Zoufallsnummergenerator ass.
  5. Fir eng zoufälleg Zuel ze kréien, déi d'Sequenznummer vum Gewënner Ticket uginn, konvertéiere mir den S-Code vun de binäre Daten sha256 an eng hexadezimal (HEX) Representatioun. Dann aus der resultéierender HEX String, mir kréien eng Zuel. Mir kréien de Rescht vun der doraus resultéierend Zuel vun der Zuel vun Ticketen ze deelen (all_tickets) an dobäi 1 op d'Resultat (fir d'Nummer 1 virun all_tickets ze kréien). Als Resultat kréien mir d'Seriennummer vum Gewënner.
  6. Wann, no de Konditioune vun der Zeechnen, et e puer Gewënner sinn, da widderhuelen mir déi virdrun Operatiounen an engem Montant gläich op d'Zuel vun de Präis Plaze. An dësem Fall, all Kéier mir ewechzehuelen aus der Lëscht engem Ticket datt schonn gewonnen huet an all_tickets reduzéieren vun 1, an amplaz S-Code uginn mir déi virdrun Zuel kritt.

Loosst eis e spezifescht richtegt Beispill kucken, Tournoi Nummer 119:

Ganzen 7 Ticketen (all_tickets)
Ticket kascht 50 Mënzen (Wetten)
Spillgebühr 10% (Fee)

No de Konditioune vun der Lotterie ginn 30% un d'Präisgeld, d.h. an dësem Fall, 2 Ticketen muss e Präis kréien, der Gréisst vun deem ass no der Formel berechent (Bet * all_tickets-Fee) / 2.

1. R-Code kritt: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Nodeems den Tournoi zou ass, hu mir eng Lëscht vun Ticketen a Form vu Puer: Zuel + Adress (d'Adress vum Portmonni aus deem d'Bezuelung fir d'Participatioun am Tournoi gemaach gouf). Notéiert w.e.g. datt d'Adressen widderholl kënne ginn, dat heescht datt ee Participant e puer Tickete fir een Tournoi kaaft huet, dëst ass net duerch d'Regele verbueden.

Transaktiounsdatum geschéckt: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. Ufroen S-Code: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV mat Kommentar (R-Code + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. S-Code kritt: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. D'Gewënner goufen bestëmmt.

6. Geschéckt Bezuelungen

Als Resultat hu mir eng Schrëtt-fir-Schrëtt Opnam vun der Präiszeechnungsprozedur am Blockchain mat der Fäegkeet et zu all Moment ze kontrolléieren. Et ass bal onméiglech fir den Organisateur d'Resultater op d'mannst ze manipuléieren, et wäert net méi onopfälleg sinn.

determine the winner № 1

All_tickets:
Index: 1 Ticket:139
Index: 2 Ticket:141
Index: 3 Ticket:143
Index: 4 Ticket:145
Index: 5 Ticket:147
Index: 6 Ticket:149
Index: 7 Ticket:151

1. bin -> hex ( bin2hex(sha256(S-code)) ): Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC -> 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596

2. hex -> gmp number: 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 99037963059744689166154019807924045947962565922868104113173478160267437352342

3. gmp -> modulo (mod=7): 99037963059744689166154019807924045947962565922868104113173478160267437352342 -> 4

4. modulo -> ticket: 4 -> 145

determine the winner № 2

All_tickets:

Index: 1 Ticket:139
Index: 2 Ticket:141
Index: 3 Ticket:143
Index: 4 Ticket:147
Index: 5 Ticket:149
Index: 6 Ticket:151

1. bin -> hex ( bin2hex(sha256(previous hex)) ): daf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0
2. hex -> gmp number: 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0 -> 67565829218838067182838043983962684143266386786567427968312120473742580659360
3. gmp -> modulo (mod=6): 67565829218838067182838043983962684143266386786567427968312120473742580659360 -> 1
4. modulo -> ticket: 1 -> 139

End.

Source: will.com

Setzt e Commentaire