Aia kahi pilikia - paʻakikī ke hoʻopuka i kahi helu maʻamau i kahi pūnaewele decentralized. Aneane pau nā blockchains i ʻike i kēia. ʻOiaʻiʻo, i nā pūnaewele kahi i hilinaʻi ʻole ʻia ma waena o nā mea hoʻohana, ʻo ka hana ʻana i kahi helu maʻamau hiki ʻole ke hoʻonā i nā pilikia he nui.
Ma kēia ʻatikala e haʻi mākou iā ʻoe pehea mākou i hoʻoponopono ai i ka pilikia me ka hoʻohana ʻana i nā pāʻani ma ke ʻano he laʻana. ʻO ka mua o lākou
I ka wā mua, ua hoʻolālā mākou e hana i kahi helu e pili ana i ka ʻike mai ka blockchain. Eia naʻe, a laila ua maopopo: hiki ke hoʻololi ʻia ka helu, ʻo ia hoʻi, ʻaʻole kūpono ka hopena.
Ua hele mai mākou me kahi hana: e hoʻohana i ka hoʻolālā commit-expand. Manaʻo ke kikowaena i kahi helu mai ka 1 a hiki i ka 5, hoʻohui i ka paʻakai iā ia, a laila hoʻopili i ka hopena me ka hoʻohana ʻana
Ua kau ka mea pāʻani i ka bet, a ua hoʻouna ke kikowaena i ka helu huna a me ka "paʻakai" i ka ʻaelike akamai. Ma nā'ōlelo maʻalahi, ua hōʻikeʻo ia i nā kāleka. Ma hope o kēlā, nānā ke kikowaena i nā helu a hoʻoholo inā lanakila a nalowale paha ka mea hoʻohana.
Inā ʻaʻole i hoʻouna ka kikowaena i kahi helu a i ʻole "paʻakai" no ka hōʻoia, ua lanakila ka mea hoʻohana. I kēia hihia, no kēlā me kēia pāʻani he mea pono ia e kau i kahi ʻaelike akamai ma mua a hoʻokomo i nā lanakila lanakila i loko. Ua lilo ia i mea kūponoʻole, hoʻopau manawa a me ke kumukūʻai. I kēlā manawa ʻaʻohe hopena palekana ʻē aʻe.
I kēia mau lā, ua manaʻo ka hui Tradisys e hoʻohui i kahi hana i ka protocol Waves rsaVerify(). Nānā ia i ka pono o ka pūlima RSA ma muli o ke kī lehulehu a me ka pilikino. ʻO ka hopena, ua hoʻohui ʻia ka hiʻohiʻona.
Ua kūkulu mākou i ʻekolu pāʻani:
E nānā kākou i ka hana ʻana i kahi helu maʻamau me ka hoʻohana ʻana i ka Ride on Waves i laʻana. Hiki ke loaʻa ka ʻaelike akamai
E hele i ka pākaukau kōmi'ōkuhi a koho Hoʻopili ʻia. E ʻike ʻoe i ke code ʻaelike akamai (aka script).
Aia i loko o ke code aelike akamai kekahi mau hana. Hiki ke hoʻokuʻu ʻia nā mea i hōʻailona ʻia ʻo @Callable me ka hoʻohana ʻana Nā hana hoʻopiʻi. Makemake mākou i ʻelua mau hana: pili и hookaawale ia:
- pāʻani pāʻani (playerChoice)
- hana hoʻihoʻi (gameId, rsaSign)
1. Koho ka mea hoʻohana i ka lōʻihi o ka māhele a me ka nui o ka bet.
2. Hoʻokumu ka mea kūʻai i kahi hana pili. No ke kiʻi ma luna pili("50").
3. Hoʻouna ka mea kūʻai aku i kahi hana Invocation i ka helu ʻaelike akamai (broadcast InvocationTx). Loaʻa i ke kālepa ka hana bet ma ke ʻano he kelepona kelepona. ʻO kēia ke kumu o ka Invocation transaction e hoʻomaka i ka hoʻokō ʻana i ka hana bet (koho: String) ma ka ʻaelike akamai.
4. E noʻonoʻo i ka hana pili:
@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)))
}
}
Kākau ka hana i kahi pāʻani hou i ke kūlana o ka ʻaelike akamai. ʻO ia hoʻi:
- ʻIke kūʻokoʻa no kahi pāʻani hou (ike pāʻani)
- Mokuʻāina pāʻani = KAU
- Koho a ka mea pāʻani (ʻāpana 50 lōʻihi)
- Ki lehulehu
- Loaʻa nā lanakila (ma muli o ka bet a ka mea pāʻani)
ʻO kēia ke ʻano o kahi moʻolelo ʻikepili i ka blockchain (key-value):
{
"type": "string",
"value": "03WON_0283_448t8Jn9P3717UnXFEVD5VWjfeGE5gBNeWg58H2aJeQEgJ_06574069_09116020000_0229",
"key": "2GKTX6NLTgUrE4iy9HtpSSHpZ3G8W4cMfdjyvvnc21dx"
}
"Kī" (ki) – pāʻani id pāʻani hou. Aia nā ʻikepili i koe ma ka laina o ka māla "waiwai". Mālama ʻia kēia mau mea i loko o ka pā 'Ikepili ʻaelike akamai:
5. "Nānā" ke kikowaena i ka ʻaelike akamai a ʻike i ke kālepa i hoʻouna ʻia (pāʻani hou) me ka hoʻohana ʻana i ka blockchain Api. Ua hoʻopaʻa ʻia ka Game id o ka pāʻani hou i ka blockchain, ʻo ia hoʻi, ʻaʻole hiki ke hoʻololi a hoʻololi hou ʻia
6. Hoʻokumu ke kikowaena i kahi hana withdraw (gameId, rsaSign). No ka laʻana, e like me kēia:
withdraw ("FwsuaaShC6DMWdSWQ5osGWtYkVbTEZrsnxqDbVx5oUpq", "base64:Gy69dKdmXUEsAmUrpoWxDLTQOGj5/qO8COA+QjyPVYTAjxXYvEESJbSiCSBRRCOAliqCWwaS161nWqoTL/TltiIvw3nKyd4RJIBNSIgEWGM1tEtNwwnRwSVHs7ToNfZ2Dvk/GgPUqLFDSjnRQpTHdHUPj9mQ8erWw0r6cJXrzfcagKg3yY/0wJ6AyIrflR35mUCK4cO7KumdvC9Mx0hr/ojlHhN732nuG8ps4CUlRw3CkNjNIajBUlyKQwpBKmmiy3yJa/QM5PLxqdppmfFS9y0sxgSlfLOgZ51xRDYuS8NViOA7c1JssH48ZtDbBT5yqzRJXs3RnmZcMDr/q0x6Bg==")
7. Hoʻouna ke kikowaena i kahi kālepa Invocation i ka ʻaelike akamai (broadcast InvocationTx). Loaʻa i ke kālepa kahi kelepona i ka hana withdraw i kūkulu ʻia (gameId, rsaSign):
Aia ka hana pāʻani id pāʻani hou a me ka hopena o ke kau inoa ʻana o RSA i kahi ʻike kūʻokoʻa me kahi kī pilikino. ʻAʻole i loli ka hopena pūlima.
He aha keʻano o kēia?
Lawe mākou i ka waiwai like (game id) a hoʻopili i ke ʻano hana pūlima RSA iā ia. E loaʻa mau iā mākou ka hopena like. ʻO kēia ka hana o ka RSA algorithm. ʻAʻole hiki ke hoʻohana ʻia ka helu hope, no ka mea ʻaʻole ʻike ʻia ka id pāʻani a me ka hopena o ka noi ʻana iā RSA. He mea ʻole ke koho ʻana i kahi helu.
8. ʻAe ʻo Blockchain i ke kālepa. Holo ia i ka hana withdraw (gameId, rsaSign)
9. I loko o ka hana withdraw, hiki mai ka withdrawal Nā hana GenerateRandInt (gameId, rsaSign). He mea hoʻoheheʻe helu maʻamau kēia
# @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")
}
palaoa - a aia kahi helu maʻamau.
ʻO ka mua, lawe ʻia ke kaula, ʻo ia ka hopena o ka pūlima RSA pāʻani id kī pilikino (rsaSign). A laila hoʻopili ʻia me SHA-256 (sha256(rsaSign)).
ʻAʻole hiki iā mākou ke wānana i ka hopena o ka pūlima a me ka hashing ma hope. No laila, ʻaʻole hiki ke hoʻololi i ka hoʻokumu ʻana o kahi helu maʻamau. No ka loaʻa ʻana o kahi helu ma kekahi ʻano (no ka laʻana, mai 1 a 100), e hoʻohana i ka hana hoʻololi toInt a me %100 (e like me
I ka hoʻomaka ʻana o ka ʻatikala ua haʻi mākou i ka hana rsaVerify(), hiki iā ʻoe ke nānā i ka pono o kahi pūlima RSA me kahi kī pilikino e kūʻē i kahi pūlima. Eia ka ʻāpana GenerateRandInt(gameId,rsaSign):
rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
Hāʻawi ʻia ke kī lehulehu RSAPUBLIC a me ke kaula rsaSign i ka hoʻokomo. Nānā ʻia ka pūlima no ka pono. Hoʻokumu ʻia ka helu inā kūleʻa ka māka. A i ʻole, manaʻo ka ʻōnaehana ʻaʻole kūpono ka pūlima (Invalid RSA signature).
Pono ke kikowaena e kau inoa i ka id pāʻani me kahi kī pilikino a hoʻouna i kahi pūlima Rsa kūpono i loko o 2880 poloka. Hoʻonohonoho ʻia ka ʻāpana i ka wā e kau ana i ka ʻaelike akamai. Inā ʻaʻohe mea i loaʻa i loko o ka manawa i hāʻawi ʻia, lanakila ka mea hoʻohana. I kēia hihia, pono e hoʻouna ʻia ka makana i kāu helu wahi iā ʻoe iho. ʻIke ʻia he "ʻaʻole pono i ka server ke hoʻopunipuni", no ka mea e alakaʻi ana kēia i ka poho. Aia ma lalo kahi laʻana.
Ke pāʻani nei ka mea hoʻohana
No ka hana ʻana i nā helu i nā pāʻani, hoʻohana mākou i kahi oracle - kahi ʻōnaehana waho, non-blockchain. Hana ke kikowaena i kahi pūlima RSA o ka id pāʻani. Nānā ka ʻaelike akamai i ka pono o ka pūlima a hoʻoholo i ka mea lanakila. Inā ʻaʻole hoʻouna ke kikowaena i kekahi mea, a laila lanakila ʻokoʻa ka mea hoʻohana.
He ʻano hanauna ʻoiaʻiʻo kēia, no ka mea, ʻaʻole hiki i ka manipulation ke ʻenehana. Hana nā pāʻani Tradisys āpau ma muli o ka algorithm i wehewehe ʻia. ʻO kēia ka hana o nā pāʻani blockchain. ʻO nā mea a pau i maopopo a hiki ke hōʻoia. ʻAʻohe analogues o ia ʻōnaehana i kekahi blockchain ʻē aʻe. ʻO kēia kahi koho kūpono.
Source: www.habr.com