I-RSA engahleliwe ku-blockchain

Kunenkinga - kunzima ukukhiqiza inombolo engahleliwe kunethiwekhi ehlukaniselwe indawo. Cishe wonke ama-blockchain asevele ahlangabezane nalokhu. Ngempela, kumanethiwekhi lapho kungekho ukwethembana phakathi kwabasebenzisi, ukudala inombolo engahleliwe engenakuphikwa kuxazulula izinkinga eziningi.

Kulesi sihloko sizokutshela ukuthi sikwazile kanjani ukuxazulula inkinga sisebenzisa imidlalo njengesibonelo. Owokuqala wabo kwaba Amagagasi Isihlahla sikaKhisimusi. Ukuze sithuthukiswe, besidinga umshini okhiqiza izinombolo ongahleliwe.

I-RSA engahleliwe ku-blockchain

Ekuqaleni, sasihlele ukukhiqiza inombolo ngokusekelwe kulwazi oluvela ku-blockchain. Kodwa-ke, kwabe sekucaca: inombolo ingaphathwa, okusho ukuthi isisombululo asifanele.

Siqhamuke ne-workaround: sebenzisa uhlelo lokunweba lokuzibophezela. Iseva iqagele inombolo ukusuka ku-1 kuye ku-5, yengeza usawoti kuyo, yase isheshisa umphumela isebenzisa Imisebenzi ye-Keccak. Iseva isebenzise inkontileka ehlakaniphile enenombolo evele ilondolozwe kusengaphambili. Kuvele ukuthi igeyimu ibilela kumsebenzisi ukuqagela inombolo efihlwe i-hashi.

Umdlali ubeke ukubheja, futhi iseva yathumela inombolo efihliwe kanye β€œnosawoti” kunkontileka ehlakaniphile. Ngamagama alula, wembula amakhadi. Ngemva kwalokho, iseva yahlola izinombolo futhi yanquma ukuthi umsebenzisi uwinile noma ulahlekile.

Uma iseva ingazange ithumele inombolo noma β€œusawoti” ukuze kuqinisekiswe, umsebenzisi uwinile. Kulokhu, kumdlalo ngamunye bekudingeka ukuthi kusetshenziswe inkontileka ehlakaniphile kusenesikhathi futhi kufakwe nokuwina okungenzeka kuyo. Kuvele ukuthi akulula, kudle isikhathi futhi kuyabiza. Ngaleso sikhathi lalingekho elinye ikhambi eliphephile.

Muva nje, ithimba le-Tradisys lenze isiphakamiso sokungeza umsebenzi kuphrothokholi ye-Waves rsaVerify(). Ihlola ukufaneleka kwesiginesha ye-RSA ngokusekelwe kukhiye womphakathi noyimfihlo. Ngenxa yalokho, isici sengeziwe.

Senze imidlalo emithathu: I-Dice Roller, I-Coin Flip ΠΈ Hamba Ngamagagasi. Ngayinye isebenzisa ubuchwepheshe bezinombolo ezingahleliwe. Ake sibone ukuthi kusebenza kanjani.

I-RSA engahleliwe ku-blockchain

Ake sibheke ukukhiqiza inombolo engahleliwe sisebenzisa i-Ride on Waves njengesibonelo. Inkontileka ehlakaniphile ingatholakala lapha.

Iya kuthebhu Iskripthi bese ukhetha Inqanyuliwe. Uzobona ikhodi yenkontileka ehlakaniphile (i-aka script).

I-RSA engahleliwe ku-blockchain

Ikhodi yenkontileka ehlakaniphile iqukethe isethi yemisebenzi. Lezo ezimakwe ngokuthi @Callable zingaqaliswa kusetshenziswa Izicelo zokuthengiselana. Sinentshisekelo emisebenzini emibili: Ukubheja ΠΈ ukuhoxisa:

  • ukubheja kwe-func (playerChoice)
  • func ukuhoxiswa(gameId,rsaSign)

1. Umsebenzisi ukhetha ubude bengxenye kanye nosayizi wokubheja.

I-RSA engahleliwe ku-blockchain

2. Iklayenti lidala umsebenzi wokubheja. Ukuze isithombe esingenhla kungaba ukubheja("50").

3. Iklayenti lithumela umsebenzi Wokunxusa ekhelini lenkontileka ehlakaniphile (ukusakaza i-InvocationTx). Okwenziwayo kuqukethe umsebenzi wokubheja njengepharamitha yocingo. Lokhu kusho ukuthi umsebenzi Wokunxusa ucupha ukwenziwa komsebenzi wokubheja (inketho: Iyunithi yezinhlamvu) kunkontileka ehlakaniphile.

I-RSA engahleliwe ku-blockchain

4. Cabangela 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 omusha esimweni senkontileka ehlakaniphile. Okungukuthi:

  • Inkomba ehlukile yegeyimu entsha (i-id yomdlalo)
  • Isimo somdlalo = THUMILE
  • Ukukhetha komdlali (ubude besigaba 50)
  • Ukhiye osesidlangalaleni
  • Ukuwina okungenzeka (kuya ngokubheja komdlali)

I-RSA engahleliwe ku-blockchain

Yile ndlela irekhodi ledatha ku-blockchain elibukeka ngayo (inani elingukhiye):

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

"Ukhiye" (ukhiye) - id yomdlalo umdlalo omusha. Idatha esele iqukethwe kulayini wenkambu "inani". Lokhu okufakiwe kugcinwa kuthebhu Idatha Inkontileka ehlakaniphile:

I-RSA engahleliwe ku-blockchain

I-RSA engahleliwe ku-blockchain

5. Iseva "ibheka" inkontileka ehlakaniphile futhi ithola umsebenzi othunyelwe (igeyimu entsha) isebenzisa i-blockchain Api. I-id yegeyimu yegeyimu entsha isivele irekhodiwe ku-blockchain, okusho ukuthi ngeke isakwazi ukushintshwa noma ukuthonywa

6. Iseva ikhiqiza umsebenzi wokuhoxiswa (i-gameId, i-rsaSign). Ngokwesibonelo, kanje:

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

7. Iseva ithumela umsebenzi Wokunxusa kwinkontileka ehlakaniphile (ukusakaza i-InvocationTx). Umsebenzi uqukethe ucingo oluya kumsebenzi owenziwe wokuhoxiswa (gameId, rsaSign):

I-RSA engahleliwe ku-blockchain

Umsebenzi uqukethe id yomdlalo igeyimu entsha kanye nomphumela wokusayinda kwe-RSA kwesihlonzi esiyingqayizivele ngokhiye oyimfihlo. Umphumela wesiginesha awushintshile.

Kusho ukuthini lokhu?

Sithatha inani elifanayo (i-id yomdlalo) futhi sisebenzise indlela yesiginesha ye-RSA kulo. Siyohlala sithola umphumela ofanayo. Lena yindlela i-algorithm ye-RSA esebenza ngayo. Inombolo yokugcina ayikwazi ukusetshenziswa, njengoba i-id yomdlalo kanye nomphumela wokusebenzisa i-RSA akwaziwa. Ukukhetha inombolo nakho akusizi.

8. I-Blockchain iyakwamukela ukuthengiselana. Isebenzisa umsebenzi wokuhoxisa (i-gameId, i-rsaSign)

9. Ngaphakathi komsebenzi wokuhoxisa, ukuhoxiswa kwenzeka Qalisa imisebenzi yeRandInt (i-gameId, i-rsaSign). Lena ijeneretha yenombolo engahleliwe

# @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 - futhi kukhona inombolo engahleliwe.

Okokuqala, intambo ithathwa, okuwumphumela wesignesha ye-RSA id yomdlalo ukhiye oyimfihlo (rsaSign). Bese isheshi nge-SHA-256 (I-sha256(rsaSign)).

Asikwazi ukubikezela umphumela wesiginesha kanye ne-hashing elandelayo. Ngakho-ke, akunakwenzeka ukuthonya ukukhiqizwa kwenombolo engahleliwe. Ukuze uthole inombolo ebangeni elithile (isibonelo, ukusuka ku-1 kuye ku-100), sebenzisa umsebenzi wokuguqula we-toInt kanye no-%100 (ofana no- Mod).

Ekuqaleni kwesihloko sikhulume ngomsebenzi rsaVerify(), okukuvumela ukuthi uhlole ukufaneleka kwesiginesha ye-RSA ngokhiye oyimfihlo ngokumelene nesesidlangalaleni. Nansi ingxenye ye-GenerateRandInt(gameId,rsaSign):

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

Ukhiye osesidlangalaleni i-RSAPUBLIC kanye neyunithi yezinhlamvu ze-rsaSign kudluliswa kokokufaka. Isiginesha ihlolelwa ukufaneleka. Inombolo ikhiqizwa uma isheke liphumelele. Uma kungenjalo, uhlelo lubheka ukuthi isiginesha ayivumelekile (Isiginesha ye-RSA engavumelekile).

Iseva kufanele isayine i-id yegeyimu ngokhiye oyimfihlo futhi ithumele isiginesha evumelekile ye-Rsa phakathi kwamabhulokhi angu-2880. Ipharamitha iyalungiswa lapho kuthunyelwa inkontileka ehlakaniphile. Uma kungenzeki lutho phakathi nesikhathi esinikeziwe, umsebenzisi uyawina. Kulokhu, umklomelo kufanele uthunyelwe ekhelini lakho ngokwakho. Kuvela ukuthi "akuyona inzuzo ukuthi iseva ikhohlise", ngoba lokhu kuholela ekulahlekelweni. Ngezansi kunesibonelo.

I-RSA engahleliwe ku-blockchain

Umsebenzisi uyadlala I-Dice Roller. Ngikhethe izinhlangothi ezi-2 kweziyisi-6 zekhibhu, ukubheja AMAgagasi ayi-14. Uma iseva ingathumeli isiginesha evumelekile ye-RSA kunkontileka ehlakaniphile phakathi nesikhathi esishiwo (amabhulokhi angu-2880), umsebenzisi uzothatha 34.44 WAVES.

Ukukhiqiza izinombolo emidlalweni, sisebenzisa i-oracle - isistimu yangaphandle, engeyona i-blockchain. Iseva yenza isiginesha ye-RSA ye-id yegeyimu. Inkontileka ehlakaniphile ihlola ukufaneleka kwesiginesha bese inquma owinile. Uma iseva ingathumeli lutho, umsebenzisi uyawina ngokuzenzakalelayo.

Lena indlela yokukhiqiza ethembekile, ngoba ukukhohlisa akunakwenzeka ngokobuchwepheshe. Yonke imidlalo ye-Tradisys isebenza ngokusekelwe ku-algorithm echazwe. Lena yindlela imidlalo ye-blockchain esebenza ngayo. Konke kusobala futhi kuyaqinisekiswa. Awekho ama-analogues wesistimu enjalo kunoma iyiphi enye i-blockchain. Lokhu okungahleliwe okungahleliwe.

Source: www.habr.com

Engeza amazwana