Ngagunakeun oracle acak ngagunakeun conto lotre a

Hiji isuk kuring datang di sakuliah artikel ngeunaan generator angka acak verifiable dina platform Waves blockchain.

Gambar sakabéh éta jelas, tapi metoda palaksanaan husus henteu. Sababaraha kode, tanda tangan, naon, dimana, kunaon?

Sababaraha konsultasi sareng panulis Oracle, salaku hasilna, éta tiasa ngagabungkeun logika gambar (dilaksanakeun dina PHP) sareng algoritma pikeun kéngingkeun nomer acak.

  1. Dina mimiti turnamén / babak, urang menta bagian mimiti kode (R-kode) ti Oracle nu.

    Dina waktos ayeuna, teu aya inpormasi ngeunaan jumlah pamaén, jumlah tempat hadiah, ukuran pangmayaran hadiah, atanapi ayana lotre sacara umum. Oracle, ngalangkungan transaksi, ngaluarkeun kode acak pribadi, anu teras tiasa dianggo ngan sakali sareng ngan ku anu naroskeunana. Ku jalan kitu, R-kode bisa "dibeuli" (hartina biaya transaksi pamundut + santunan ka Oracle pikeun urus respon, ieu jumlahna ngeunaan $ 0.015 dina laju ayeuna, kode sorangan dikaluarkeun haratis. ) sababaraha kali sateuacanna, ku kituna teu ngadagoan resi urus respon engké. Kuring nyieun panyangga leutik diropéa rutin dina database.

  2. Turnamén biasana lumangsung 60 blok tina platform blockchain Waves, dina momen éta kurang leuwih 1 jam. Turnamén dianggap réngsé sarta ditutup lamun sanggeus 60 blok aya sahanteuna dua tiket di dinya, disebutkeun waktu kagiatan turnamén dilegaan pikeun salajengna 60 blok.
  3. Langsung saatos pasanggiri ditutup, urang ngahasilkeun sarta ngirimkeun urus tanggal (urang ogé mayar komisi kira $ 0.005 pikeun eta), lamun perlu, sababaraha, nu sagala kaayaan gambar dirékam sarta daptar maréntahkeun pamaén (tikét) ti mana urang kudu milih winners.
  4. Dina tahap ieu, urang geus boga bagian mimiti kode (R-kode) tambah ID tanggal transaksi (TXID). Urang ngirim aranjeunna pikeun signature mun oracle dina bentuk concatenation (R-kode + TXID), deui urang mayar komisi a + santunan. Oracle mariksa data anu ditampi pikeun uniqueness tur milik, sarta respon ngirimkeun kami bagian kadua kode (S-kode) dina format sha256, nu titik awal pikeun generator angka acak.
  5. Pikeun ménta jumlah acak nu bakal nunjukkeun nomer runtuyan tikét unggul, urang ngarobah S-kode tina data binér sha256 ka hexadecimal (HEX) ngagambarkeun. Lajeng tina string HEX dihasilkeun, urang meunang angka. Urang meunang sésana ngabagi jumlah hasilna ku jumlah tiket (all_tickets) jeung nambahkeun 1 kana hasilna (pikeun meunangkeun angka 1 saméméh all_tickets). Hasilna, urang meunang nomer serial tina juara.
  6. Lamun, nurutkeun kaayaan gambar, aya sababaraha winners, teras urang ngulang operasi saméméhna dina jumlah sarua jeung jumlah tempat hadiah. Dina hal ieu, unggal waktos urang nyabut tina daptar tikét anu geus meunang sarta ngurangan all_tickets ku 1, sarta tinimbang S-kode kami nunjukkeun jumlah saméméhna narima.

Hayu urang nempo conto nyata husus, turnamén No.. 119:

Total 7 tiket (all_tickets)
Harga tiket 50 koin (bet)
Biaya kaulinan 10% (Biaya)

Numutkeun kaayaan lotre, 30% mana anu ka hadiah duit, i.e. dina hal ieu, 2 tiket kudu nampa hadiah, ukuran nu diitung nurutkeun rumus (bet * all_tickets-Fee) / 2.

1. Nampa R-kode: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Saatos turnamén nutup, urang boga daptar tikét dina bentuk pasangan: angka + alamat (alamat dompét ti mana mayar pikeun partisipasi dina turnamén dijieun). Punten dicatet yén alamat tiasa diulang, ieu hartosna hiji pamilon mésér sababaraha tikét pikeun hiji turnamen; ieu henteu dilarang ku aturan.

Tanggal transaksi dikirim: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. Dipénta S-kode: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV kalawan komentar (R-kode + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. Nampa S-kode: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. Winners ditangtukeun.

6. Dikirim pangmayaran

Hasilna, urang gaduh léngkah-léngkah ngarékam prosedur gambar hadiah dina blokchain kalayan kamampuan mariksa iraha waé. Ampir teu mungkin pikeun panitia pikeun ngamanipulasi hasil; sahenteuna, éta moal mungkin deui ngalakukeunana tanpa ditingali.

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.

sumber: www.habr.com

Tambahkeun komentar