RSA random on blockchain

Dhibaato ayaa jirta - way adag tahay in la abuuro lambar random shabakad baahsan. Ku dhawaad ​​​​dhammaan xannibaadaha ayaa horay ula kulmay tan. Runtii, shabakadaha aysan jirin kalsooni ka dhaxaysa isticmaalayaasha, abuurista lambar aan la dafiri karin ayaa xallisa dhibaatooyin badan.

Maqaalkan waxaan kuu sheegaynaa sida aan ugu suurtagashay in aan xallino dhibaatada annaga oo tusaale ahaan u isticmaalnay ciyaaraha. Waxaa ugu horeeyay Hirarka Xmas Tree. Horumarka, waxaan u baahnay koronto-dhaliye lambar random.

RSA random on blockchain

Markii hore, waxaan qorsheynay inaan abuurno tiro ku saleysan macluumaadka blockchain. Si kastaba ha ahaatee, ka dib waxaa caddaatay: tirada waa la isticmaali karaa, taas oo macnaheedu yahay xalku maaha mid ku habboon.

Waxaan la nimid hab-hawleed: isticmaal nidaamka ballan-ballaadhinta. Server-ku waxa uu qiyaasay tiro min 1 ilaa 5 ah, waxa uu ku daray milix, ka dibna natiijadii buu xadhkaha goostay isaga oo isticmaalaya Hawlaha Keccak. Seerfarku waxa uu geeyay qandaraaska caqliga leh nambarkii hore loo kaydiyay. Waxaa soo baxday in ciyaartu ay hoos ugu dhacayso isticmaaluhu isagoo qiyaasaya lambarka uu qariyay xashiishku.

Ciyaaryahanka ayaa dhigay sharad, iyo server u diray lambarka qarsoon iyo "milix" qandaraaska smart. Si fudud, wuxuu muujiyay kaararka. Intaa ka dib, server-ku wuxuu hubiyay tirooyinka wuxuuna go'aansaday in isticmaaluhu uu guuleystay ama laga badiyay.

Haddii serferku aanu soo dirin lambar ama “cusbo” si loo xaqiijiyo, isticmaaluhu wuu guulaystay. Xaaladdan oo kale, ciyaar kasta waxay ahayd lagama maarmaan in horay loo sii wado qandaraas caqli-gal ah oo lagu daro guulo suurtagal ah. Waxay noqotay mid aan munaasib ahayn, waqti badan qaadanaysa oo qaali ah. Waqtigaas ma jirin xal kale oo ammaan ah.

Dhawaan, kooxda Tradisys waxay soo jeediyeen in lagu daro shaqada borotokoolka Waves rsaVerify(). Waxay hubinaysaa ansaxnimada saxiixa RSA iyadoo ku saleysan furaha guud iyo kan gaarka ah. Natiijo ahaan, muuqaalka ayaa lagu daray.

Waxaan sameynay seddex kulan: Laadhuu Roller, Coin Flip и Ku fuul Mowjadaha. Mid kastaa wuxuu hirgeliyaa tignoolajiyada lambarka random. Aynu ogaano sida ay u shaqeyso.

RSA random on blockchain

Aynu eegno abuurista lambar random anagoo adeegsanayna Ride on Waves tusaale ahaan. Qandaraaska caqliga leh waa la heli karaa halkan.

Tag tab script dooro La kala saaray. Waxaad arki doontaa koodhka qandaraaska ee smart (aka script).

RSA random on blockchain

Koodhka qandaraaska smart wuxuu ka kooban yahay hawlo shaqo. Kuwa lagu calaamadeeyay @Callable waxa lagu bilaabi karaa iyadoo la isticmaalayo Wax kala iibsiga wacitaanka. Waxaan xiisaynaynaa laba hawlood: bet и baxaan:

  • sharadka func (playerChoice)
  • func ka noqoshada (gameId, rsaSign)

1. Isticmaaluhu wuxuu dooranayaa dhererka qaybta iyo cabbirka sharadka.

RSA random on blockchain

2. Macmiilku wuxuu abuuraa shaqo sharad. Sawirka kore wuxuu noqon lahaa sharad("50").

3. Macmiilku wuxuu u soo diraa macaamilka Caymiska Ciwaanka qandaraaska ee smart (baahinta InvocationTx). Wax kala iibsigu waxa uu ka kooban yahay shaqada sharad sida halbeegga wacitaanka. Tani waxay ka dhigan tahay in macaamilka Caymiska uu kicinayo fulinta shaqada sharadka (doorashada: String) ee qandaraaska caqliga leh.

RSA random on blockchain

4. Tixgeli shaqada sharadka:

@Callable(i)
func bet (playerChoice) = {
    let newGameNum = IncrementGameNum()
    let gameId = toBase58String(i.transactionId)
    let pmt = extract(i.payment)
    let betNotInWaves = isDefined(pmt.assetId)
    let feeNotInWaves = isDefined(pmt.assetId)
    let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
    let txIdUsed = isDefined(getString(this, gameId))
    if (betNotInWaves)
        then throw ("Bet amount must be in Waves")
        else if (feeNotInWaves)
            then throw ("Transaction's fee must be in Waves")
            else if (txIdUsed)
                then throw ("Passed txId had been used before. Game aborted.")
                else {
                    let playerPubKey58 = toBase58String(i.callerPublicKey)
                    let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
                    ScriptResult(WriteSet(cons(DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), cons(DataEntry(GAMESCOUNTERKEY, newGameNum), cons(DataEntry(gameId, gameDataStr), nil)))), TransferSet(cons(ScriptTransfer(SERVER, COMMISSION, unit), nil)))
                    }
    }

Shaqadu waxay u qortaa ciyaar cusub xaaladda qandaraaska smart. Kuwaas oo kala ah:

  • Aqoonsiga gaarka ah ee ciyaar cusub (ID ciyaarta)
  • Xaaladda ciyaarta = LAGU SOO GUDBIYO
  • Doorashada ciyaartoyga (dhererka qaybta 50)
  • Furaha dadweynaha
  • Guulaha suurtagalka ah (waxay kuxirantahay sharadka ciyaaryahanka)

RSA random on blockchain

Tani waa sida xogta ku jirta blockchain ay u egtahay (qiimaha muhiimka ah):

{
    "type": "string",
    "value": "03WON_0283_448t8Jn9P3717UnXFEVD5VWjfeGE5gBNeWg58H2aJeQEgJ_06574069_09116020000_0229",
    "key": "2GKTX6NLTgUrE4iy9HtpSSHpZ3G8W4cMfdjyvvnc21dx"
  }

"Furaha" (furaha) - ciyaarta id ciyaar cusub. Xogta soo hartay waxay ku jirtaa xariiqda goobta "qiimaha". Galitaankan waxa lagu kaydiyaa tabka Data qandaraas caqli gal ah:

RSA random on blockchain

RSA random on blockchain

5. Adeeguhu "wuxuu eegayaa" qandaraaska caqliga leh wuxuuna helaa macaamilka la soo diray (ciyaaraha cusub) isagoo isticmaalaya blockchain Api. Game id ee ciyaarta cusub waxaa horey loogu duubay blockchain, taas oo macnaheedu yahay in aan la bedeli karin ama saameyn

6. Server-ku wuxuu abuuraa shaqo ka-noqosho (gameId, rsaSign). Tusaale ahaan, sida tan:

withdraw ("FwsuaaShC6DMWdSWQ5osGWtYkVbTEZrsnxqDbVx5oUpq", "base64:Gy69dKdmXUEsAmUrpoWxDLTQOGj5/qO8COA+QjyPVYTAjxXYvEESJbSiCSBRRCOAliqCWwaS161nWqoTL/TltiIvw3nKyd4RJIBNSIgEWGM1tEtNwwnRwSVHs7ToNfZ2Dvk/GgPUqLFDSjnRQpTHdHUPj9mQ8erWw0r6cJXrzfcagKg3yY/0wJ6AyIrflR35mUCK4cO7KumdvC9Mx0hr/ojlHhN732nuG8ps4CUlRw3CkNjNIajBUlyKQwpBKmmiy3yJa/QM5PLxqdppmfFS9y0sxgSlfLOgZ51xRDYuS8NViOA7c1JssH48ZtDbBT5yqzRJXs3RnmZcMDr/q0x6Bg==")

7. Seerfarku waxa uu u diraa macaamilka Caymiska heshiiska caqliga leh (baahinta InvocationTx). Wax kala iibsiga waxa uu ka kooban yahay wacitaanka shaqada ka noqoshada la sameeyay (gameId, rsaSign):

RSA random on blockchain

Shaqadu waxay ka kooban tahay ciyaarta id ciyaar cusub iyo natiijada saxiixa RSA ee aqoonsi gaar ah oo leh fure gaar ah. Natiijadii saxeexa waxba iskama beddelin.

Maxay tani micnaheedu tahay?

Waxaan qaadanaa isla qiime isku mid ah (ID ciyaarta) waxaana ku dabaqnaa habka saxiixa RSA. Had iyo jeer waxaan heli doonaa natiijo isku mid ah. Tani waa sida RSA algorithm u shaqeyso. Tirada kama dambaysta ah lama qaban karo, mar haddii aan la garanayn aqoonsiga ciyaarta iyo natiijada codsiga RSA. Xulashada nambar sidoo kale waa macno darro.

8. Blockchain waxay aqbashaa wax kala iibsiga. Waxay waddaa shaqada ka noqoshada (gameId, rsaSign)

9. Gudaha shaqada ka-noqoshada, ka-noqoshada ayaa dhacda GenerateRandInt (gameId, rsaSign). Kani waa dhaliye lambar random

# @return 1 ... 100
func GenerateRandInt (gameId,rsaSign) = {
   	# verify RSA signature to proof random
    let rsaSigValid = rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
    if (rsaSigValid)
        then {
            let rand = (toInt(sha256(rsaSign)) % 100)
            if ((0 > rand))
                then ((-1 * rand) + 1)
                else (rand + 1)
            }
        else throw ("Invalid RSA signature")
    }

rand - oo waxaa jira tiro aan toos ahayn.

Marka hore, xadhigga ayaa la qaadayaa, taas oo ah natiijada saxiixa RSA ciyaarta id furaha gaarka ah (rsaSign). Kadibna ku dheji SHA-256 (sha256 (rsaSign)).

Ma saadaalin karno natiijada saxeexa iyo xashiishada dambe. Sidaa darteed, suurtagal maaha in saameyn lagu yeesho jiilka tirada aan tooska ahayn. Si aad u heshid tiro go'an (tusaale ahaan, laga bilaabo 1 ilaa 100), isticmaal shaqada beddelka toInt iyo %100 (oo la mid ah ka dhanka ah).

Bilowgii maqaalka waxaan ku xusnay shaqada rsaVerify(), kaas oo kuu ogolaanaya inaad hubiso ansaxnimada saxeexa RSA oo wata fure gaar ah oo ka dhanka ah mid guud. Waa kan qaybta GenerateRandInt(gameId,rsaSign):

rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)

Furaha dadweynaha ee RSAPUBLIC iyo xargaha rsaSign waxaa loo gudbiyaa gelinta. Saxeexa waa la hubiyaa inuu ansax yahay. Lambarka ayaa la sameeyay haddii jeeggu guulaysto. Haddii kale, nidaamku waxa uu u arkaa in aanu saxeexu ansax ahayn (saxiixa RSA-da aan sax ahayn).

Seerfarku waa inuu ku saxeexaa aqoonsiga ciyaarta fure gaar ah oo u soo diraa saxeex Rsa sax ah gudaha 2880 blocks. Halbeegga waxa la habeeyey marka la dirayo qandaraaska caqliga leh. Haddii aanay waxba ku dhicin wakhtiga loo qabtay, isticmaaluhu wuu guulaysan. Xaaladdan oo kale, abaalmarinta waa in laguu soo diraa ciwaankaaga laftaada. Waxay soo baxday in aysan "faa'iido u lahayn server-ku inuu khiyaamo", sababtoo ah tani waxay keenaysaa khasaare. Hoos waxaa ah tusaale

RSA random on blockchain

Isticmaaluhu wuu ciyaarayaa Laadhuu Roller. Waxaan doortay 2 ka mid ah 6da dhinac ee cube, sharadku waa 14 WAVES. Haddii server-ku aanu u soo dirin saxeexa RSA sax ah heshiiska caqliga leh wakhtiga la cayimay (2880 blocks), isticmaaluhu wuxuu qaadanayaa 34.44 WAVES.

Si loo abuuro tirooyinka ciyaaraha, waxaan isticmaalnaa oracle - mid dibadda ah, oo aan ahayn blockchain. Seerfarku waxa uu sameeyaa saxeexa RSA ee aqoonsiga ciyaarta. Qandaraaska caqliga leh ayaa hubinaya ansaxnimada saxiixa wuxuuna go'aamiyaa guuleystaha. Haddii server-ku aanu waxba soo dirin, markaas isticmaaluhu si toos ah ayuu u guulaysanayaa.

Tani waa hab jiil daacad ah, sababtoo ah wax-is-daba-marinta farsamo ahaan waa wax aan macquul ahayn. Dhammaan ciyaaraha Tradisys waxay ku shaqeeyaan algorithm-ka la sharraxay. Tani waa sida ay ciyaaraha blockchain u shaqeeyaan. Wax walba waa daah-furan oo la xaqiijin karo. Ma jiraan wax analoog ah oo nidaamkan ah oo ku jira blockchain kale. Tani waa random cadaalad ah.

Source: www.habr.com

Add a comment