Nggunakake oracle acak nggunakake conto lotre

Ing sawijining esuk aku nemoni artikel babagan generator nomer acak diverifikasi ing pamblokiran platform Waves.

Gambar sakabèhé cetha, nanging cara implementasine spesifik ora. Sawetara kode, teken, apa, ing ngendi, kenapa?

Sawetara konsultasi karo penulis oracle, minangka asil, bisa nggabungake logika gambar (dilaksanakake ing PHP) kanthi algoritma kanggo entuk nomer acak.

  1. Ing wiwitan turnamen / babak, kita njaluk bagean pisanan saka kode (R-kode) saka oracle.

    Ing wayahe, ora ana informasi babagan jumlah pemain, nomer panggonan hadiah, ukuran pembayaran hadiah, utawa orane lotre ing umum. Oracle, liwat transaksi, ngetokake kode acak pribadi, sing banjur bisa digunakake mung sapisan lan mung dening sing njaluk. Miturut cara, R-code bisa "dituku" (tegese biaya transaksi panyuwunan + ganti rugi kanggo oracle kanggo transaksi respon, iki jumlah kira-kira $ 0.015 ing tingkat saiki, kode kasebut ditanggepi kanthi gratis. ) kaping pirang-pirang sadurunge, supaya ora ngenteni panrimo saka transaksi respon mengko. Aku nggawe buffer cilik sing dianyari kanthi rutin ing database.

  2. Turnamen kasebut biasane udakara 60 blok pamblokiran platform Waves, saiki kira-kira 1 jam. Turnamen dianggep rampung lan ditutup yen sawise 60 pamblokiran ana ing paling loro karcis, digunakake turnamen wektu kegiatan lengkap kanggo sabanjuré 60 pamblokiran.
  3. Sanalika sawise turnamen ditutup, kita generate lan ngirim transaksi tanggal (kita uga mbayar komisi kira-kira $0.005 kanggo iku), yen perlu, sawetara, kang kabeh kahanan drawing direkam lan dhaftar dhawuh saka pemain (karcis) saka kang kita kudu milih pemenang.
  4. Ing tataran iki, kita wis duwe bagéan pisanan saka kode (R-kode) plus ID tanggal transaksi (TXID). Kita ngirim wong-wong mau kanggo teken kanggo oracle ing wangun concatenation (R-kode + TXID), maneh kita mbayar komisi + rugi. Oracle mriksa data sing ditampa kanggo uniqueness lan gadhahanipun, lan nanggepi ngirim kita bagean kapindho kode (S-kode) ing format sha256, kang titik wiwitan kanggo generator nomer acak.
  5. Diwenehi nomer acak sing bakal nunjukaké nomer urutan saka tiket menang, Ngonversi S-kode saka sha256 data binar kanggo hexadecimal (HEX) perwakilan. Banjur saka senar HEX sing diasilake, kita entuk nomer. Kita entuk sisa kanggo mbagi nomer asil kanthi jumlah tiket (all_tickets) lan nambah 1 menyang asil (kanggo entuk nomer 1 sadurunge all_tickets). Akibaté, kita entuk nomer seri pemenang.
  6. Yen, miturut kahanan drawing, ana sawetara pemenang, banjur kita mbaleni operasi sadurungé ing jumlah witjaksono kanggo nomer panggonan hadiah. Ing kasus iki, saben-saben kita mbusak saka dhaftar tiket sing wis menang lan ngurangi all_tickets dening 1, lan tinimbang S-kode kita nunjukaké nomer sadurunge ditampa.

Ayo katon ing conto nyata tartamtu, turnamen No. 119:

Total 7 tiket (all_tickets)
Biaya tiket 50 dhuwit recehan (Bet)
Biaya game 10% (Fee)

Miturut kondisi lotre, 30% menyang hadiah dhuwit, i.e. ing kasus iki, 2 tiket kudu nampa hadiah, ukuran sing diwilang miturut rumus (Bet * all_tickets-Fee) / 2.

1. Ditampa R-kode: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Sawise turnamen ditutup, kita duwe dhaptar tiket ing wangun pasangan: nomer + alamat (alamat dompet saka ngendi pembayaran kanggo partisipasi ing turnamen digawe). Wigati dicathet menawa alamat bisa diulang, iki tegese siji peserta tuku sawetara tiket kanggo siji turnamen; iki ora dilarang dening aturan.

Tanggal transaksi dikirim: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. Dijaluk S-kode: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV karo komentar (R-kode + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. Ditampa S-kode: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. Sing menang wis ditemtokake.

6. Dikirim pembayaran

Akibaté, kita duwe rekaman langkah-langkah saka prosedur gambar hadiah ing blockchain kanthi kemampuan kanggo mriksa kapan wae. Meh mokal kanggo penyelenggara kanggo ngapusi asil; paling ora, ora bakal bisa ditindakake kanthi ora dingerteni.

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: www.habr.com

Add a comment