Bl-użu ta 'oraklu każwali bl-użu ta' l-eżempju ta 'lotterija

Wieħed filgħodu ltqajt ma’ artiklu dwar ġeneratur ta' numru każwali verifikabbli fuq il-blockchain tal-pjattaforma Waves.

L-istampa ġenerali kienet ċara, iżda l-metodu speċifiku ta' implimentazzjoni ma kienx. Xi kodiċijiet, firem, xiex, fejn, għaliex?

Bosta konsultazzjonijiet mal-awtur tal-oraklu, bħala riżultat, kien possibbli li tgħaqqad il-loġika tat-tpinġija (implimentata fil-PHP) b'algoritmu għall-kisba ta 'numru każwali.

  1. Fil-bidu tal-kampjonat/rawnd, nitolbu l-ewwel parti tal-kodiċi (R-code) mill-oraklu.

    F'dan il-mument, m'hemm l-ebda informazzjoni dwar in-numru ta 'plejers, in-numru ta' postijiet tal-premjijiet, id-daqs tal-ħlasijiet tal-premjijiet, jew l-eżistenza tal-lotterija b'mod ġenerali. L-oraklu, permezz ta 'tranżazzjoni, joħroġ kodiċi każwali personali, li mbagħad jista' jintuża darba biss u biss minn dawk li talbuh. Mill-mod, R-code jista 'jiġi "mixtri" (li jfisser l-ispiża tat-tranżazzjoni tat-talba + kumpens lill-oraklu għat-tranżazzjoni ta' rispons, dan huwa ammont ta 'madwar $ 0.015 bir-rata attwali, il-kodiċi innifsu jinħareġ mingħajr ħlas ) diversi drabi bil-quddiem, sabiex ma tistennax ir-riċevuta tat-tranżazzjoni tar-rispons aktar tard. Għamilt buffer żgħir aġġornat regolarment fid-database.

  2. Il-kampjonat ġeneralment idum 60 blokka tal-blockchain tal-pjattaforma Waves, bħalissa huwa madwar siegħa. Il-kampjonat jitqies lest u magħluq jekk wara 1 blokk ikun hemm mill-inqas żewġ biljetti fih, inkella l-ħin tal-attività tat-tournament jiġi estiż għas-60 blokk li jmiss.
  3. Immedjatament wara li jagħlaq il-kampjonat, niġġeneraw u nibagħtu tranżazzjoni tad-data (aħna nħallsu wkoll kummissjoni ta 'madwar $ 0.005 għaliha), jekk meħtieġ, diversi, li fihom il-kundizzjonijiet kollha tat-tpinġija huma rreġistrati u lista ordnata ta' plejers (biljetti) minn fejn irridu nagħżlu r-rebbieħa.
  4. F'dan l-istadju, diġà għandna l-ewwel parti tal-kodiċi (R-code) flimkien mal-ID tad-data tat-tranżazzjoni (TXID). Nibagħtuhom għall-firma lill-oraklu fil-forma ta 'konkatenazzjoni (R-code + TXID), għal darb'oħra nħallsu kummissjoni + kumpens. L-oraklu jiċċekkja d-dejta riċevuta għall-uniċità u l-appartenenza, u bi tweġiba jibgħatilna t-tieni parti tal-kodiċi (S-code) fil-format sha256, li huwa l-punt tat-tluq għall-ġeneratur ta 'numri każwali.
  5. Biex tikseb numru każwali li jindika n-numru tas-sekwenza tal-biljett rebbieħ, aħna nikkonverti l-kodiċi S mid-dejta binarja sha256 għal rappreżentazzjoni eżadeċimali (HEX). Imbagħad mis-sekwenza HEX li tirriżulta, irridu nġibu numru. Nieħdu l-bqija tad-diviżjoni tan-numru li jirriżulta bin-numru ta 'biljetti (all_tickets) u żid 1 mar-riżultat (biex tikseb in-numru 1 qabel all_tickets). Bħala riżultat, irridu n-numru tas-serje tar-rebbieħ.
  6. Jekk, skont il-kundizzjonijiet tat-tpinġija, hemm diversi rebbieħa, allura nirrepetu l-operazzjonijiet preċedenti f'ammont ugwali għan-numru ta 'postijiet tal-premjijiet. F'dan il-każ, kull darba li nneħħu mil-lista biljett li diġà rebaħ u nnaqqsu all_tickets b'1, u minflok S-code aħna nindikaw in-numru preċedenti li rċevew.

Ejja nħarsu lejn eżempju reali speċifiku, it-tournament Nru 119:

Total 7 biljetti (all_tickets)
Il-biljett jiswa 50 munita (Bet)
Ħlas tal-logħob 10% (Ħlas)

Skont il-kundizzjonijiet tal-lotterija, 30% imorru għall-flus tal-premju, i.e. f'dan il-każ, 2 biljetti għandhom jirċievu premju, li d-daqs tiegħu huwa kkalkulat skond il-formula (Bet*all_tickets-Fee)/2.

1. Irċieva kodiċi R: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Wara li jagħlaq il-kampjonat, għandna lista ta 'biljetti fil-forma ta' pari: numru + indirizz (l-indirizz tal-kartiera li minnu sar il-ħlas għall-parteċipazzjoni fit-tournament). Jekk jogħġbok innota li l-indirizzi jistgħu jiġu ripetuti, dan ifisser li parteċipant wieħed xtara diversi biljetti għal tournament wieħed; dan mhux ipprojbit mir-regoli.

Data tat-tranżazzjoni mibgħuta: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. Kodiċi S mitlub: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV bil-kumment (R-code + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. Irċieva S-code: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. Ir-rebbieħa ġew determinati.

6. Pagamenti mibgħuta

Bħala riżultat, għandna reġistrazzjoni pass pass tal-proċedura tat-tpinġija tal-premjijiet fil-blockchain bil-kapaċità li niċċekkjawha fi kwalunkwe ħin. Huwa kważi impossibbli għall-organizzatur li jimmanipula r-riżultati; għall-inqas, mhux se jkun aktar possibbli li tagħmel dan mingħajr ma jiġi osservat.

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.

Sors: www.habr.com

Żid kumment