RSA air thuaiream air blockchain

Tha duilgheadas ann - tha e duilich àireamh air thuaiream a ghineadh ann an lìonra dì-mheadhanaichte. Tha cha mhòr a h-uile blockchain air coinneachadh ri seo mu thràth. Gu dearbh, ann an lìonraidhean far nach eil earbsa eadar luchd-cleachdaidh, bidh cruthachadh àireamh air thuaiream gun àicheadh ​​a ’fuasgladh mòran dhuilgheadasan.

San artaigil seo innsidh sinn dhut mar a chaidh againn air an duilgheadas fhuasgladh le bhith a’ cleachdadh gheamannan mar eisimpleir. Bha a’ chiad fhear dhiubh Craobh na Nollaige Waves. Airson leasachadh, bha feum againn air gineadair àireamh air thuaiream.

RSA air thuaiream air blockchain

An toiseach, bha sinn an dùil àireamh a ghineadh stèidhichte air fiosrachadh bhon blockchain. Ach, dh'fhàs e soilleir: dh'fhaodadh an àireamh a bhith air a làimhseachadh, a tha a 'ciallachadh nach eil am fuasgladh freagarrach.

Thàinig sinn suas le fuasgladh obrach: cleachd an sgeama gealltanas-leudachadh. Rinn an frithealaiche tomhas air àireamh bho 1 gu 5, chuir e salann ris, agus an uairsin chuir e às don toradh le bhith a’ cleachdadh Feartan Keccak. Chleachd am frithealaiche an cùmhnant snasail leis an àireamh a chaidh a shàbhaladh mar-thà ro-làimh. Tha e a ’tionndadh a-mach gu bheil an geama a’ goil sìos chun neach-cleachdaidh a ’tomhas an àireamh a tha falaichte leis an hash.

Chuir an cluicheadair geall, agus chuir am frithealaiche an àireamh falaichte agus “salann” chun chùmhnant snasail. Gu sìmplidh, nochd e na cairtean. Às deidh sin, rinn an frithealaiche sgrùdadh air na h-àireamhan agus cho-dhùin e an do bhuannaich no a chaill an neach-cleachdaidh.

Mura do chuir am frithealaiche àireamh no “salann” airson dearbhadh, bhuannaich an neach-cleachdaidh. Anns a 'chùis seo, airson gach geama bha e riatanach cùmhnant snasail a chleachdadh ro-làimh agus buannachdan a dh'fhaodadh a bhith ann a thoirt a-steach. Thionndaidh e a-mach gu robh e mì-ghoireasach, ùineail agus daor. Aig an àm sin cha robh fuasgladh sàbhailte sam bith eile ann.

O chionn ghoirid, mhol sgioba Tradisys gnìomh a chur ri protocol Waves rsa Dearbhaich(). Bidh e a’ sgrùdadh dligheachd ainm-sgrìobhte an RSA stèidhichte air an iuchair phoblach is phrìobhaideach. Mar thoradh air an sin, chaidh am feart a chuir ris.

Tha sinn air trì geamannan a leasachadh: Roller dìsnean, Flip Coin и Rothaich air Waves. Bidh gach fear a’ cur an gnìomh teicneòlas àireamh air thuaiream. Feuch an obraich sinn a-mach mar a tha e ag obair.

RSA air thuaiream air blockchain

Bheir sinn sùil air a bhith a’ gineadh àireamh air thuaiream a’ cleachdadh Ride on Waves mar eisimpleir. Gheibhear an cùmhnant smart an seo.

Rach don taba sgriobt agus tagh Decompiled. Chì thu an còd cùmhnant smart (aka script).

RSA air thuaiream air blockchain

Tha seata de dhleastanasan anns a’ chòd cùmhnant smart. Faodar an fheadhainn a tha air an comharrachadh mar @Callable a chuir air bhog a’ cleachdadh Gnìomhan tagraidh. Tha ùidh againn ann an dà dhreuchd: geall и a tharraing air ais:

  • geall func (playerChoice)
  • tarraing air ais func (gameId, rsaSign)

1. Bidh an neach-cleachdaidh a 'taghadh fad na h-earrainn agus meud an geall.

RSA air thuaiream air blockchain

2. Bidh an neach-dèiligidh a 'cruthachadh gnìomh geall. Airson an ìomhaigh gu h-àrd bhiodh e geall ("50").

3. Bidh an neach-dèiligidh a 'cur malairt Invocation gu seòladh cùmhnant smart (craoladh InvocationTx). Anns a’ ghnothach tha gnìomh geall mar pharamadair gairm. Tha seo a’ ciallachadh gu bheil an gnothach Invocation a’ piobrachadh buileachadh a’ ghnìomh geall (roghainn: String) air a’ chùmhnant snasail.

RSA air thuaiream air blockchain

4. Beachdaich air a 'ghnìomh geall:

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

Bidh an gnìomh a 'sgrìobhadh geama ùr gu staid a' chùmhnant smart. Is e sin:

  • Aithneadair gun samhail airson geama ùr (gèam id)
  • Staid geama = AIR A CHUIREADH
  • Roghainn cluicheadair (fad earrann 50)
  • Iuchair phoblach
  • Buannachdan a dh’fhaodadh a bhith ann (a rèir geall a’ chluicheadair)

RSA air thuaiream air blockchain

Seo mar a tha clàr dàta anns an blockchain coltach (prìomh luach):

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

"Iuchair" (iuchair) - id geama geama ùr. Tha an dàta a tha air fhàgail anns an loidhne den raon “luach”. Tha na h-inntrigidhean sin air an stòradh san taba Dàta cùmhnant smart:

RSA air thuaiream air blockchain

RSA air thuaiream air blockchain

5. Bidh am frithealaiche “a’ coimhead” air a’ chùmhnant snasail agus a’ lorg a’ ghnothaich a chaidh a chuir (geam ùr) a’ cleachdadh an blockchain Api. Tha id Game den gheama ùr mu thràth air a chlàradh anns an blockchain, a tha a ’ciallachadh nach urrainn dha atharrachadh no buaidh a thoirt air tuilleadh

6. Bidh am frithealaiche a’ gineadh gnìomh tarraing air ais (gameId, rsaSign). Mar eisimpleir, mar seo:

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

7. Bidh am frithealaiche a 'cur malairt Invocation ris a' chùmhnant smart (craoladh InvocationTx). Anns a’ ghnothach tha gairm chun ghnìomh tarraing air ais cruthaichte (gameId, rsaSign):

RSA air thuaiream air blockchain

Tha an gnìomh a’ toirt a-steach id geama geama ùr agus mar thoradh air RSA a’ soidhnigeadh aithnichear sònraichte le iuchair phrìobhaideach. Tha toradh an t-soidhnidh gun atharrachadh.

Dè tha seo a 'ciallachadh?

Gabhaidh sinn an aon luach (gèam id) agus cuiridh sinn an dòigh ainm-sgrìobhte RSA ris. Gheibh sinn an aon toradh an-còmhnaidh. Seo mar a tha an algairim RSA ag obair. Chan urrainnear an àireamh mu dheireadh a làimhseachadh, leis nach eil fios air id a’ gheama agus toradh tagradh RSA. Tha taghadh àireamh cuideachd gun fheum.

8. Blockchain a 'gabhail ris a' ghnothach. Bidh e a’ ruith a’ ghnìomh tarraing air ais (gameId, rsaSign)

9. Taobh a-staigh a 'ghnìomh tarraing air ais, bidh tarraing air ais a' tachairt Gnìomhan GenerateRandInt (gameId, rsaSign). Is e gineadair àireamh air thuaiream a tha seo

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

Iar - agus tha àireamh air thuaiream.

An toiseach, thèid an sreang a ghabhail, a tha mar thoradh air ainm-sgrìobhte an RSA id geama iuchair phrìobhaideach (rsa Comharraich). An uairsin sgioblaich le SHA-256 (sha256(rsaSign)).

Chan urrainn dhuinn ro-innse toradh an ainm-sgrìobhte agus hashing às deidh sin. Mar sin, tha e do-dhèanta buaidh a thoirt air ginealach àireamh air thuaiream. Gus àireamh fhaighinn ann an raon sònraichte (mar eisimpleir, bho 1 gu 100), cleachd an gnìomh tionndaidh toInt agus % 100 (coltach ri 'Mhòd).

Aig toiseach an artaigil thug sinn iomradh air a 'ghnìomh rsa Dearbhaich(), a leigeas leat sgrùdadh a dhèanamh air dligheachd ainm-sgrìobhte RSA a’ cleachdadh iuchair phrìobhaideach an aghaidh fear poblach. Seo am pàirt GenerateRandInt(gameId,rsaSign):

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

Thèid an iuchair phoblach RSAPUBLIC agus an sreang rsaSign a chuir chun chuir a-steach. Tha an t-ainm-sgrìobhte air a sgrùdadh airson dligheachd. Thèid an àireamh a chruthachadh ma shoirbhicheas leis an t-seic. Rud eile, tha an siostam den bheachd nach eil an t-ainm-sgrìobhte dligheach (ainm-sgrìobhte RSA neo-dhligheach).

Feumaidh am frithealaiche ainm a chuir ri id a’ gheama le iuchair phrìobhaideach agus ainm-sgrìobhte dligheach Rsa a chuir taobh a-staigh blocaichean 2880. Tha am paramadair air a rèiteachadh nuair a thathar a’ cleachdadh a’ chùmhnant snasail. Mura tachair dad taobh a-staigh na h-ùine ainmichte, bidh an neach-cleachdaidh a’ buannachadh. Anns a 'chùis seo, feumar an duais a chuir chun t-seòladh agad fhèin. Tha e a’ tionndadh a-mach nach eil e “prothaid don fhrithealaiche a bhith meallta”, leis gu bheil seo a’ leantainn gu call. Gu h-ìosal tha eisimpleir.

RSA air thuaiream air blockchain

Tha an neach-cleachdaidh a 'cluich Roller dìsnean. Thagh mi 2 de na 6 taobhan den chiùb, is e an geall 14 TONN. Mura cuir an frithealaiche ainm-sgrìobhte RSA dligheach chun chùmhnant snasail taobh a-staigh na h-ùine ainmichte (2880 blocaichean), gabhaidh an neach-cleachdaidh 34.44 WAVES.

Gus àireamhan a ghineadh ann an geamannan, bidh sinn a’ cleachdadh oracle - siostam taobh a-muigh, neo-blockchain. Bidh am frithealaiche a’ coileanadh ainm-sgrìobhte RSA de id a’ gheama. Bidh an cùmhnant snasail a’ sgrùdadh dligheachd an ainm-sgrìobhte agus a’ dearbhadh an neach a bhuannaicheas. Mura cuir am frithealaiche dad, bidh an neach-cleachdaidh a’ buannachadh gu fèin-ghluasadach.

Is e dòigh ginealach onarach a tha seo, leis gu bheil làimhseachadh do-dhèanta gu teicnigeach. Bidh a h-uile geama Tradisys ag obair stèidhichte air an algairim a chaidh a mhìneachadh. Seo mar a tha geamannan blockchain ag obair. Tha a h-uile dad follaiseach agus comasach a dhearbhadh. Chan eil analogues de shiostam mar sin ann an blockchain sam bith eile. Is e mearachd meadhanach a tha seo.

Source: www.habr.com

Cuir beachd ann