Kutumia oracle nasibu kwa kutumia mfano wa bahati nasibu

Asubuhi moja nilikutana na makala kuhusu jenereta ya nambari ya nasibu inayoweza kuthibitishwa kwenye jukwaa la Waves blockchain.

Picha ya jumla ilikuwa wazi, lakini mbinu maalum ya utekelezaji haikuwa hivyo. Baadhi ya misimbo, sahihi, nini, wapi, kwa nini?

Mashauriano kadhaa na mwandishi wa oracle, kama matokeo, iliwezekana kuchanganya mantiki ya kuchora (inayotekelezwa katika PHP) na algorithm ya kupata nambari isiyo ya kawaida.

  1. Mwanzoni mwa mashindano/raundi, tunaomba sehemu ya kwanza ya msimbo (R-code) kutoka kwa chumba cha ndani.

    Kwa wakati huu, hakuna habari kuhusu idadi ya wachezaji, idadi ya nafasi za zawadi, ukubwa wa malipo ya tuzo, au kuwepo kwa bahati nasibu kwa ujumla. Oracle, kupitia shughuli, hutoa nambari ya kibinafsi ya nasibu, ambayo inaweza kutumika mara moja tu na wale walioiomba. Kwa njia, R-code inaweza "kununuliwa" (ikimaanisha gharama ya shughuli ya ombi + fidia kwa chumba cha ndani kwa shughuli ya majibu, hii ni kiasi cha $0.015 kwa kiwango cha sasa, msimbo yenyewe hutolewa bila malipo. ) mara kadhaa mapema, ili usisubiri kupokea shughuli ya majibu baadaye. Nilitengeneza bafa ndogo iliyosasishwa mara kwa mara kwenye hifadhidata.

  2. Mashindano kawaida huchukua vitalu 60 vya blockchain ya jukwaa la Waves, kwa sasa ni takriban saa 1. Mashindano hayo yanachukuliwa kuwa yamekamilika na kufungwa ikiwa baada ya vizuizi 60 kuna angalau tikiti mbili ndani yake, vinginevyo wakati wa shughuli ya mashindano huongezwa kwa vitalu 60 vinavyofuata.
  3. Mara tu baada ya kufungwa kwa mashindano, tunatoa na kutuma shughuli ya tarehe (pia tunalipa tume ya takriban $ 0.005 kwa hiyo), ikiwa ni lazima, kadhaa, ambayo masharti yote ya kuchora yanarekodiwa na orodha iliyoagizwa ya wachezaji (tiketi) ambayo tunahitaji kuchagua washindi.
  4. Katika hatua hii, tayari tunayo sehemu ya kwanza ya msimbo (R-code) pamoja na kitambulisho cha tarehe ya muamala (TXID). Tunawatuma kwa saini kwa chumba cha ndani kwa namna ya kuunganisha (R-code + TXID), tena tunalipa tume + fidia. Oracle hukagua data iliyopokelewa kwa upekee na mali, na kwa kujibu hututumia sehemu ya pili ya msimbo (S-code) katika muundo wa sha256, ambayo ni mahali pa kuanzia kwa jenereta ya nambari isiyo ya kawaida.
  5. Ili kupata nambari nasibu ambayo itaonyesha nambari ya mfuatano wa tikiti ya kushinda, tunabadilisha msimbo wa S kutoka data binary ya sha256 hadi uwakilishi wa hexadecimal (HEX). Kisha kutoka kwa kamba ya HEX inayosababisha, tunapata nambari. Tunapata salio la kugawanya nambari inayotokana na idadi ya tikiti (tiketi_zote) na kuongeza 1 kwa matokeo (ili kupata nambari 1 kabla ya tikiti_zote). Kama matokeo, tunapata nambari ya serial ya mshindi.
  6. Ikiwa, kwa mujibu wa masharti ya kuchora, kuna washindi kadhaa, basi tunarudia shughuli za awali kwa kiasi sawa na idadi ya maeneo ya tuzo. Katika hali hii, kila wakati tunapoondoa kutoka kwenye orodha tikiti ambayo tayari imeshinda na kupunguza tikiti_zote kwa 1, na badala ya msimbo wa S tunaonyesha nambari ya awali iliyopokelewa.

Hebu tuangalie mfano maalum halisi, mashindano No. 119:

Jumla ya tikiti 7 (tiketi_zote)
Tiketi inagharimu sarafu 50 (Bet)
Ada ya mchezo 10% (Ada)

Kwa mujibu wa masharti ya bahati nasibu, 30% huenda kwa fedha za tuzo, i.e. katika hali hii, tikiti 2 lazima zipokee zawadi, saizi yake ambayo inakokotolewa kulingana na fomula (Bet*tiketi_zote-Ada)/2.

1. Imepokea msimbo wa R: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Baada ya kufungwa kwa mashindano, tuna orodha ya tikiti kwa namna ya jozi: nambari + anwani (anwani ya mkoba ambayo malipo ya ushiriki katika mashindano yalifanywa). Tafadhali kumbuka kuwa anwani zinaweza kurudiwa, hii inamaanisha kuwa mshiriki mmoja alinunua tikiti kadhaa za mashindano moja; hii haijakatazwa na sheria.

Tarehe ya muamala imetumwa: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. Msimbo wa S ulioombwa: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV na maoni (R-code + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. Imepokea msimbo wa S: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. Washindi waliamuliwa.

6. Malipo yaliyotumwa

Matokeo yake, tuna rekodi ya hatua kwa hatua ya utaratibu wa kuchora tuzo katika blockchain na uwezo wa kukiangalia wakati wowote. Karibu haiwezekani kwa mratibu kudhibiti matokeo; angalau, haitawezekana tena kuifanya bila kutambuliwa.

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.

Chanzo: mapenzi.com

Kuongeza maoni