แแ แแก แแ แแแแแแ - แซแแแแแ แจแแแแฎแแแแแแ แ แแชแฎแแแก แแแแแ แแ แแแ แแแชแแแขแ แแแแแแแฃแ แฅแกแแแจแ. แแแแฅแแแก แงแแแแ แแแแแฉแแแแก แฃแแแ แจแแแฅแแแ แแก. แแแ แแแแช, แฅแกแแแแแจแ, แกแแแแช แแแแฎแแแ แแแแแแก แจแแ แแก แแแแแ แแ แแ แแก, แฃแแแ แจแแแแฎแแแแแแ แ แแชแฎแแแก แจแแฅแแแ แแแแ แแ แแแแแแแก แฌแงแแแขแก.
แแ แกแขแแขแแแจแ แฉแแแ แแแขแงแแแ, แแฃ แ แแแแ แแแแแฎแแ แฎแแ แแ แแแแแแแก แแแแแญแ แ แแแแแจแแแแก แแแแแแแแแก แแแแแงแแแแแแ. แแแ แแแแ แแแแแแแ แแงแ
แแแแแแแแ แแแแแ, แฉแแแ แแแแแแแแแแ แแแแแฉแแแแแก แแแคแแ แแแชแแแก แกแแคแฃแซแแแแแ แแแแ แแก แแแแแ แแ แแแแก. แแฃแแชแ, แจแแแแแ แแแแ แแแ: แแแแ แแก แแแแแแฃแแแ แแแ แจแแแซแแแแแแ, แ แแช แแแแก แแแจแแแแก, แ แแ แแแแแกแแแแแ แแ แแ แแก แจแแกแแคแแ แแกแ.
แฉแแแ แแแแแฆแแ แแแแแกแแแแแ: แแแแแแงแแแแ commit-expand แกแฅแแแ. แกแแ แแแ แแ แแแแแแชแแ แ แแชแฎแแ 1-แแแ 5-แแแ, แแแแแแขแ แแแ แแแ แแ แจแแแแแ แแแแกแฌแแ แ แจแแแแแ.
แแแแแแแจแแ แแแแ แคแกแแแ แแ แกแแ แแแ แแ แแแฃแแแแแแ แแแแแแฃแแ แแแแแ แ แแ "แแแ แแแ" แกแแแ แข แแแแขแ แแฅแขแจแ. แแแ แขแแแ แกแแขแงแแแแแ, แแแ แแแแแแแแแแ แแแ แแแแแ. แแแแก แจแแแแแ, แกแแ แแแ แแ แจแแแแแฌแแ แแแแ แแแ แแ แแแแแฌแงแแแขแ แแแแฎแแแ แแแแแแ แแแแแ แแฃ แฌแแแแ.
แแฃ แกแแ แแแ แแ แแ แแแแแแแแ แแแแแ แ แแ "แแแ แแแ" แแแแแแแฌแแแแแกแแแแก, แแแแฎแแแ แแแแแแ แแแแแแ แฏแแ. แแ แจแแแแฎแแแแแจแ, แแแแแแฃแแ แแแแแจแแกแแแแก แกแแญแแ แ แแงแ แฌแแแแกแฌแแ แกแแแ แข แแแแขแ แแฅแขแแก แแแแแแแแแ แแ แแแกแจแ แแแขแแแชแแฃแ แ แแแแแแแก แฉแแ แแแ. แแฆแแแฉแแแ แแ แแกแแกแแแแแแแ, แจแ แแแแขแแแแแ แแ แซแแแ แ. แแ แแ แแก แกแฎแแ แฃแกแแคแ แแฎแ แแแแแกแแแแแ แแ แแ แกแแแแแแ.
แชแแขแ แฎแแแก แฌแแ, Tradisys-แแก แแฃแแแแ แจแแกแแแแแแ แคแฃแแฅแชแแแก แแแแแขแแแ Waves แแ แแขแแแแแจแ rsaVerify (). แแก แแแแฌแแแแก RSA แฎแแแแแฌแแ แแก แแแแแแแแแแแก แกแแฏแแ แ แแ แแแ แซแ แแแกแแฆแแแแก แกแแคแฃแซแแแแแ. แจแแแแแแ, แคแฃแแฅแชแแ แแแแแแขแ.
แฉแแแ แจแแแแแฃแจแแแแ แกแแแ แแแแแจแ:
แแแแแ แจแแแฎแแแแ แจแแแแฎแแแแแแ แ แแชแฎแแแก แแแแแ แแ แแแแก Ride on Waves-แแก แแแแแงแแแแแแ. แญแแแแแแ แแแแขแ แแฅแขแ แจแแแแซแแแแ แแฎแแแแ
แแแแแแแ แฉแแแแ แแแ Script แแ แแแ แฉแแแ แแแแแแแแแแ แแแฃแแ. แแฅแแแ แแแฎแแแ แญแแแแแแ แแแแขแ แแฅแขแแก แแแแก (แแแ แกแแ แแแขแ).
แญแแแแแแ แแแแขแ แแฅแขแแก แแแแ แจแแแชแแแก แคแฃแแฅแชแแแแแก แแ แแแแแแแแแก. แแกแแแ, แ แแแแแแแช แแแแแจแแฃแแแ @Callable, แจแแแซแแแแ แแแแฅแขแแฃแ แแแก แแแแแงแแแแแแ แแแแแซแแฎแแแแก แแแแ แแชแแแแ. แฉแแแ แแแแแแขแแ แแกแแแก แแ แ แคแฃแแฅแชแแ: แคแกแแแ ะธ แแแแงแแแแแก:
- func แคแกแแแ (playerChoice)
- func แแแแฆแแแ (gameId,rsaSign)
1. แแแแฎแแแ แแแแแ แแ แฉแแแก แกแแแแแแขแแก แกแแแ แซแแก แแ แคแกแแแแก แแแแแก.
2. แแแแแแขแ แฅแแแแก แคแกแแแแก แคแฃแแฅแชแแแก. แแแแแ แแแชแแแฃแแ แกแฃแ แแแแกแแแแก แแก แแฅแแแแแแ แคแกแแแ ("50").
3. แแแแแแขแ แแแแแแแแก Invocation แขแ แแแแแฅแชแแแก แญแแแแแแ แแแแขแ แแฅแขแแก แแแกแแแแ แแแ (แแแฃแฌแงแแแแแแ InvocationTx). แขแ แแแแแฅแชแแ แจแแแชแแแก แคแกแแแแก แคแฃแแฅแชแแแก, แ แแแแ แช แแแ แแก แแแ แแแแขแ แก. แแก แแแจแแแแก, แ แแ Invocation แขแ แแแแแฅแชแแ แแฌแแแแก แคแกแแแแก แคแฃแแฅแชแแแก (แแ แฉแแแ: String) แจแแกแ แฃแแแแแก แกแแแ แข แแแแขแ แแฅแขแแ.
4. แแแแแแฎแแแแ แคแกแแแแก แคแฃแแฅแชแแ:
@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)))
}
}
แคแฃแแฅแชแแ แฌแแ แก แแฎแแ แแแแแจแก แญแแแแแแ แแแแขแ แแฅแขแแก แแแแแแแ แแแแแแ. แแแ แซแแ:
- แฃแแแแแแฃแ แ แแแแแขแแคแแแแขแแ แ แแฎแแแ แแแแแจแแกแแแแก (แแแแแจแแก ID)
- แแแแแจแแก แแแแแแแ แแแแ = SUBMITTED
- แแแแแแแจแแก แแ แฉแแแแแ (แกแแแแแแขแแก แกแแแ แซแ 50)
- แกแแฏแแ แ แแแกแแฆแแแ
- แแแขแแแชแแฃแ แ แแแแแแ (แแแแแแแแแแฃแแแ แแแแแแแจแแก แคแกแแแแ)
แแกแ แแแแแแงแฃแ แแแ แแแแแชแแแแ แฉแแแแฌแแ แ แแแแแฉแแแแจแ (แแแกแแฆแแแ-แแแแจแแแแแแแ):
{
"type": "string",
"value": "03WON_0283_448t8Jn9P3717UnXFEVD5VWjfeGE5gBNeWg58H2aJeQEgJ_06574069_09116020000_0229",
"key": "2GKTX6NLTgUrE4iy9HtpSSHpZ3G8W4cMfdjyvvnc21dx"
}
"แแแกแแฆแแแ" (แแแกแแฆแแแ) - แแแแแจแแก ID แแฎแแแ แแแแแจแ. แแแ แฉแแแแแ แแแแแชแแแแแ แจแแแชแแแก "แแแแจแแแแแแแแก" แแแแจแ. แแก แฉแแแแฌแแ แแแ แแแแฎแแแ แฉแแแแ แแจแ แแแ แแฆแ แญแแแแแแ แแแแขแ แแฅแขแ:
5. แกแแ แแแ แ โแแฎแแแแแกโ แกแแแ แข แแแแขแ แแฅแขแก แแ แแแฃแแแแก แแแแแแแแแ แขแ แแแแแฅแชแแแก (แแฎแแ แแแแแจแก) blockchain Api-แก แแแแแงแแแแแแ. แแฎแแแ แแแแแจแแก แแแแแจแแก ID แฃแแแ แฉแแฌแแ แแแแ แแแแแฉแแแแจแ, แ แแช แแแจแแแแก, แ แแ แแฆแแ แจแแแซแแแแ แแแกแ แจแแชแแแ แแ แแแแแแแแก แแแฎแแแแ
6. แกแแ แแแ แ แฅแแแแก แแแแฆแแแแก แคแฃแแฅแชแแแก (gameId, rsaSign). แแแแแแแแแ, แแกแ:
withdraw ("FwsuaaShC6DMWdSWQ5osGWtYkVbTEZrsnxqDbVx5oUpq", "base64:Gy69dKdmXUEsAmUrpoWxDLTQOGj5/qO8COA+QjyPVYTAjxXYvEESJbSiCSBRRCOAliqCWwaS161nWqoTL/TltiIvw3nKyd4RJIBNSIgEWGM1tEtNwwnRwSVHs7ToNfZ2Dvk/GgPUqLFDSjnRQpTHdHUPj9mQ8erWw0r6cJXrzfcagKg3yY/0wJ6AyIrflR35mUCK4cO7KumdvC9Mx0hr/ojlHhN732nuG8ps4CUlRw3CkNjNIajBUlyKQwpBKmmiy3yJa/QM5PLxqdppmfFS9y0sxgSlfLOgZ51xRDYuS8NViOA7c1JssH48ZtDbBT5yqzRJXs3RnmZcMDr/q0x6Bg==")
7. แกแแ แแแ แ แแแแแแแแก Invocation แขแ แแแแแฅแชแแแก แกแแแ แข แแแแขแ แแฅแขแแ (แแแฃแฌแงแแแแแแ InvocationTx). แขแ แแแแแฅแชแแ แจแแแชแแแก แแแ แก แฉแแแแงแแแแแแแฃแ แแแแฆแแแแก แคแฃแแฅแชแแแแ (gameId, rsaSign):
แคแฃแแฅแชแแ แจแแแชแแแก แแแแแจแแก ID แแฎแแแ แแแแแจแ แแ RSA แฎแแแแแฌแแ แแก แจแแแแแ แฃแแแแแแฃแ แ แแแแแขแแคแแแแขแแ แแก แแแ แแแ แแแกแแฆแแแแ. แฎแแแแแฌแแ แแก แจแแแแแ แฃแชแแแแแแ.
แ แแก แแแจแแแแก แแก?
แฉแแแ แแแฆแแแ แแแแแ แแแแจแแแแแแแแก (แแแแแจแแก id) แแ แแแงแแแแแ แแแกแแ RSA แฎแแแแแฌแแ แแก แแแแแแก. แฉแแแ แงแแแแแแแแก แแ แแกแ แแ แแแแแ แจแแแแแก แแแแแฆแแแ. แแกแ แแฃแจแแแแก RSA แแแแแ แแแแ. แกแแแแแแ แแแแ แแก แแแแแแฃแแแ แแแ แจแแฃแซแแแแแแแ, แ แแแแแ แแแแแจแแก ID แแ RSA-แก แแแแแงแแแแแแก แจแแแแแ แฃแชแแแแแ. แ แแชแฎแแแก แแ แฉแแแ แแกแแแ แฃแแแ แแ.
8. แแแแแฉแแแแ แแฆแแแก แขแ แแแแแฅแชแแแก. แแก แแฌแแ แแแแแก แแแงแแแแแก แคแฃแแฅแชแแแก (gameId, rsaSign)
9. แแแงแแแแแก แคแฃแแฅแชแแแก แจแแแแแ แฎแแแแ แแแแฆแแแ GenerateRandInt แคแฃแแฅแชแแแแ (gameId, rsaSign). แแก แแ แแก แจแแแแฎแแแแแแ แ แแชแฎแแแแแก แแแแแ แแขแแ แ
# @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 - แแ แแ แแก แจแแแแฎแแแแแแ แ แแชแฎแแ.
แแแ แแแ แ แแแจแ, แแฆแแแฃแแแ แกแขแ แแฅแแแ, แ แแแแแแช แแ แแก RSA แฎแแแแแฌแแ แแก แจแแแแแ แแแแแจแแก ID แแแ แแแ แแแกแแฆแแแ (rsaSign). แจแแแแแ แฐแแจแแ แแแฃแแแ SHA-256-แแ (sha256 (rsaSign)).
แฉแแแ แแ แจแแแแแซแแแ แแแฌแแแแกแฌแแ แแแขแงแแแแแ แฎแแแแแฌแแ แแก แแ แจแแแแแแแ แฐแแจแแ แแแแก แจแแแแแ. แแฅแแแแ แแแแแแแแแแ แ, แจแแฃแซแแแแแแแ แจแแแแฎแแแแแแ แ แแชแฎแแแก แแแแแ แแ แแแแแ แแแแแแแแก แแแฎแแแแ. แแแแกแแแแแก, แ แแ แแแแฆแแ แ แแชแฎแแ แแแ แแแแฃแ แแแแแแแแแจแ (แแแแแแแแแ, 1-แแแ 100-แแแ), แแแแแแงแแแแ toInt แแแแแแ แขแแชแแแก แคแฃแแฅแชแแ แแ %100 (แแกแแแแกแ
แกแขแแขแแแก แแแกแแฌแงแแกแจแ แฉแแแ แแฆแแแแจแแแ แคแฃแแฅแชแแ rsaVerify (), แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แจแแแแแฌแแแ RSA แฎแแแแแฌแแ แแก แแแแแแแแ แแแ แซแ แแแกแแฆแแแแก แแแแแงแแแแแแ แกแแฏแแ แ แแแกแแฆแแแแก แฌแแแแแฆแแแแ. แแฅ แแ แแก GenerateRandInt(gameId,rsaSign) แแแฌแแแ:
rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
แกแแฏแแ แ แแแกแแฆแแแ RSAPUBLIC แแ rsaSign แกแขแ แแฅแแแ แแแแแแชแแแ แจแแงแแแแแก. แฎแแแแแฌแแ แ แแแฌแแแแแ แแแแแแแแแแแแ. แแแแแ แ แแแแแ แแ แแแแ, แแฃ แจแแแแฌแแแแ แฌแแ แแแขแแแฃแแแ. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แกแแกแขแแแ แแแแแก, แ แแ แฎแแแแแฌแแ แ แแ แแกแฌแแ แแ (Invalid RSA signature).
แกแแ แแแ แแ แฃแแแ แแแแฌแแ แแก แฎแแแ แแแแแจแแก ID-แก แแแ แแแ แแแกแแฆแแแแ แแ แแแแแแแแแแแแก แแแฅแแแแ Rsa แฎแแแแแฌแแ แ 2880 แแแแแแก แคแแ แแแแแจแ. แแแ แแแแขแ แ แแแแคแแแฃแ แแ แแแฃแแแ แญแแแแแแ แแแแขแ แแฅแขแแก แแแแแแแแแแกแแก. แแฃ แแแแแจแแฃแ แแ แแจแ แแ แแคแแ แ แแแฎแแ, แแแแฎแแแ แแแแแ แแแแ แฏแแแแก. แแ แจแแแแฎแแแแแจแ แแ แแแ แแแแแ แฃแแแ แแแแแแแแแแก แแฅแแแแก แแแกแแแแ แแแ. แแแแแแแก, แ แแ "แกแแ แแแ แแกแแแแก แแ แแ แแก แแแแแแแแแแ แแแขแงแฃแแแ", แ แแแแแ แแก แแฌแแแแก แแแแแ แแแแก. แฅแแแแแ แแแชแแแฃแแแ แแแแแแแแ.
แแแแฎแแแ แแแแแ แแแแแจแแแก
แแแแแจแแแจแ แ แแชแฎแแแแแก แแแแแ แแ แแแแกแแแแก แฉแแแ แแแงแแแแแ แแ แแแแก - แแแ แ, แแ แแแแแแฉแแแ แกแแกแขแแแแก. แกแแ แแแ แ แแกแ แฃแแแแก RSA แฎแแแแแฌแแ แแก แแแแแจแแก ID-แแ. แญแแแแแแ แแแแขแ แแฅแขแ แแแแฌแแแแก แฎแแแแแฌแแ แแก แแแแแแแแแแแก แแ แแแแแแก แแแแแ แฏแแแแฃแแก. แแฃ แกแแ แแแ แ แแ แแคแแ แก แแแแแแแแก, แแแจแแ แแแแฎแแแ แแแแแ แแแขแแแแขแฃแ แแ แแแแ แฏแแแแก.
แแก แแ แแก แแแขแแแกแแแ แแแแแ แแ แแแแก แแแแแแ, แ แแแแแ แแแแแแฃแแแ แแแ แขแแฅแแแแฃแ แแ แจแแฃแซแแแแแแแ. Tradisys-แแก แงแแแแ แแแแแจแ แแฃแจแแแแก แแฆแฌแแ แแแ แแแแแ แแแแแก แกแแคแฃแซแแแแแ. แแกแ แแฃแจแแแแก แแแแแฉแแแ แแแแแจแแแ. แงแแแแแคแแ แ แแแแญแแแ แแแแ แแ แจแแแแฌแแแแแแแ. แแ แชแแ แ แกแฎแแ แแแแแฉแแแแจแ แแ แแ แกแแแแแก แแกแแแ แกแแกแขแแแแก แแแแแแแ. แแก แกแแแแ แแแแแแ แจแแแแฎแแแแแแแแแ.
แฌแงแแ แ: www.habr.com