RSA isina kurongeka pa blockchain

Pane dambudziko - zvakaoma kugadzira nhamba isina kurongeka mudecentralized network. Anenge ese ma blockchains akatosangana neizvi. Chokwadi, mumanetiweki umo pasina kuvimbana pakati pevashandisi, kugadzira nhamba isingarambiki inogadzirisa matambudziko mazhinji.

Muchikamu chino tinokuudza kuti takakwanisa sei kugadzirisa dambudziko tichishandisa mitambo semuenzaniso. Wokutanga wavo aiva Waves Xmas Tree. Kuti tisimudzire, taida jenareta yenhamba isina kurongeka.

RSA isina kurongeka pa blockchain

Pakutanga, isu takaronga kugadzira nhamba zvichienderana neruzivo kubva ku blockchain. Zvisinei, zvakabva zvajeka: nhamba yacho inogona kushandiswa, zvinoreva kuti mhinduro haina kukodzera.

Isu takauya nea workaround: shandisa kuzvipira-kuwedzera chirongwa. Sevha yakafembera nhamba kubva pa1 kusvika ku5, yakawedzera munyu kwairi, uye ndokukurumidza mhedzisiro uchishandisa Keccak mabasa. Sevha yakatumira kondirakiti yakangwara nenhamba yakatochengetwa kare. Zvinoitika kuti mutambo unovira kusvika kune mushandisi kufungidzira nhamba yakavanzwa neheshi.

Mutambi akaisa bheti, uye sevha yakatumira nhamba yakavanzwa uye "munyu" kune chibvumirano chakangwara. Mumashoko akapfava, akazivisa makadhi. Mushure meizvozvo, sevha yakatarisa manhamba uye yakafunga kuti mushandisi akakunda here kana kuti akarasikirwa.

Kana sevha isina kutumira nhamba kana "munyu" kuti ionekwe, mushandisi akakunda. Muchiitiko ichi, pamutambo wega wega zvaive zvakakodzera kuendesa kontrakiti yakangwara pachine nguva uye kusanganisira inogona kuhwina mairi. Zvakazonetsa, zvichitora nguva uye zvinodhura. Panguva iyoyo pakanga pasina imwe nzira yakachengeteka.

Nguva pfupi yadarika, timu yeTradisys yakaronga kuwedzera basa kuWaves protocol rsaVerify (). Inotarisa huchokwadi hweiyo RSA siginicha zvichienderana neruzhinji uye yakavanzika kiyi. Nekuda kweizvozvo, chimiro chakawedzerwa.

Takagadzira mitambo mitatu: Dice Roller, Mari Yepamutemo ΠΈ Ride On Waves. Imwe neimwe inoshandisa zvisina kujairika nhamba tekinoroji. Ngatione kuti zvinoshanda sei.

RSA isina kurongeka pa blockchain

Ngatitarisei kugadzira nhamba isina kurongeka tichishandisa Ride on Waves semuenzaniso. Iyo smart contract inogona kuwanikwa pano.

Enda kune iyo tebhu chinyorwa uye sarudza Decompiled. Iwe uchaona iyo smart contract kodhi (aka script).

RSA isina kurongeka pa blockchain

Iyo smart contract code ine seti yemabasa. Iwo akamakwa se @Callable anogona kutangwa uchishandisa Invocation transactions. Isu tinofarira mabasa maviri: bheji ΠΈ ngavabude:

  • func kubheja (playerChoice)
  • func kubvisa (gameId,rsaSign)

1. Mushandisi anosarudza kureba kwechikamu uye ukuru hwebheti.

RSA isina kurongeka pa blockchain

2. Mutengi anogadzira basa rekubheja. Nokuti mufananidzo uri pamusoro zvingave bheji("50").

3. Mutengi anotumira Invocation transaction kune smart contract kero (broadcast InvocationTx). Iko kutengeserana kune basa rekubheja seyekufona parameter. Izvi zvinoreva kuti Invocation transaction inokonzeresa kuitwa kwebheti basa (sarudzo: String) pane smart kontrakiti.

RSA isina kurongeka pa blockchain

4. Funga nezvebasa rekubheja:

@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)))
                    }
    }

Basa racho rinonyora mutambo mutsva kune mamiriro echibvumirano chakangwara. Zvinonzi:

  • Yakasarudzika identifier yemutambo mutsva (id yemutambo)
  • Mamiriro emutambo = AKAPIWA
  • Sarudzo yemutambi (chikamu chakareba makumi mashanu)
  • Kiyi yeruzhinji
  • Inogona kuhwina (zvichienderana nebheti yemutambi)

RSA isina kurongeka pa blockchain

Izvi ndizvo zvinoita rekodhi rekodhi mu blockchain rinotaridzika (kiyi-kukosha):

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

"Kiyi" (kiyi) - game id mutambo mutsva. Iyo yakasara data inowanikwa mumutsara we "value" munda. Izvi zvinyorwa zvakachengetwa mu tab Data smart contract:

RSA isina kurongeka pa blockchain

RSA isina kurongeka pa blockchain

5. Sevha "inotarisa" pachibvumirano chakangwara uye inowana iyo yakatumirwa kutengeserana (mutambo mutsva) uchishandisa blockchain Api. Iyo Game id yemutambo mutsva yakatonyorwa mu blockchain, zvinoreva kuti haichagone kuchinjwa kana kufurirwa.

6. Sevha inogadzira kubvisa basa (gameId, rsaSign). Semuenzaniso, seizvi:

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

7. Sevha inotumira Invocation transaction kune smart contract (broadcast InvocationTx). Iko kutengeserana kune kufona kune yakaumbwa kubvisa basa (gameId, rsaSign):

RSA isina kurongeka pa blockchain

Basa rine game id mutambo mutsva uye mhedzisiro yeRSA kusaina kweyakasarudzika identifier ine yakavanzika kiyi. Siginecha mhedzisiro haina kuchinjwa.

Izvi zvinorevei?

Isu tinotora kukosha kwakafanana (id yemutambo) uye toshandisa iyo RSA siginecha nzira kwairi. Tichagara tichiwana mugumisiro wakafanana. Aya ndiwo mashandiro anoita algorithm yeRSA. Nhamba yekupedzisira haigone kushandiswa, sezvo id yemutambo uye mhedzisiro yekushandisa RSA hazvizivikanwe. Kunhonga nhamba hakuna zvakunobatsira.

8. Blockchain inogamuchira kutengeserana. Inomhanyisa basa rekubvisa (gameId, rsaSign)

9. Mukati yekubvisa basa, kubvisa kunoitika GadziraRandInt mabasa (gameId, rsaSign). Iyi inhamba jenareta

# @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")
    }

randi - uye kune nhamba isina kurongeka.

Kutanga, tambo inotorwa, inova mhedzisiro yeRSA siginicha game id private key (rsaSign) Zvadaro hashed neSHA-256 (sha256(rsaSign)).

Hatigone kufanotaura mhedzisiro ye siginecha uye inotevera hashing. Naizvozvo, hazvibviri kupesvedzera chizvarwa chenhamba isina kurongeka. Kuti uwane nhamba mune imwe nhanho (semuenzaniso, kubva pa1 kusvika pa100), shandisa iyo toInt kushandura basa uye %100 (yakafanana ne Mod).

Pakutanga kwechinyorwa takataura nezvebasa rsaVerify (), izvo zvinokutendera kuti utarise chokwadi cheiyo RSA siginicha ine kiyi yakavanzika kupesana neyeruzhinji. Heino GenerateRandInt(gameId,rsaSign) chikamu:

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

Kiyi yeruzhinji RSAPUBLIC uye rsaSign tambo inopfuudzwa kune yekuisa. Siginicha inotariswa kuti ichokwadi here. Nhamba inogadzirwa kana cheki ichibudirira. Zvikasadaro, sisitimu yacho inoona kuti siginicha haina kushanda (Invalid RSA siginicha).

Sevha inofanirwa kusaina id yemutambo nekiyi yakavanzika uye kutumira siginecha inoshanda yeRsa mukati me2880 blocks. Iyo parameter inogadziriswa paunenge uchitumira iyo smart contract. Kana pasina chikaitika mukati menguva yakatarwa, mushandisi anokunda. Muchiitiko ichi, mubairo unofanira kutumirwa kukero yako iwe pachako. Zvinoitika kuti "hazvina pundutso kune sevha kubiridzira", nekuti izvi zvinotungamira mukurasikirwa. Pazasi pane muenzaniso.

RSA isina kurongeka pa blockchain

Mushandisi ari kutamba Dice Roller. Ndakasarudza 2 pamativi matanhatu ecube, bheji i6 WAVES. Kana sevha ikasatumira siginecha inoshanda yeRSA kune smart contract mukati menguva yakatarwa (14 blocks), mushandisi achatora 2880 WAVES.

Kugadzira nhamba mumitambo, tinoshandisa oracle - yekunze, isiri-blockchain system. Sevha inoita siginecha yeRSA yeid yemutambo. Iyo smart contract inotarisa kutendeseka kweiyo siginicha uye inosarudza anokunda. Kana sevha ikasatumira chero chinhu, ipapo mushandisi anohwina otomatiki.

Iyi inzira yechizvarwa yakatendeseka, nekuti kunyengedza hakugoneke. Yese mitambo yeTradisys inoshanda zvichibva pane yakatsanangurwa algorithm. Aya ndiwo mashandiro anoita mitambo ye blockchain. Zvese zviripachena uye zvinogoneka. Iko hakuna analogues eiyo system mune chero imwe blockchain. Izvi zvakangonaka zvisingaite.

Source: www.habr.com

Voeg