Juhusliku oraakli kasutamine loterii nÀitel

Ühel hommikul jĂ€i mulle silma artikkel kontrollitavast juhuslike arvude generaatorist blockchain Waves platvormil.

Üldine pilt oli arusaadav, kuid konkreetne teostus jĂ€i segaseks. Mis need koodid, allkirjad on, kuhu, miks?

PĂ€rast mitmeid konsultatsioone orakli autoriga Ă”nnestus mul ĂŒhendada loosimise loogika (teostatud PHP-s) juhusliku arvu saamise algoritmiga.

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

    Sel hetkel pole teavet mĂ€ngijate arvu, auhindade arvu, auhindade suuruse ega loterii olemasolu kohta. Oraakel vĂ€ljastab tehingu kaudu isikliku juhusliku koodi, mida saab kasutada ainult ĂŒks kord ja ainult selle isiku poolt, kes seda kĂŒsis. Üks huvitav detail: R-koodi saab ette osta (mĂ”eldes tehingu taotlemise kulu + orakli kompenseerimise kulu vastustehingu eest, see summa on praeguse kursiga umbes $0.015, kuid kood ise antakse tasuta) mitme eksemplari kaupa, et ei peaks hiljem vastustehingu ootele jÀÀma. Olen teinud vĂ€ikese regulaarne tĂ€iendava puhvri andmebaasis.

  2. Turni kestab tavaliselt 60 plokkides Waves platvormi plokiahelas, mis praegu kestab enam-vÀhem 1 tund. Turniiri peetakse toimunuks ja suletuks, kui pÀrast 60 plokki on selles vÀhemalt kaks piletit, vastasel juhul pikendatakse turniiri aktiivsuse aega jÀrgmiste 60 ploki vÔrra.
  3. PÀrast turniiri sulgemist genereerime ja saadame tehingu andmed (mille eest maksame samuti tasu ligikaudu $0.005), vajadusel mitu, kus on fikseeritud kÔik loosimise tingimused ja jÀrjestatud mÀngijate (piletite) loetelu, kust peame valima vÔitjad.
  4. Sellel etapil on meil juba olemas esimene osa koodist (R-kood) pluss tehingu ID (TXID). Saadame need allkirjastamiseks oraaklile kujul ĂŒhendamises (R-kood + TXID), maksame taas tasu + hĂŒvitise. Oraakel kontrollib saadud andmeid unikaalsuse ja kuuluvuse osas ning vastuseks saadab meile teise osa koodist (S-kood) sha256 formaadis, mis on ka juhuslike numbrite generaatori lĂ€htepunkt.
  5. Kuna saada juhuslik number, mis nĂ€itab vĂ”itmise pileti jĂ€rjestusnumbrit, muundame S-koodi binaarsetest andmetest sha256 kuueheksandiks (HEX) esituseks. SeejĂ€rel saame HEX-stringist arvu. Saame ĂŒlejÀÀgi jagamisest saadud numbrist piletite koguarvuga (all_tickets) ja lisame tulemustele 1 (et saada number 1 kuni all_tickets). LĂ”puks saame vĂ”itja jĂ€rjestusnumbri.
  6. Kui loosimise tingimustes on mitu vÔitjat, kordame eelnevaid toiminguid sama palju kordi kui on auhinnakohti. Igal korral eemaldame vÔitnud pileti nimekirjast ja vÀhendame all_tickets vÀÀrtust 1 vÔrra, asendades S-koodi eelnevalt saadud numbriga.

Vaatame konkreetselt tÔelist 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 saama auhinda, mille suurus arvutatakse valemiga (Bet * all_tickets - Fee) / 2.

1. Saime R-koodi: RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE

2. PĂ€rast turniiri lĂ”ppu on meil piletite nimekiri paaride kujul: number + aadress (rahakoti aadress, millega osalemise eest tasuti). VÀÀrib mĂ€rkimist, et aadressid vĂ”ivad korduda, mis tĂ€hendab, et ĂŒks osaleja on ostnud mitu piletit ĂŒhele turniirile, mis ei ole reeglitega keelatud.

Saadetud tehingu kuupÀev: 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

3. Taotlesime S-koodi: FTF3uRyaa4F2uAyD6z5a3CNbTXbQLc7fSR6CFNVjgZYV kommentaariga (R-kood + TXID):
RdbAiAhKhveAtR4eyTKq75noMxdcEoxbE6BvojJjM13VE 82JTMzhHM5xEA2fQ9Qscd5QAJU3DAd8nShLjdVHTer5S

4. Saime S-koodi: Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC

5. MÀÀrasime vÔitjad.

6. Saadetud vÀljamaksed

Tulemuseks on meil plokiahelas samm-sammult fikseerimise protsess auhindade loosimisega, mille kontrollimine on vÔimalik igal ajal. Korraldaja poolt tulemusi vÔltsida on praktiliselt vÔimatu, vÀhemalt ei saa seda enam mÀrkamatult teha.

mÀÀrake 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. binaarne -> kuheksand - (bin2hex(sha256(S-kood))): Ri89jHB4UXZDXY6gT1m4LBDXGMTaYzHozMk4nxiuqVXdC -> 0xdaf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596

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

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

4. modulo -> pilet: 4 -> 145

mÀÀrake 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. binaarne -> kuheksand - (bin2hex(sha256(eelmise kuheksandi))): daf5802953dcb27f89972e38e8900b898733f6a613e6e1c6c5491362c1832596 -> 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0
2. kuheksand -> gmp number: 0x9560e77525e9ea2db92cdb8484dc52046ccafac7c719b8859ff55f0eb92834a0 -> 67565829218838067182838043983962684143266386786567427968312120473742580659360
3. gmp -> modulo (mod=6): 67565829218838067182838043983962684143266386786567427968312120473742580659360 -> 1
4. modulo -> pilet: 1 -> 139

LÔpp.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster