RSA ka tšohanyetso ho blockchain

Ho na le bothata - ho thata ho hlahisa nomoro e sa reroang ho marang-rang a arotsoeng. Hoo e ka bang li-blockchains tsohle li se li kopane le sena. Ka 'nete, marang-rang moo ho se nang tšepo pakeng tsa basebelisi, ho theha palo e ke keng ea latoloa ho rarolla mathata a mangata.

Sehloohong sena re u bolella kamoo re khonneng ho rarolla bothata ka ho sebelisa lipapali e le mohlala. Ea pele ea bona e bile Maqhubu Sefate sa Xmas. Bakeng sa nts'etsopele, re ne re hloka jenereithara ea linomoro tse sa reroang.

RSA ka tšohanyetso ho blockchain

Qalong, re ne re rerile ho hlahisa palo e thehiloeng boitsebisong bo tsoang ho blockchain. Leha ho le joalo, joale ho ile ha hlaka: palo e ka sebelisoa, e bolelang hore tharollo ha e tšoanelehe.

Re tlile ka mokhoa oa ho sebetsa: sebelisa morero oa ho atolosa. Seva e ile ea hakanya palo ho tloha ho 1 ho isa ho 5, ea eketsa letsoai ho eona, ebe e potlakisa sephetho ka ho sebelisa Mesebetsi ea Keccak. Seva e kentse konteraka e bohlale ka nomoro e seng e bolokiloe esale pele. Hoa etsahala hore papali e behele mosebelisi a hakanya palo e patiloeng ke hashe.

Sebapali se behile bet, 'me seva sa romela nomoro e patiloeng le "letsoai" ho konteraka e bohlale. Ka mantsoe a bonolo, o ile a senola likarete. Ka mor'a moo, seva se ile sa hlahloba linomoro 'me sa etsa qeto ea hore na mosebelisi o hlotse kapa o lahlile.

Haeba seva e sa ka ea romela nomoro kapa "letsoai" bakeng sa netefatso, mosebelisi o ile a hlola. Tabeng ena, bakeng sa papali e 'ngoe le e' ngoe ho ne ho hlokahala ho romela konteraka e bohlale esale pele le ho kenyelletsa meputso e ka bang teng ho eona. Ho ile ha bonahala ho se bonolo, ho ja nako le ho bitsa chelete e ngata. Ka nako eo ho ne ho se na tharollo e ’ngoe e sireletsehileng.

Haufinyane tjena, sehlopha sa Tradisys se khothalelitse ho eketsa ts'ebetso ho protocol ea Waves rsaVerify(). E lekola bonnete ba mosaeno oa RSA ho ipapisitsoe le linotlolo tsa sechaba le tsa poraefete. Ka lebaka leo, tšobotsi e ile ea eketsoa.

Re ntlafalitse lipapali tse tharo: Dice Roller, Flip ea Chelete ea tšepe и Palama Maqhubu. E 'ngoe le e' ngoe e sebelisa theknoloji ea linomoro tse sa reroang. A re bone hore na e sebetsa joang.

RSA ka tšohanyetso ho blockchain

Ha re shebeng ho hlahisa nomoro e sa reroang re sebelisa mohlala oa Ride on Waves. Konteraka e bohlale e ka fumanoa mona.

Tobetsa tab rx ebe o kgetha Senyehile. U tla bona khoutu ea konteraka e bohlale (aka script).

RSA ka tšohanyetso ho blockchain

Khoutu e bohlale ea konteraka e na le sehlopha sa mesebetsi. Tse tšoailoeng e le @Callable li ka qala ho sebelisoa Litšebelisano tsa kopo. Re thahasella mesebetsi e 'meli: Bet и hula:

  • func bet (playerChoice)
  • func withdraw(gameId,rsaSign)

1. Mosebelisi o khetha bolelele ba karolo le boholo ba ho becha.

RSA ka tšohanyetso ho blockchain

2. Moreki o etsa mosebetsi oa ho becha. Bakeng sa setšoantšo se ka holimo e ne e tla ba bet("50").

3. Moreki o romella transaction ea Invocation atereseng e bohlale ea konteraka (broadcast InvocationTx). Ts'ebetso e na le ts'ebetso ea ho becha joalo ka parameter ea mohala. Sena se bolela hore ts'ebetso ea Invocation e baka ts'ebetso ea ts'ebetso ea ho becha (khetho: String) ho konteraka e bohlale.

RSA ka tšohanyetso ho blockchain

4. Nahana ka tšebetso ea ho becha:

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

Mosebetsi o ngola papali e ncha ho boemo ba konteraka e bohlale. E leng:

  • Sekhetho se ikhethileng bakeng sa papali e ncha (ID ea papali)
  • Boemo ba papali = HO THUSITSE
  • Khetho ea sebapali (bolelele ba karolo 50)
  • Senotlolo sa sechaba
  • Likhau tse ka bang teng (ho ipapisitse le bethe ea sebapali)

RSA ka tšohanyetso ho blockchain

Sena ke seo rekoto ea data ho blockchain e shebahalang ka eona (boleng ba bohlokoa):

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

"Senotlolo" (senotlolo) - papali id papali e ncha. Lintlha tse setseng li fumaneha moleng oa tšimo ea "boleng". Likenyo tsena li bolokiloe ho tab Lintlha konteraka e bohlale:

RSA ka tšohanyetso ho blockchain

RSA ka tšohanyetso ho blockchain

5. Seva e "sheba" konteraka e bohlale 'me e fumana transaction e rometsoeng (papali e ncha) e sebelisa blockchain Api. ID ea Game ea papali e ncha e se e tlalehiloe ho blockchain, ho bolelang hore e ke ke ea hlola e fetoloa kapa ea susumetsoa.

6. Seva e hlahisa mosebetsi oa ho hula (gameId, rsaSign). Ka mohlala, joalo ka:

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

7. Seva e romella transaction ea Invocation ho konteraka e bohlale (broadcast InvocationTx). Ts'ebetso e na le mohala o eang ho ts'ebetso e entsoeng ea ho hula (gameId, rsaSign):

RSA ka tšohanyetso ho blockchain

Mosebetsi o na le papali id papali e ncha le sephetho sa RSA sa ho saena sekhetho se ikhethileng se nang le senotlolo sa lekunutu. Sephetho sa tekeno ha se fetohe.

See se bolela eng?

Re nka boleng bo tšoanang (id ea papali) ebe re sebelisa mokhoa oa ho saena oa RSA ho eona. Re tla lula re fumana sephetho se tšoanang. Ena ke tsela eo algorithm ea RSA e sebetsang ka eona. Nomoro ea ho qetela e ke ke ea sebelisoa, kaha id ea papali le sephetho sa ho sebelisa RSA ha li tsejoe. Ho khetha nomoro le hona ha ho na thuso.

8. Blockchain e amohela transaction. E tsamaisa ts'ebetso ea ho hula (gameId, rsaSign)

9. Ka hare ho ts'ebetso ea ho hula, ho tlosoa ho etsahala Hlahisa mesebetsi ea RandInt (gameId, rsaSign). Ena ke jenereithara ea linomoro e sa reroang

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

Ranta - mme ho na le palo e sa reroang.

Ntlha ea pele, khoele e nkiloe, e leng phello ea tekeno ea RSA papali id senotlolo sa lekunutu (rsaSign). Ebe e hahelloa ka SHA-256 (sha256(rsaSign)).

Re ke ke ra bolela esale pele sephetho sa ho saena le hashing e latelang. Ka hona, ho ke ke ha khoneha ho susumetsa moloko oa palo e sa reroang. Ho fumana nomoro sebakeng se itseng (mohlala, ho tloha ho 1 ho isa ho 100), sebelisa toInt phetolo le %100 (e ts'oanang le ma).

Qalong ea sehlooho re boletse mosebetsi rsaVerify(), e u lumellang hore u hlahlobe bonnete ba tekeno ea RSA u sebelisa senotlolo sa poraefete khahlano le ea sechaba. Mona ke karolo ea GenerateRandInt(gameId,rsaSign):

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

Senotlolo sa sechaba RSAPUBLIC le khoele ea rsaSign li fetisetsoa ho kenyelletso. Mosaeno oa hlahlojoa hore na o nepahetse. Nomoro e hlahisoa haeba cheke e atlehile. Ho seng joalo, sistimi e nka hore tekeno ha e sebetse (Mosaeno o sa sebetseng oa RSA).

Seva e tlameha ho saena id ea papali ka senotlolo sa poraefete ebe e romela motekeno o nepahetseng oa Rsa ka har'a li-block tse 2880. Paramethara e lokisoa ha ho sebelisoa konteraka e bohlale. Haeba ho se letho le etsahalang ka nako e behiloeng, mosebelisi oa hapa. Tabeng ena, moputso o tlameha ho romelloa atereseng ea hau. Hoa etsahala hore "ha ho na phaello bakeng sa seva ho qhekella", hobane sena se lebisa tahlehelong. Ka tlaase mona ke mohlala.

RSA ka tšohanyetso ho blockchain

Mosebelisi oa bapala Dice Roller. Ke khethile mahlakore a 2 ho a 6 a cube, bethe ke 14 WAVES. Haeba seva e sa romele saena e nepahetseng ea RSA ho konteraka e bohlale ka nako e behiloeng (2880 blocks), mosebelisi o tla nka 34.44 WAVES.

Ho hlahisa linomoro lipapaling, re sebelisa oracle - tsamaiso ea ka ntle, e seng ea blockchain. Seva e etsa signature ea RSA ea id ea papali. Konteraka e bohlale e lekola bonnete ba mosaeno ebe e khetha mohlodi. Haeba seva e sa romelle letho, mosebelisi o tla hlola ka bohona.

Ena ke mokhoa o tšepahalang oa moloko, hobane ho qhekella ha ho khonehe ka botekgeniki. Lipapali tsohle tsa Tradisys li sebetsa ho latela algorithm e hlalositsoeng. Ena ke tsela eo lipapali tsa blockchain li sebetsang ka eona. Ntho e 'ngoe le e 'ngoe e pepenene ebile e ka netefatsoa. Ha ho na li-analogues tsa sistimi e joalo ho blockchain efe kapa efe. Ena ke ketsahalo e sa lebelloang.

Source: www.habr.com

Eketsa ka tlhaloso