RSA mwachisawawa pa blockchain

Pali vuto - ndizovuta kupanga nambala mwachisawawa mumaneti okhazikika. Pafupifupi ma blockchains onse adakumanapo kale ndi izi. Zowonadi, mumaneti pomwe palibe kudalirana pakati pa ogwiritsa ntchito, kupanga nambala yosatsutsika kumathetsa mavuto ambiri.

M'nkhaniyi tikukuuzani momwe tinatha kuthetsa vutoli pogwiritsa ntchito masewera monga chitsanzo. Woyamba wa iwo anali Mtengo wa Xmas Waves. Pachitukuko, timafunikira jenereta ya manambala mwachisawawa.

RSA mwachisawawa pa blockchain

Poyambirira, tidakonza zopanga nambala kutengera zambiri kuchokera ku blockchain. Komabe, zinadziwika bwino: chiwerengerocho chikhoza kusinthidwa, zomwe zikutanthauza kuti yankho silili loyenera.

Tinabwera ndi njira yopangira: gwiritsani ntchito chiwembu chowonjezera. Sevayo idayerekeza nambala kuyambira 1 mpaka 5, ndikuwonjezera mchere kwa iyo, kenako ndikuthamangitsa zotsatira zake pogwiritsa ntchito Keccak ntchito. Seva idatumiza mgwirizano wanzeru ndi nambala yosungidwa kale pasadakhale. Zikuoneka kuti masewera zithupsa pansi wosuta kulosera chiwerengero chobisika ndi hashi.

Wosewerayo adayika kubetcha, ndipo seva idatumiza nambala yobisika ndi "mchere" ku mgwirizano wanzeru. M’mawu osavuta, anaulula makadiwo. Pambuyo pake, seva idayang'ana manambala ndikusankha ngati wogwiritsa ntchitoyo adapambana kapena adataya.

Ngati seva sinatumize nambala kapena "mchere" kuti atsimikizire, wogwiritsa ntchitoyo adapambana. Pankhaniyi, pamasewera aliwonse kunali kofunikira kutumizira kontrakiti yanzeru pasadakhale ndikuphatikiza zopambana zomwe zingatheke mmenemo. Zinapezeka kuti zinali zovuta, zowononga nthawi komanso zodula. PanthaΕ΅iyo panalibe njira ina yotetezereka.

Posachedwa, gulu la Tradisys likufuna kuwonjezera ntchito ku protocol ya Waves rsaVerify (). Imawunika kutsimikizika kwa siginecha ya RSA kutengera makiyi agulu ndi achinsinsi. Zotsatira zake, mawonekedwewo adawonjezedwa.

Tapanga masewera atatu: Dice Roller, Ndalama Yandalama ΠΈ Kwerani Pa Mafunde. Iliyonse imagwiritsa ntchito ukadaulo wa manambala mwachisawawa. Tiyeni tiwone momwe zimagwirira ntchito.

RSA mwachisawawa pa blockchain

Tiyeni tiwone kupanga nambala mwachisawawa pogwiritsa ntchito Ride on Waves mwachitsanzo. Mgwirizano wanzeru ukhoza kupezeka apa.

Pitani ku tabu script ndi kusankha Zowonongeka. Mudzawona kachidindo kanzeru (aka script).

RSA mwachisawawa pa blockchain

Khodi ya contract yanzeru imakhala ndi ntchito zingapo. Zomwe zalembedwa kuti @Callable zitha kukhazikitsidwa pogwiritsa ntchito Zochita zopempha. Tili ndi chidwi ndi ntchito ziwiri: uliwonse ΠΈ mupewe:

  • func kubetcha (playerChoice)
  • func kuchotsa (gameId,rsaSign)

1. Wogwiritsa amasankha kutalika kwa gawo ndi kukula kwa kubetcha.

RSA mwachisawawa pa blockchain

2. kasitomala amapanga kubetcha ntchito. Kwa chithunzi pamwambapa chikanakhala kubetcha ("50").

3. Makasitomala amatumiza Invocation transaction ku adilesi ya smart contract (kuwulutsa InvocationTx). Ntchitoyi ili ndi ntchito ya kubetcha ngati parameter yoyimbira. Izi zikutanthauza kuti Invocation transaction imayambitsa kuchitidwa kwa kubetcha (kusankha: String) pa mgwirizano wanzeru.

RSA mwachisawawa pa blockchain

4. Ganizirani za kubetcha:

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

Ntchitoyi imalemba masewera atsopano ku boma la mgwirizano wanzeru. Izi:

  • Chizindikiritso chapadera chamasewera atsopano (id ya game)
  • Dziko lamasewera = ONSE
  • Kusankha kwa osewera (gawo lalitali 50)
  • Kiyi yapagulu
  • Kupambana komwe kungatheke (kutengera kubetcha kwa wosewera)

RSA mwachisawawa pa blockchain

Izi ndi zomwe mbiri ya data mu blockchain imawonekera (mtengo-mtengo):

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

"Kiyi" (kiyi) - game id masewera atsopano. Deta yotsalira ili mu mzere wa "mtengo" munda. Zolemba izi zimasungidwa mu tabu Deta smart contract:

RSA mwachisawawa pa blockchain

RSA mwachisawawa pa blockchain

5. Seva "imayang'ana" pa mgwirizano wanzeru ndikupeza kutumizidwa (masewera atsopano) pogwiritsa ntchito blockchain Api. ID ya Game yamasewera atsopano yalembedwa kale mu blockchain, zomwe zikutanthauza kuti sizingasinthidwenso kapena kukhudzidwa.

6. Seva imapanga ntchito yochotsa (gameId, rsaSign). Mwachitsanzo, monga chonchi:

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

7. Seva imatumiza Invocation transaction ku smart contract (kuwulutsa InvocationTx). Ntchitoyi ili ndi kuyimba kwa ntchito yochotsa (gameId, rsaSign):

RSA mwachisawawa pa blockchain

Ntchitoyi ili ndi game id masewera atsopano ndi zotsatira za RSA kusaina chizindikiritso chapadera ndi kiyi yachinsinsi. Chotsatira siginecha sichinasinthidwe.

Kodi izi zikutanthauzanji?

Timatenga mtengo womwewo (id yamasewera) ndikugwiritsa ntchito siginecha ya RSA. Nthawi zonse tidzapeza zotsatira zofanana. Umu ndi momwe algorithm ya RSA imagwirira ntchito. Nambala yomaliza siingagwiritsidwe ntchito, popeza id yamasewera ndi zotsatira za RSA sizikudziwika. Kusankha nambala kulinso kopanda phindu.

8. Blockchain amavomereza malonda. Imayendetsa ntchito yochotsa (gameId, rsaSign)

9. Mkati mwa ntchito yochotsa, kuchotsa kumachitika GenerateRandInt ntchito (gameId, rsaSign). Ichi ndi jenereta ya manambala mwachisawawa

# @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 - ndipo pali nambala yachisawawa.

Choyamba, chingwecho chimatengedwa, chomwe ndi zotsatira za siginecha ya RSA game id chinsinsi chachinsinsi (rsaSign). Kenako mwachangu ndi SHA-256 (sha256(rsaSign)).

Sitingathe kulosera zotsatira za siginecha ndi hashing yotsatira. Chifukwa chake, sikutheka kukhudza kubadwa kwa nambala mwachisawawa. Kuti mupeze nambala mumtundu wina (mwachitsanzo, kuyambira 1 mpaka 100), gwiritsani ntchito toInt conversion function ndi %100 (zofanana ndi yamakono).

Kumayambiriro kwa nkhaniyo tatchula ntchitoyo rsaVerify (), zomwe zimakupatsani mwayi wowona ngati siginecha ya RSA ndi yolondola pogwiritsa ntchito kiyi yachinsinsi motsutsana ndi anthu onse. Nayi gawo la GenerateRandInt(gameId,rsaSign):

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

Kiyi yapagulu RSAPUBLIC ndi zingwe za rsaSign zimaperekedwa pazolowetsa. Siginecha imafufuzidwa ngati ili yolondola. Nambala imapangidwa ngati chekeyo yapambana. Kupanda kutero, dongosololi likuwona kuti siginecha sichoyenera (Siginecha Yosavomerezeka ya RSA).

Seva iyenera kusaina id yamasewera ndi kiyi yachinsinsi ndikutumiza siginecha yovomerezeka ya Rsa mkati mwa midadada 2880. Parameter imakonzedwa potumiza mgwirizano wanzeru. Ngati palibe chomwe chikuchitika mkati mwa nthawi yomwe wapatsidwa, wogwiritsa ntchitoyo amapambana. Pankhaniyi, mphoto iyenera kutumizidwa ku adilesi yanu. Zikuoneka kuti "sizopindulitsa kuti seva iwononge", chifukwa izi zimabweretsa kutayika. M'munsimu muli chitsanzo.

RSA mwachisawawa pa blockchain

Wogwiritsa akusewera Dice Roller. Ndinasankha 2 mwa 6 mbali za cube, kubetcha ndi 14 WAVES. Ngati seva situmiza siginecha yovomerezeka ya RSA ku mgwirizano wanzeru mkati mwa nthawi yodziwika (2880 blocks), wogwiritsa ntchito atenga 34.44 WAVES.

Kuti tipange manambala mumasewera, timagwiritsa ntchito oracle - yakunja, yopanda blockchain system. Seva imapanga siginecha ya RSA ya id yamasewera. Mgwirizano wanzeru umayang'ana ngati siginecha ndi yolondola ndikusankha wopambana. Ngati seva situmiza chilichonse, ndiye kuti wogwiritsa ntchitoyo amapambana.

Iyi ndi njira yolankhulirana moona mtima, chifukwa kuwongolera mwaukadaulo sikutheka. Masewera onse a Tradisys amagwira ntchito motengera zomwe zafotokozedwa. Umu ndi momwe masewera a blockchain amagwirira ntchito. Zonse ndi zowonekera komanso zotsimikizika. Palibe ma analogue a dongosolo lotere mu blockchain ina iliyonse. Izi ndi zachisawawa.

Source: www.habr.com

Kuwonjezera ndemanga