Sèvi ak yon oracle o aza lè l sèvi avèk egzanp yon lotri

Yon maten mwen te rankontre yon atik sou dèlko nimewo o aza verifyab sou blockchain platfòm Waves.

Foto an jeneral te klè, men metòd aplikasyon espesifik la pa t '. Kèk kòd, siyati, kisa, ki kote, poukisa?

Plizyè konsiltasyon ak otè a nan Oracle, kòm yon rezilta, li te posib konbine lojik desen an (aplike nan PHP) ak yon algorithm pou jwenn yon nimewo o aza.

  1. Nan kòmansman tounwa/wonn lan, nou mande premye pati kòd la (R-kod) nan men Oracle la.

    Nan moman sa a, pa gen okenn enfòmasyon sou kantite jwè yo, kantite plas pri yo, gwosè a nan peman pri, oswa egzistans la nan lotri a an jeneral. Oracle a, atravè yon tranzaksyon, bay yon kòd pèsonèl o aza, ki ka Lè sa a, dwe itilize sèlman yon fwa epi sèlman pa moun ki mande li. By wout la, R-kòd ka "achte" (sa vle di pri a nan tranzaksyon an demann + konpansasyon bay Oracle a pou tranzaksyon an repons, sa a se yon kantite lajan sou $ 0.015 nan pousantaj aktyèl la, kòd la li menm yo bay gratis. ) plizyè fwa davans, se konsa yo pa rete tann pou resevwa tranzaksyon an repons pita. Mwen te fè yon ti tanpon regilyèman mete ajou nan baz done a.

  2. Tounwa a anjeneral dire 60 blòk nan blockchain platfòm Waves, nan moman sa a li se apeprè 1 èdtan. Yo konsidere tounwa a fini epi fèmen si apre 60 blòk gen omwen de tikè ladan l, sinon tan aktivite tounwa a pwolonje pou pwochen 60 blòk yo.
  3. Touswit apre tounwa a fèmen, nou jenere epi voye yon tranzaksyon dat (nou tou peye yon komisyon apeprè $ 0.005 pou li), si sa nesesè, plizyè, nan ki tout kondisyon yo nan desen an yo anrejistre ak yon lis òdone jwè yo (tikè) soti nan ki nou bezwen chwazi ganyan yo.
  4. Nan etap sa a, nou deja gen premye pati nan kòd la (R-kòd) plis idantite dat tranzaksyon an (TXID). Nou voye yo pou siyati bay Oracle la nan fòm konkatènasyon (R-kòd + TXID), ankò nou peye yon komisyon + konpansasyon. Oracle a tcheke done yo resevwa pou singularité ak fè pati, ak nan repons voye nou dezyèm pati nan kòd la (S-kòd) nan fòma sha256, ki se pwen an kòmanse pou dèlko nimewo o aza.
  5. Pou jwenn yon nimewo o aza ki pral endike nimewo sekans tikè genyen an, nou konvèti kòd S la soti nan done binè sha256 nan yon reprezantasyon egzadesimal (HEX). Lè sa a, soti nan fisèl HEX ki kapab lakòz, nou jwenn yon nimewo. Nou jwenn rès la nan divize nimewo a ki lakòz pa kantite tikè (all_tickets) epi ajoute 1 nan rezilta a (pou jwenn nimewo 1 a anvan all_tickets). Kòm yon rezilta, nou jwenn nimewo seri gayan an.
  6. Si, dapre kondisyon yo nan desen an, gen plizyè ganyan, Lè sa a, nou repete operasyon anvan yo nan yon kantite lajan ki egal a kantite plas pri. Nan ka sa a, chak fwa nou retire nan lis la yon tikè ki te deja genyen epi redwi all_tickets pa 1, epi olye pou S-code nou endike nimewo anvan an te resevwa.

Ann gade yon egzanp reyèl espesifik, tounwa No 119:

Total 7 tikè (all_tickets)
Tikè koute 50 pyès monnen (Parye)
Frè jwèt 10% (Frè)

Dapre kondisyon yo nan lotri a, 30% ale nan lajan an pri, i.e. nan ka sa a, 2 tikè dwe resevwa yon pri, gwosè a yo kalkile dapre fòmil la (Bet*all_tickets-Fee)/2.

1. Resevwa R-kòd: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Apre tounwa a fèmen, nou gen yon lis tikè sou fòm pè: nimewo + adrès (adrès bous la ki te fè peman pou patisipasyon nan tounwa a). Tanpri sonje ke adrès yo ka repete, sa vle di ke yon patisipan te achte plizyè tikè pou yon tounwa; sa pa entèdi pa règ yo.

Dat tranzaksyon voye: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. Mande S-kòd: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV ak kòmantè (R-kòd + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. Resevwa S-kòd: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. Yo te detèmine ganyan yo.

6. Voye peman yo

Kòm yon rezilta, nou gen yon anrejistreman etap-pa-etap nan pwosedi a desen pri nan blockchain la ak kapasite nan tcheke li nan nenpòt ki lè. Li prèske enposib pou òganizatè a manipile rezilta yo; omwen, li p ap posib ankò fè li inapèsi.

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.

Sous: www.habr.com

Add nouvo kòmantè