Bi karanîna nimûneya lotoyê, orakulek rasthatî bikar bînin

Sibehekê ez rastî gotarek hatim afirînerê hejmarên çawalêhatoyê yên verastkirî li ser bloka platforma Waves.

Wêneya giştî zelal bû, lê rêbaza pêkanîna taybetî ne wusa bû. Hin kod, îmze, çi, li ku, çima?

Gelek şêwirdariyên bi nivîskarê oracle re, di encamê de, gengaz bû ku meriv mantiqa xêzkirinê (di PHP-ê de hatî bicîh kirin) bi algorîtmayek ji bo bidestxistina jimareyek bêserûber were berhev kirin.

  1. Di destpêka tûrnûvayê/dorê de, em beşa yekem a kodê (R-kod) ji oracle daxwaz dikin.

    Di vê gavê de, di derbarê hejmara lîstikvanan, hejmara cîhên xelatan, mezinahiya dravdana xelatan, an jî hebûna lotoyê bi gelemperî de ti agahî tune. Oracle, bi navgîniya danûstendinê, kodek rasthatî ya kesane derdixe, ku wê hingê dikare tenê carekê û tenê ji hêla kesên ku ew daxwaz kirine were bikar anîn. Bi awayê, R-kodê dikare "kirrîn" (tê wateya lêçûna danûstendina daxwaznameyê + tezmînata oracle ji bo danûstendina bersivê, ev mîqdarek bi qasî 0.015 $ bi rêjeya heyî ye, kod bixwe belaş tê derxistin. ) çend caran di pêş de, da ku paşê li benda wergirtina danûstendina bersivê nemînin. Min di databasê de tamponek piçûk a bi rêkûpêk nûvekirî çêkir.

  2. Tûrnûva bi gelemperî 60 blokên zincîra bloka platforma Waves berdewam dike, heya niha ew bi qasî 1 saet e. Ger piştî 60 blokan herî kêm du bilêt tê de hebin, tûrnûva temam û girtî tê hesibandin, wekî din dema çalakiya tûrnûvayê ji bo 60 blokên din tê dirêj kirin.
  3. Tavilê piştî ku tûrnûva biqede, em danûstendinek tarîxê çêdikin û dişînin (di heman demê de em ji bo wê komîsyonek bi qasî 0.005 $ jî didin), heke hewce be, çendîn, ku tê de hemî mercên xêzkirinê têne tomar kirin û navnîşek rêzkirî ya lîstikvanan (bilêt) têne tomar kirin. ji wan hewce ye ku em serketiyan hilbijêrin.
  4. Di vê qonaxê de, me jixwe beşa yekem a kodê (R-kod) plus nasnameya dîroka danûstendinê (TXID) heye. Em wan di forma hevgirtinê (R-kod + TXID) ji bo îmzeyê dişînin oracle, dîsa em komîsyon + tezmînatê didin. Oracle daneyên wergirtî ji bo bêhempabûn û aîdiyeta xwe kontrol dike, û di bersivê de beşa duyemîn a kodê (S-koda) bi formata sha256 ji me re dişîne, ku xala destpêkê ye ji bo hilberînerê hejmarên bêserûber.
  5. Ji bo bidestxistina jimareyek rasthatî ya ku dê jimareya rêza bilêta serketî nîşan bide, em koda S-ya ji daneya binaryê sha256 vediguhezînin nûnertiyek hexadecimal (HEX). Dûv re ji rêzika HEX-ê ya encam, em jimareyek digirin. Em mayî ya dabeşkirina hejmarê li ser hejmara bilêtan (hemû_bilet) digirin û 1-ê li encamê zêde dikin (ji bo ku hejmara 1-ê ya berî hemî_bilêtan bistînin). Wekî encamek, em jimareya serketî ya serketî distînin.
  6. Ger, li gorî şert û mercên xêzkirinê, çend serketî hebin, wê hingê em operasyonên berê bi qasî hejmara cîhên xelatê dubare dikin. Di vê rewşê de, her carê ku em ji navnîşê bilêtek ku berê qezenc kiriye derdixin û hemî_biletan bi 1 kêm dikin, û li şûna S-kodê em jimareya berê ya wergirtî destnîşan dikin.

Ka em li mînakek rastîn a taybetî, tûrnûvaya jimare 119 binêrin:

Bi tevahî 7 bilêt (hemû_bilet)
Buhayê bilêtê 50 zîv (Bet)
Xerca lîstikê 10% (Xerc)

Li gor şert û mercên lotoyê %30 diçe pereyê xelatê, yanî. di vê rewşê de divê 2 bilêt xelatek werbigirin ku mezinahiya wê li gorî formula (Bet*hemû_bilet-Xerc)/2 tê hesibandin.

1. R-kod wergirt: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Piştî ku tûrnûva diqede, navnîşek bilêtan di forma cotan de heye: jimar + navnîşan (navnîşana berîka ku ji bo beşdarbûna tûrnûvayê drav tê dayîn). Ji kerema xwe not bikin ku navnîşan dikarin werin dubare kirin, ev tê vê wateyê ku yek beşdarvanek çend bilêtên yek tûrnûvayê kirî ev ji hêla rêbazan ve ne qedexe ye.

Dîroka danûstandinê şandin: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. S-koda daxwazkirî: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV bi şîroveyê (R-kod + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. S-koda wergirtiye: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. Serketî hatin diyarkirin.

6. Pereyên şandin

Wekî encamek, me qeydek gav-bi-gav a prosedûra xêzkirina xelatê di zincîra blokê de heye ku di her kêliyê de wê kontrol bikin. Hema bêje ne mumkin e ku organîzator bi kêmanî manîpulekirina encaman bike, ew ê êdî ne gengaz be ku meriv vê yekê ji nedîtî ve were.

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