RSA random kwi blockchain

Kukho ingxaki - kunzima ukwenza inani elingaqhelekanga kuthungelwano olunatyisiweyo. Phantse zonke ii-blockchains sele zidibene nale nto. Enyanisweni, kwiinethiwekhi apho kungekho kuthembana phakathi kwabasebenzisi, ukudala inani elingenakuphikiswa elingenakuphikiswa lisombulula iingxaki ezininzi.

Kweli nqaku sikuxelela indlela esikwazile ngayo ukusombulula ingxaki ngokusebenzisa imidlalo njengomzekelo. Eyokuqala yaba Amaza Umthi weXmas. Kuphuhliso, sifuna ijenereyitha yeenombolo ezingaqhelekanga.

RSA random kwi blockchain

Ekuqaleni, saceba ukuvelisa inombolo esekelwe kulwazi oluvela kwi-blockchain. Nangona kunjalo, emva koko kwacaca: inani linokusetyenziswa, oku kuthetha ukuba isisombululo asifanelekanga.

Siye saza nesisombululo: sebenzisa iskimu sokwandisa ukuzibophelela. Umncedisi uqikelele inani ukusuka ku-1 ukuya ku-5, wongeza ityuwa kuyo, kwaye emva koko wakhawuleza isiphumo usebenzisa Keccak imisebenzi. Umncedisi usasaze ikhontrakthi ehlakaniphile enenombolo esele igciniwe kwangaphambili. Kuyavela ukuba umdlalo ubilisa kumsebenzisi ukuqikelela inani elifihlwe yi-hash.

Umdlali ubeke ukubheja, kwaye umncedisi wathumela inombolo efihliweyo kunye "netyuwa" kwinkontileka ehlakaniphile. Ngamagama alula, watyhila amakhadi. Emva koko, umncedisi ujonge amanani kwaye wagqiba ukuba umsebenzisi uphumelele okanye ulahlekile.

Ukuba umncedisi akathumelanga inombolo okanye "ityuwa" yokuqinisekisa, umsebenzisi uphumelele. Kule meko, kumdlalo ngamnye kwakuyimfuneko ukuba kusetyenziswe isivumelwano esihlakaniphile kwangaphambili kwaye kubandakanye ukuphumelela okunokwenzeka kuyo. Kwafumaniseka ukuba ayiyongxaki, yatya ixesha kwaye ibiza imali eninzi. Ngelo xesha sasingekho esinye isisombululo esikhuselekileyo.

Kutshanje, iqela leTradisys licebise ukongeza umsebenzi kwiprotocol yamaWaves rsaVerify(). Ijonga ukunyaniseka komsayino we-RSA ngokusekelwe kwisitshixo sikawonke-wonke nesabucala. Ngenxa yoko, umsebenzi wongezwa.

Siphuhlise imidlalo emithathu: I-Dice Roller, Ingqekembe Flip ΠΈ Khwela Phezu kwamaza. Ngamnye usebenzisa iteknoloji yamanani angaqhelekanga. Makhe sibone ukuba isebenza njani.

RSA random kwi blockchain

Makhe sijonge ekuveliseni inani elingenamkhethe sisebenzisa iRide on Waves njengomzekelo. Ikhontrakthi ehlakaniphile inokufumaneka apha.

Yiya kwisithuba umbhalo-ngqangi kwaye ukhethe Idityanisiwe. Uya kubona ikhowudi yekhontrakthi ehlakaniphile (aka iskripthi).

RSA random kwi blockchain

Ikhowudi yekhontrakthi ehlakaniphile iqulethe isethi yemisebenzi. Ezo ziphawulwe njenge-@Callable zinokusungulwa kusetyenziswa Iintengiselwano zokucela. Sinomdla kwimisebenzi emibini: ukubheja ΠΈ siyeke:

  • func ukubheja (playerChoice)
  • func ukurhoxisa(umdlaloId,rsaSign)

1. Umsebenzisi ukhetha ubude becandelo kunye nobungakanani bokubheja.

RSA random kwi blockchain

2. Umxhasi wenza umsebenzi wokubheja. Kumfanekiso ongentla kuya kuba ukubheja("50").

3. Umxhasi uthumela i-Invocation transaction kwidilesi ye-smart contract (i-broadcast InvocationTx). Intengiselwano iqulethe umsebenzi wokubheja njengepharamitha yokufowuna. Oku kuthetha ukuba intengiselwano ye-Invocation ibangela ukuphunyezwa komsebenzi wokubheja (ukhetho: Intambo) kwikhontrakthi ehlakaniphile.

RSA random kwi blockchain

4. Qwalasela umsebenzi wokubheja:

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

Umsebenzi ubhala umdlalo omtsha kwimeko yekhontrakthi ehlakaniphile. Oko kukuthi:

  • Isichongi esisodwa somdlalo omtsha (i-id yomdlalo)
  • Imeko yomdlalo = ITHUNYELWE
  • Ukhetho lomdlali (ubude becandelo 50)
  • Isitshixo sikawonke-wonke
  • Ukuphumelela okunokwenzeka (kuxhomekeke kubhejo lomdlali)

RSA random kwi blockchain

Yile ndlela irekhodi yedatha kwi-blockchain ibonakala ngayo (ixabiso elingundoqo):

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

"Isitshixo" (isitshixo) - umdlalo id umdlalo omtsha. Idatha eseleyo iqulethwe kumgca wentsimi "yexabiso". La mangeno agcinwe kwisithuba Iinkcukacha isivumelwano esihlakaniphile:

RSA random kwi blockchain

RSA random kwi blockchain

5. Umncedisi "ujonge" kwinkontileka ehlakaniphile kwaye ufumana ukuthengiselana okuthunyelwe (umdlalo omtsha) usebenzisa i-blockchain Api. I-id yomdlalo omtsha sele irekhodwe kwi-blockchain, okuthetha ukuba ayinakutshintshwa okanye iphenjelelwe.

6. Umncedisi uvelisa umsebenzi wokurhoxisa (umdlaloId, rsaSign). Umzekelo, njengale:

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

7. Umncedisi uthumela i-Invocation transaction kwi-smart contract (i-broadcast InvocationTx). Intengiselwano iqulethe umnxeba owenziweyo wokurhoxisa umsebenzi (umdlaloId, rsaSign):

RSA random kwi blockchain

Umsebenzi uqulathe umdlalo id umdlalo omtsha kunye nesiphumo sokusayinwa kweRSA kwesazisi esisodwa esineqhosha labucala. Isiphumo sotyikityo asitshintshanga.

Kuthetha ukuthini oku?

Sithatha ixabiso elifanayo (i-id yomdlalo) kwaye sisebenzise indlela yokutyikitya yeRSA kuyo. Siya kuhlala sifumana umphumo ofanayo. Le yindlela esebenza ngayo i-algorithm yeRSA. Inombolo yokugqibela ayinakuguqulwa, kuba i-id yomdlalo kunye nesiphumo sokusebenzisa i-RSA ayaziwa. Ukukhetha inani nako akunanjongo.

8. I-Blockchain iyamkela ukuthengiselana. Iqhuba umsebenzi wokurhoxisa (umdlaloId, rsaSign)

9. Ngaphakathi komsebenzi wokurhoxisa, ukuhoxiswa kwenzeka Yenza imisebenzi yeRandInt (umdlaloId, rsaSign). Le yinombolo yejenereyitha engaqhelekanga

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

irandi - kwaye kukho inani elingaqhelekanga.

Okokuqala, umtya uthathiwe, osisiphumo sotyikityo lweRSA umdlalo id isitshixo sabucala (rsaSign). Emva koko ihashi nge-SHA-256 (sha256(rsaSign)).

Asinakuqikelela isiphumo sotyikityo kunye ne-hashing elandelayo. Ngoko ke, akunakwenzeka ukuchaphazela ukuveliswa kwenani elingaqhelekanga. Ukufumana inani kuluhlu oluthile (umzekelo, ukusuka ku-1 ukuya kwi-100), sebenzisa umsebenzi woguqulelo we-toInt kunye ne-%100 (efanayo ngokuchasene).

Ekuqaleni kwenqaku sikhankanye umsebenzi rsaVerify(), ekuvumela ukuba ujonge ubunyani bomsayino we-RSA usebenzisa isitshixo sabucala ngokuchasene neloluntu. Nali iGenerateRandInt(umdlaloId,rsaSign) inxalenye:

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

Isitshixo sikawonke-wonke RSAPUBLIC kunye nomtya we-rsaSign zigqithiselwa kwigalelo. Utyikityo lujongiwe ukunyaniseka. Inani lenziwa ukuba itshekhi iphumelele. Kungenjalo, isixokelelwano sithathela ingqalelo ukuba umsayino awusebenzi (utyikityo olungasebenziyo lweRSA).

Umncedisi kufuneka asayine id yomdlalo ngeqhosha labucala kwaye athumele umsayino osebenzayo we-Rsa ngaphakathi kweebhloko ezingama-2880. Ipharamitha iqwalaselwe xa kuthunyelwa inkontileka ehlakaniphile. Ukuba akukho nto yenzekayo ngexesha elibekiweyo, umsebenzisi uyaphumelela. Kule meko, ibhaso kufuneka lithunyelwe kwidilesi yakho ngokwakho. Kuvela ukuba "akunanzuzo kumncedisi ukukopela", kuba oku kukhokelela ekulahlekelweni. Apha ngezantsi kukho umzekelo.

RSA random kwi blockchain

Umsebenzisi uyadlala I-Dice Roller. Ndikhethe i-2 kumacala ama-6 etyhubhu, ukubheja AMAZA ali-14. Ukuba umncedisi akathumeli utyikityo olufanelekileyo lwe-RSA kwinkontileka ehlakaniphile ngexesha elichaziweyo (iibhloko ze-2880), umsebenzisi uya kuthatha i-34.44 WAVES.

Ukuvelisa amanani kwimidlalo, sisebenzisa i-oracle - inkqubo yangaphandle, engekho-blockchain. Umncedisi wenza utyikityo lwe RSA ye id yomdlalo. Ikhontrakthi ye-smart ijonga ukuba semthethweni komsayino kwaye imisela ophumeleleyo. Ukuba umncedisi akathumeli nto, ngoko umsebenzisi uya kuphumelela ngokuzenzekelayo.

Le yindlela yesizukulwana esinyanisekileyo, kuba ukukhohlisa akunakwenzeka ngokobuchwepheshe. Yonke imidlalo yeTradisys isebenza ngokusekelwe kwi-algorithm echazwe. Le yindlela imidlalo ye-blockchain esebenza ngayo. Yonke into iselubala kwaye iyangqinwa. Akukho zifaniso zenkqubo enjalo kuyo nayiphi na enye i-blockchain. Le yinto eqhelekileyo.

umthombo: www.habr.com

Yongeza izimvo