KÄdu rÄ«tu uzgÄju rakstu par
KopÄjÄ aina bija skaidra, bet konkrÄtÄ Ä«stenoÅ”anas metode nebija. Daži kodi, paraksti, kas, kur, kÄpÄc?
VairÄkas konsultÄcijas ar orÄkula autoru, kÄ rezultÄtÄ radÄs iespÄja apvienot zÄ«mÄÅ”anas loÄ£iku (realizÄta PHP) ar nejauÅ”a skaitļa iegÅ«Å”anas algoritmu.
- TurnÄ«ra/raunda sÄkumÄ mÄs pieprasÄm no orÄkula koda pirmo daļu (R-kods).
Å obrÄ«d nav informÄcijas ne par spÄlÄtÄju skaitu, ne par laimestu vietu skaitu, ne par balvu izmaksu apmÄriem, ne par loterijas esamÄ«bu kopumÄ. OrÄkuls, veicot darÄ«jumu, izsniedz personisku nejauÅ”u kodu, ko pÄc tam var izmantot tikai vienu reizi un tikai tie, kas to pieprasÄ«juÅ”i. Starp citu, R-kodu var āiegÄdÄtiesā (tas nozÄ«mÄ pieprasÄ«juma darÄ«juma izmaksas + kompensÄcija orÄkulam par atbildes darÄ«jumu, tÄ ir summa aptuveni USD 0.015 pÄc paÅ”reizÄjÄ kursa, pats kods tiek izsniegts bez maksas ) vairÄkas reizes iepriekÅ”, lai vÄlÄk nesagaidÄ«tu atbildes darÄ«juma saÅemÅ”anu. Es izveidoju nelielu regulÄri atjauninÄtu buferi datu bÄzÄ.
- TurnÄ«rs parasti ilgst 60 Waves platformas blokÄ·Ädes blokus, Å”obrÄ«d tas ir aptuveni 1 stunda. TurnÄ«rs tiek uzskatÄ«ts par pabeigtu un noslÄgtu, ja pÄc 60 blokiem tajÄ ir vismaz divas biļetes, pretÄjÄ gadÄ«jumÄ turnÄ«ra aktivitÄtes laiks tiek pagarinÄts uz nÄkamajiem 60 blokiem.
- Uzreiz pÄc turnÄ«ra slÄgÅ”anas Ä£enerÄjam un nosÅ«tÄm datuma transakciju (par to arÄ« maksÄjam komisijas maksu aptuveni 0.005$), ja nepiecieÅ”ams, vairÄkas, kurÄs tiek fiksÄti visi izlozes nosacÄ«jumi un pasÅ«tÄ«ts spÄlÄtÄju saraksts (biļetes) no kuriem mums ir jÄizvÄlas uzvarÄtÄji.
- Å ajÄ posmÄ mums jau ir pirmÄ koda daļa (R-kods) un darÄ«juma datuma ID (TXID). MÄs tos nosÅ«tÄm parakstÄ«Å”anai orÄkulam savienojuma veidÄ (R-kods + TXID), atkal maksÄjam komisiju + kompensÄciju. OrÄkuls pÄrbauda saÅemto datu unikalitÄti un piederÄ«bu, un atbildot mums nosÅ«ta otro koda daļu (S-kodu) sha256 formÄtÄ, kas ir nejauÅ”o skaitļu Ä£eneratora sÄkumpunkts.
- Lai iegÅ«tu nejauÅ”u skaitli, kas norÄdÄ«s laimÄtÄs biļetes kÄrtas numuru, mÄs konvertÄjam S-kodu no sha256 binÄrajiem datiem uz heksadecimÄlo (HEX) attÄlojumu. Tad no iegÅ«tÄs HEX virknes mÄs iegÅ«stam skaitli. MÄs iegÅ«stam atlikuÅ”o daļu, dalot iegÅ«to skaitli ar biļeÅ”u skaitu (visas_biļetes) un pievienojot rezultÄtam 1 (lai iegÅ«tu skaitli 1 pirms all_tickets). RezultÄtÄ mÄs iegÅ«stam uzvarÄtÄja sÄrijas numuru.
- Ja saskaÅÄ ar izlozes nosacÄ«jumiem ir vairÄki uzvarÄtÄji, tad atkÄrtojam iepriekÅ”ÄjÄs darbÄ«bas apmÄrÄ, kas vienÄds ar balvu vietu skaitu. Å ajÄ gadÄ«jumÄ katru reizi no saraksta izÅemam jau laimÄtu biļeti un samazinÄm all_tickets par 1, un S-koda vietÄ norÄdÄm iepriekÅ” saÅemto numuru.
PaskatÄ«simies uz konkrÄtu reÄlu piemÄru, turnÄ«ru Nr. 119:
KopÄ 7 biļetes (visas_biļetes)
Biļete maksÄ 50 monÄtas (Bet)
SpÄles maksa 10% (Maksa)
AtbilstoÅ”i loterijas nosacÄ«jumiem 30% tiek naudas balvai, t.i. Å”ajÄ gadÄ«jumÄ 2 biļetÄm jÄsaÅem balva, kuras lielums tiek aprÄÄ·inÄts pÄc formulas (Bet*visas_biļetes-Maksa)/2.
1. SaÅemtais R-kods:
2. PÄc turnÄ«ra slÄgÅ”anas mums ir biļeÅ”u saraksts pa pÄriem: numurs + adrese (maka adrese, no kuras tika veikta apmaksa par dalÄ«bu turnÄ«rÄ). LÅ«dzu, Åemiet vÄrÄ, ka adreses var atkÄrtoties, tas nozÄ«mÄ, ka viens dalÄ«bnieks ir iegÄdÄjies vairÄkas biļetes uz vienu turnÄ«ru, tas nav aizliegts ar noteikumiem.
Darījuma datums nosūtīts:
3. Pieprasītais S kods:
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S
4. SaÅemtais S kods:
5. UzvarÄtÄji tika noteikti.
RezultÄtÄ mums ir soli pa solim balvu izlozes procedÅ«ras ieraksts blokÄ·ÄdÄ ar iespÄju to jebkurÄ laikÄ pÄrbaudÄ«t. Organizatoram ir gandrÄ«z neiespÄjami manipulÄt ar rezultÄtiem, vismaz to vairs nevarÄs izdarÄ«t nemanot.
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.
Avots: www.habr.com