Juhusliku oraakli kasutamine loterii nÀitel

Ühel hommikul sattusin artiklile, kontrollitava juhuslike arvude genereerijast Waves platvormi plokiahelas.

Üldine pilt oli selge, kuid konkreetse teostamise meetod ei olnud. Mida teha koodide, allkirjade ja kĂ”igi nende kĂŒsimustega?

PĂ€rast mitmeid konsultatsioone oraakli autoriga Ă”nnestus lĂ”ppkokkuvĂ”ttes ĂŒhendada loosimislahendus (teostatud PHP-s) juhusliku numbri saamise algoritmiga.

  1. Turniiri / vooru alguses kĂŒsime oraaklilt esimest koodijuppi (R-kood).

    Sellisel hetkel pole mingit teavet mĂ€ngijate arvu, auhinnakohtade arvu, auhinnaraha suuruse ja isegi loterii olemasolu kohta. Oraakel annab tehingu kaudu vĂ€lja isikliku juhusliku koodi, mida saab hiljem kasutada ainult ĂŒhe korra ja ainult selle isiku poolt, kes seda kĂŒsis. Muide, R-koodi saab "ostma" (see hĂ”lmab tehingu taotlemise kulusid + kompensatsiooni oraaklile vastustehingu eest, see summa on praeguse kursi korral umbes $0.015, kuid kood vĂ€ljastatakse tasuta) ette mitmeid, et hiljem ei peaks ootele jÀÀma. Loodud vĂ€ike regulaarselt tĂ€iendatav vahemĂ€lu andmebaasis.

  2. Turniir kestab tavaliselt 60 plokki Waves platvormi plokiahelas, mis praegu vÔrdub umbes 1 tunni. Turniir loetakse toimunuks ja suletuks, kui pÀrast 60 plokki on selles vÀhemalt kaks piletit, vastasel juhul pikendatakse turniiri aktiivsusaega veel 60 ploki vÔrra.
  3. Otse turniiri sulgemise jÀrel koostame ja saadame andmete tehingu (mille eest maksame umbes $0.005 tasu), vajadusel mitu, kus on fikseeritud kÔik loosimise tingimused ja korrastatud mÀngijate (piletite) nimekiri, mille hulgast peame vÔitjad valima.
  4. Selles etapis on meil juba esimene koodijupp (R-kood) pluss tehingu ID (TXID). Saadame need oraaklile allkirjastamiseks konkatena (R-kood + TXID), maksame jÀlle tasu + kompensatsiooni. Oraakel kontrollib saadud andmeid unikaalsuse ja kuuluvuse osas ning vastuseks saadab meile teise osa koodist (S-kood) sha256 formaadis, mis on juhuslike arvude generaatori lÀhtepunkt.
  5. Kuna juhuslik number, mis nÀitab vÔitnud pileti jÀrjekorranumbrit, teisendame S-koodi binaarsetest sha256 andmetest heksadesimaalsesse (HEX) esitusesse. SeejÀrel saame saadud HEX stringist numbri. Sigurime jÀÀnuse, jagades saadud numbri piletite koguarvuga (all_tickets) ja lisame tulemusele 1 (et saada number 1 kuni all_tickets). LÔpuks saame vÔitja jÀrjekorranumbri.
  6. Kui loteriivÔitjate arvust on mitu, kordame eelmiseid toiminguid vÔidukohtade arvuga. Iga kord eemaldame vÔitnud pileti nimekirjast ja vÀhendame all_tickets'i 1 vÔrra, ning S-koodi asemel kasutame eelnevalt saadud numbrit.

Vaatame konkreetset reaalset nÀidet, turniir nr 119:

Kokku 7 piletit (all_tickets)
Pileti hind 50 mĂŒnti (Bet)
MĂ€ngutasu 10% (Fee)

Loterii tingimuste kohaselt lÀheb 30% auhindadele, st antud juhul peavad 2 piletit auhinna saama, mille suurust arvutatakse valemiga (Bet*all_tickets-Fee)/2.

1. Saime R-koodi: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. Turniiri sulgemisel on meil piletite nimekiri paaridena: number + aadress (rahakoti aadress, mille kaudu osalustasu maksti). TĂ”stame esile, et aadressid vĂ”ivad korduda, mis tĂ€hendab, et ĂŒks osaleja on ostnud turniiri jaoks mitu piletit, seda ei keelata reeglites.

Saime tehingu kuupÀeva: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. KĂŒsisime S-koodi: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV kommentaariga (R-kood + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. Saime S-koodi: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. MÀÀrasime vÔitjad.

6. Saime vÀljamakseid

Seega on meil plokiahelas samm-sammuline dokumentatsioon auhindade loosimise protsessist, mille saab iga kell kontrollida. Tulemuste manipuleerimine korraldaja poolt on praktiliselt vÔimatu, vÀhemalt ei saa seda juba mÀrkamatult teha.

mÀÀrata vĂ”itja № 1

KÔik_piletid:
Indeks: 1 Pilet:139
Indeks: 2 Pilet:141
Indeks: 3 Pilet:143
Indeks: 4 Pilet:145
Indeks: 5 Pilet:147
Indeks: 6 Pilet:149
Indeks: 7 Pilet:151

1. bin -> hex ( bin2hex(sha256(S-kood)) ): Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC -> 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596

2. hex -> gmp number: 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 99037963059744689166154019807924045947962565922868104113173478160267437352342

3. gmp -> modulo (mod=7): 99037963059744689166154019807924045947962565922868104113173478160267437352342 -> 4

4. modulo -> pilet: 4 -> 145

mÀÀrata vĂ”itja № 2

KÔik_piletid:

Indeks: 1 Pilet:139
Indeks: 2 Pilet:141
Indeks: 3 Pilet:143
Indeks: 4 Pilet:147
Indeks: 5 Pilet:149
Indeks: 6 Pilet:151

1. bin -> hex ( bin2hex(sha256(eelmine hex)) ): daf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0
2. hex -> gmp number: 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0 -> 67565829218838067182838043983962684143266386786567427968312120473742580659360
3. gmp -> modulo (mod=6): 67565829218838067182838043983962684143266386786567427968312120473742580659360 -> 1
4. modulo -> pilet: 1 -> 139

LÔpp.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster