เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

เชเช• เชธเชฎเชธเซเชฏเชพ เช›เซ‡ - เชตเชฟเช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เชจเซ‡เชŸเชตเชฐเซเช•เชฎเชพเช‚ เชฐเซ‡เชจเซเชกเชฎ เชจเช‚เชฌเชฐ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡. เชฒเช—เชญเช— เชคเชฎเชพเชฎ เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เช†เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเซ€ เชšเซ‚เช•เซเชฏเชพ เช›เซ‡. เช–เชฐเซ‡เช–เชฐ, เชจเซ‡เชŸเชตเชฐเซเช•เซเชธเชฎเชพเช‚ เชœเซเชฏเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชตเชšเซเชšเซ‡ เช•เซ‹เชˆ เชตเชฟเชถเซเชตเชพเชธ เชจเชฅเซ€, เชจเชฟเชฐเซเชตเชฟเชตเชพเชฆ เชฐเซ‡เชจเซเชกเชฎ เชจเช‚เชฌเชฐ เชฌเชจเชพเชตเชตเชพเชฅเซ€ เช˜เชฃเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชนเชฒ เชฅเชพเชฏ เช›เซ‡.

เช† เชฒเซ‡เช–เชฎเชพเช‚ เช…เชฎเซ‡ เชคเชฎเชจเซ‡ เช•เชนเซ€เช เช›เซ€เช เช•เซ‡ เช…เชฎเซ‡ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชฐเชฎเชคเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เชจเชฟเชฐเชพเช•เชฐเชฃ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซเชฏเซเช‚. เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชชเซเชฐเชฅเชฎ เชนเชคเซ‹ เชตเซ‡เชตเซเช เช•เซเชฐเชฟเชธเชฎเชธ เชŸเซเชฐเซ€. เชตเชฟเช•เชพเชธ เชฎเชพเชŸเซ‡, เช…เชฎเชจเซ‡ เชฐเซ‡เชจเซเชกเชฎ เชจเช‚เชฌเชฐ เชœเชจเชฐเซ‡เชŸเชฐเชจเซ€ เชœเชฐเซ‚เชฐ เชนเชคเซ€.

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เช…เชฎเซ‡ เชฌเซเชฒเซ‹เช•เชšเซ‡เชจเชจเซ€ เชฎเชพเชนเชฟเชคเซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เชจเช‚เชฌเชฐ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชฏเซ‹เชœเชจเชพ เชฌเชจเชพเชตเซ€ เชนเชคเซ€. เชœเซ‹ เช•เซ‡, เชคเซ‡ เชชเช›เซ€ เชคเซ‡ เชธเซเชชเชทเซเชŸ เชฅเชˆ เช—เชฏเซเช‚: เชธเช‚เช–เซเชฏเชพเชจเซ€ เชนเซ‡เชฐเชซเซ‡เชฐ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เช‰เช•เซ‡เชฒ เชฏเซ‹เช—เซเชฏ เชจเชฅเซ€.

เช…เชฎเซ‡ เชเช• เช‰เชชเชพเชฏ เชฒเชˆเชจเซ‡ เช†เชตเซเชฏเชพ เช›เซ€เช: เช•เชฎเชฟเชŸ-เชตเชฟเชธเซเชคเซƒเชค เชฏเซ‹เชœเชจเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹. เชธเชฐเซเชตเชฐเซ‡ 1 เชฅเซ€ 5 เชธเซเชงเซ€เชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเซเช‚ เช…เชจเซเชฎเชพเชจ เชฒเช—เชพเชตเซเชฏเซเช‚, เชคเซ‡เชฎเชพเช‚ เชฎเซ€เช เซเช‚ เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ เช…เชจเซ‡ เชชเช›เซ€ เชชเชฐเชฟเชฃเชพเชฎเชจเซ‡ เชนเซ‡เชถ เช•เชฐเซเชฏเซเช‚ Keccak เช•เชพเชฐเซเชฏเซ‹. เชธเชฐเซเชตเชฐเซ‡ เช…เช—เชพเช‰เชฅเซ€ เชธเชพเชšเชตเซ‡เชฒเชพ เชจเช‚เชฌเชฐ เชธเชพเชฅเซ‡ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชœเชฎเชพเชตเซเชฏเซ‹. เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชนเซ‡เชถ เชฆเซเชตเชพเชฐเชพ เช›เซเชชเชพเชฏเซ‡เชฒเชพ เชจเช‚เชฌเชฐเชจเซ‹ เช…เชจเซเชฎเชพเชจ เชฒเช—เชพเชตเชคเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชฐเชฎเชค เช‰เช•เชณเซ‡ เช›เซ‡.

เช–เซ‡เชฒเชพเชกเซ€เช เชถเชฐเชค เชฒเช—เชพเชตเซ€, เช…เชจเซ‡ เชธเชฐเซเชตเชฐเซ‡ เช›เซเชชเชพเชฏเซ‡เชฒ เชจเช‚เชฌเชฐ เช…เชจเซ‡ "เชฎเซ€เช เซเช‚" เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชชเชฐ เชฎเซ‹เช•เชฒเซเชฏเซเช‚. เชธเชฐเชณ เชถเชฌเซเชฆเซ‹เชฎเชพเช‚, เชคเซ‡เชฃเซ‡ เช•เชพเชฐเซเชกเซเชธ เชœเชพเชนเซ‡เชฐ เช•เชฐเซเชฏเชพ. เชคเซ‡ เชชเช›เซ€, เชธเชฐเซเชตเชฐเซ‡ เชจเช‚เชฌเชฐเซ‹ เชคเชชเชพเชธเซเชฏเชพ เช…เชจเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช•เซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชœเซ€เชคเซเชฏเซ‹ เช•เซ‡ เชนเชพเชฐเซ€ เช—เชฏเซ‹.

เชœเซ‹ เชธเชฐเซเชตเชฐเซ‡ เชšเช•เชพเชธเชฃเซ€ เชฎเชพเชŸเซ‡ เชจเช‚เชฌเชฐ เช…เชฅเชตเชพ "เชฎเซ€เช เซเช‚" เชฎเซ‹เช•เชฒเซเชฏเซเช‚ เชจ เชนเชคเซเช‚, เชคเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชœเซ€เชคเซเชฏเซ‹. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชฆเชฐเซ‡เช• เชฐเชฎเชค เชฎเชพเชŸเซ‡ เช…เช—เชพเช‰เชฅเซ€ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เช—เซ‹เช เชตเชตเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชธเช‚เชญเชตเชฟเชค เชœเซ€เชคเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เช•เชฐเชตเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเชคเซ‹. เชคเซ‡ เช…เชธเซเชตเชฟเชงเชพเชœเชจเช•, เชธเชฎเชฏ เชฎเชพเช‚เช—เซ€ เชฒเซ‡เชคเซเช‚ เช…เชจเซ‡ เช–เชฐเซเชšเชพเชณ เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚. เชคเซ‡ เชธเชฎเชฏเซ‡ เชฌเซ€เชœเซ‹ เช•เซ‹เชˆ เชธเชฒเชพเชฎเชค เช‰เชชเชพเชฏ เชจเชนเซ‹เชคเซ‹.

เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚, Tradisys เชŸเซ€เชฎเซ‡ เชตเซ‡เชตเซเชธ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชฎเชพเช‚ เชซเช‚เช•เซเชถเชจ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชธเซเชคเชพเชต เชฎเซ‚เช•เซเชฏเซ‹ เชนเชคเซ‹ rsaVerify(). เชคเซ‡ เชœเชพเชนเซ‡เชฐ เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เช•เซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เช†เชฐเชเชธเช เชนเชธเซเชคเชพเช•เซเชทเชฐเชจเซ€ เชฎเชพเชจเซเชฏเชคเชพ เชคเชชเชพเชธเซ‡ เช›เซ‡. เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชธเซเชตเชฟเชงเชพ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€.

เช…เชฎเซ‡ เชคเซเชฐเชฃ เชฐเชฎเชคเซ‹ เชตเชฟเช•เชธเชพเชตเซ€ เช›เซ‡: เชกเชพเช‡เชธ เชฐเซ‹เชฒเชฐ, Coin Flip ะธ เชฎเซ‹เชœเชพ เชชเชฐ เชธเชตเชพเชฐเซ€. เชฆเชฐเซ‡เช• เชฐเซ‡เชจเซเชกเชฎ เชจเช‚เชฌเชฐ เชŸเซ‡เช•เชจเซ‹เชฒเซ‹เชœเซ€เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เช†เช•เซƒเชคเชฟ เช•เชฐเซ€เช เช•เซ‡ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡.

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

เชšเชพเชฒเซ‹ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชฐเชพเชˆเชก เช“เชจ เชตเซ‡เชตเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฐเซ‡เชจเซเชกเชฎ เชจเช‚เชฌเชฐ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชœเซ‹เชˆเช. เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชนเซ€เช‚.

เชŸเซ‡เชฌ เชชเชฐ เชœเชพเช“ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เช…เชจเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ‹ เชกเซ€เช•เชฎเซเชชเชพเช‡เชฒ. เชคเชฎเซ‡ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เช•เซ‹เชก (เช‰เชฐเซเชซ เชธเซเช•เซเชฐเชฟเชชเซเชŸ) เชœเซ‹เชถเซ‹.

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เช•เซ‹เชกเชฎเชพเช‚ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เชธเชฎเซ‚เชน เชนเซ‹เชฏ เช›เซ‡. เชœเซ‡ @Callable เชคเชฐเซ€เช•เซ‡ เชšเชฟเชนเซเชจเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช†เชนเชตเชพเชจ เชตเซเชฏเชตเชนเชพเชฐเซ‹. เช…เชฎเชจเซ‡ เชฌเซ‡ เช•เชพเชฐเซเชฏเซ‹เชฎเชพเช‚ เชฐเชธ เช›เซ‡: เชฌเซ€เช‡เชŸเซ€ ะธ เชชเชพเช›เซ‹ เช–เซ‡เช‚เชšเซ‹:

  • เชซเช‚เช• เชถเชฐเชค (เช–เซ‡เชฒเชพเชกเซ€เชจเซ€ เชชเชธเช‚เชฆเช—เซ€)
  • เชซเช‚เช• เช‰เชชเชพเชก (gameId,rsaSign)

1. เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเซ‡เช—เชฎเซ‡เชจเซเชŸเชจเซ€ เชฒเช‚เชฌเชพเชˆ เช…เชจเซ‡ เชถเชฐเชคเชจเซเช‚ เช•เชฆ เชชเชธเช‚เชฆ เช•เชฐเซ‡ เช›เซ‡.

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

2. เช•เซเชฒเชพเชฏเชจเซเชŸ เชฌเซ€เช‡เชŸเซ€ เชซเช‚เช•เซเชถเชจ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เช‰เชชเชฐเชจเซ€ เช›เชฌเซ€ เชฎเชพเชŸเซ‡ เชคเซ‡ เชนเชถเซ‡ เชถเชฐเชค("50").

3. เช•เซเชฒเชพเชฏเชจเซเชŸ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชเชกเซเชฐเซ‡เชธ (เชชเซเชฐเชธเชพเชฐเชฃ InvocationTx) เชชเชฐ เช‡เชจเซเชตเซ‹เช•เซ‡เชถเชจ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡. เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจเชฎเชพเช‚ เช•เซ‰เชฒ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชคเชฐเซ€เช•เซ‡ เชถเชฐเชค เช•เชพเชฐเซเชฏ เชถเชพเชฎเซ‡เชฒ เช›เซ‡. เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เช‡เชจเซเชตเซ‹เช•เซ‡เชถเชจ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชชเชฐ เชฌเซ‡เชŸ เชซเช‚เช•เซเชถเชจ (เชชเชธเช‚เชฆเช—เซ€: เชธเซเชŸเซเชฐเชฟเช‚เช—) เชจเชพ เช…เชฎเชฒเชจเซ‡ เชŸเซเชฐเชฟเช—เชฐ เช•เชฐเซ‡ เช›เซ‡.

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

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

เชซเช‚เช•เซเชถเชจ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชจเชตเซ€ เชฐเชฎเชค เชฒเช–เซ‡ เช›เซ‡. เชœเซ‡เชฎ เช•เซ‡:

  • เชจเชตเซ€ เชฐเชฎเชค เชฎเชพเชŸเซ‡ เช…เชจเชจเซเชฏ เช“เชณเช–เช•เชฐเซเชคเชพ (เช—เซ‡เชฎ เช†เชˆเชกเซ€)
  • เชฐเชฎเชค เชธเซเชฅเชฟเชคเชฟ = เชธเชฌเชฎเชฟเชŸ
  • เช–เซ‡เชฒเชพเชกเซ€เชจเซ€ เชชเชธเช‚เชฆเช—เซ€ (เชธเซ‡เช—เชฎเซ‡เชจเซเชŸเชจเซ€ เชฒเช‚เชฌเชพเชˆ 50)
  • เชธเชพเชฐเซเชตเชœเชจเชฟเช• เช•เซ€
  • เชธเช‚เชญเชตเชฟเชค เชœเซ€เชค (เช–เซ‡เชฒเชพเชกเซ€เชจเซ€ เชถเชฐเชค เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ€เชจเซ‡)

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฐเซ‡เช•เซ‹เชฐเซเชก เช†เชจเชพ เชœเซ‡เชตเซ‹ เชฆเซ‡เช–เชพเชฏ เช›เซ‡ (เช•เซ€-เชตเซ‡เชฒเซเชฏเซ):

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

"เช•เซ€" (เช•เซ€) - เชฐเชฎเชค เช†เชˆเชกเซ€ เชจเชตเซ€ เชฐเชฎเชค. เชฌเชพเช•เซ€เชจเซ‹ เชกเซ‡เชŸเชพ "เชฎเซ‚เชฒเซเชฏ" เชซเซ€เชฒเซเชกเชจเซ€ เชฒเชพเช‡เชจเชฎเชพเช‚ เชธเชฎเชพเชฏเซ‡เชฒ เช›เซ‡. เช† เชเชจเซเชŸเซเชฐเซ€เช“ เชŸเซ‡เชฌเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช›เซ‡ เชกเซ‡เชŸเชพ เชธเซเชฎเชพเชฐเซเชŸ เช•เชฐเชพเชฐ:

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

5. เชธเชฐเซเชตเชฐ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸเชจเซ‡ "เชœเซเช เช›เซ‡" เช…เชจเซ‡ เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ Api เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฎเซ‹เช•เชฒเซ‡เชฒ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ (เชจเชตเซ€ เช—เซ‡เชฎ) เชถเซ‹เชงเซ‡ เช›เซ‡. เชจเชตเซ€ เช—เซ‡เชฎเชจเซ€ เช—เซ‡เชฎ เช†เชˆเชกเซ€ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชฌเซเชฒเซ‹เช•เชšเซ‡เชจเชฎเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชคเซ‡เชจเซ‡ เชนเชตเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เชพเชถเซ‡ เชจเชนเซ€เช‚ เช•เซ‡ เชชเซเชฐเชญเชพเชตเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชถเซ‡ เชจเชนเซ€เช‚.

6. เชธเชฐเซเชตเชฐ เช‰เชชเชพเชก เช•เชพเชฐเซเชฏ (gameId, rsaSign) เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช†เชจเซ€ เชœเซ‡เชฎ:

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

7. เชธเชฐเซเชตเชฐ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ (เชชเซเชฐเชธเชพเชฐเชฃ InvocationTx) เชชเชฐ เชเช• เช‡เชจเซเชตเซ‹เช•เซ‡เชถเชจ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡. เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจเชฎเชพเช‚ เชฐเชšเชพเชฏเซ‡เชฒเชพ เช‰เชชเชพเชก เชซเช‚เช•เซเชถเชจ (gameId, rsaSign) เชฎเชพเชŸเซ‡ เช•เซ‰เชฒเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡:

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

เช•เชพเชฐเซเชฏ เชธเชฎเชพเชตเซ‡ เช›เซ‡ เชฐเชฎเชค เช†เชˆเชกเซ€ เชจเชตเซ€ เชฐเชฎเชค เช…เชจเซ‡ เช–เชพเชจเช—เซ€ เช•เซ€ เชธเชพเชฅเซ‡ เช…เชจเชจเซเชฏ เช“เชณเช–เช•เชฐเซเชคเชพ เชชเชฐ RSA เชนเชธเซเชคเชพเช•เซเชทเชฐเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ. เชธเชนเซ€ เชชเชฐเชฟเชฃเชพเชฎ เช…เชชเชฐเชฟเชตเชฐเซเชคเชฟเชค เช›เซ‡.

เช†เชจเซ‹ เช…เชฐเซเชฅ เชถเซเช‚ เช›เซ‡?

เช…เชฎเซ‡ เชธเชฎเชพเชจ เชฎเซ‚เชฒเซเชฏ (เช—เซ‡เชฎ เช†เชˆเชกเซ€) เชฒเชˆเช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเชพ เชชเชฐ RSA เชธเชนเซ€ เชชเชฆเซเชงเชคเชฟ เชฒเชพเช—เซ เช•เชฐเซ€เช เช›เซ€เช. เช†เชชเชฃเชจเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เช เชœ เชชเชฐเชฟเชฃเชพเชฎ เชฎเชณเชถเซ‡. เช† เชฐเซ€เชคเซ‡ RSA เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช…เช‚เชคเชฟเชฎ เชจเช‚เชฌเชฐเชจเซ€ เชนเซ‡เชฐเชซเซ‡เชฐ เช•เชฐเซ€ เชถเช•เชพเชคเซ€ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เช—เซ‡เชฎ เช†เชˆเชกเซ€ เช…เชจเซ‡ RSA เชฒเชพเช—เซ เช•เชฐเชตเชพเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เชœเชพเชฃเซ€เชคเซเช‚ เชจเชฅเซ€. เชจเช‚เชฌเชฐ เชชเชธเช‚เชฆ เช•เชฐเชตเซ‹ เชชเชฃ เช…เชฐเซเชฅเชนเซ€เชจ เช›เซ‡.

8. เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชตเซเชฏเชตเชนเชพเชฐ เชธเซเชตเซ€เช•เชพเชฐเซ‡ เช›เซ‡. เชคเซ‡ เช‰เชชเชพเชก เช•เชพเชฐเซเชฏ เชšเชฒเชพเชตเซ‡ เช›เซ‡ (gameId, rsaSign)

9. เช‰เชชเชพเชกเชจเชพ เช•เชพเชฐเซเชฏเชจเซ€ เช…เช‚เชฆเชฐ, เช‰เชชเชพเชก เชฅเชพเชฏ เช›เซ‡ เชฐเซ‡เชจเซเชกเช‡เชจเซเชŸ เชซเช‚เช•เซเชถเชจเซเชธ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‹ (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")
    }

เชฐเซ‡เชจเซเชก - เช…เชจเซ‡ เชคเซเชฏเชพเช‚ เชเช• เชฐเซ‡เชจเซเชกเชฎ เชจเช‚เชฌเชฐ เช›เซ‡.

เชชเซเชฐเชฅเชฎ, เชถเชฌเซเชฆเชฎเชพเชณเชพ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ RSA เชนเชธเซเชคเชพเช•เซเชทเชฐเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช›เซ‡ เชฐเชฎเชค เช†เชˆเชกเซ€ เช–เชพเชจเช—เซ€ เช•เซ€ (rsaเชธเชพเช‡เชจ). เชชเช›เซ€ SHA-256 (sha256(rsaSign)).

เช…เชฎเซ‡ เชธเชนเซ€ เช…เชจเซ‡ เช…เชจเซเช—เชพเชฎเซ€ เชนเซ‡เชถเชฟเช‚เช—เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเชจเซ€ เช†เช—เชพเชนเซ€ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€. เชคเซ‡เชฅเซ€, เชฐเซ‡เชจเซเชกเชฎ เชจเช‚เชฌเชฐเชจเซ€ เชชเซ‡เชขเซ€เชจเซ‡ เชชเซเชฐเชญเชพเชตเชฟเชค เช•เชฐเชตเซเช‚ เช…เชถเช•เซเชฏ เช›เซ‡. เชšเซ‹เช•เซเช•เชธ เชถเซเชฐเซ‡เชฃเซ€เชฎเชพเช‚ เชธเช‚เช–เซเชฏเชพ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, 1 เชฅเซ€ 100 เชธเซเชงเซ€), toInt เช•เชจเซเชตเชฐเซเชเชจ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช…เชจเซ‡ %100 (เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชœ เชซเซ‡เชฐเชซเชพเชฐเชจเซ€).

เชฒเซ‡เช–เชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เช…เชฎเซ‡ เช•เชพเชฐเซเชฏเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ rsaVerify(), เชœเซ‡ เชคเชฎเชจเซ‡ เชธเชพเชฐเซเชตเชœเชจเชฟเช• เชเช•เชจเซ€ เชธเชพเชฎเซ‡ เช–เชพเชจเช—เซ€ เช•เซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ RSA เชนเชธเซเชคเชพเช•เซเชทเชฐเชจเซ€ เชฎเชพเชจเซเชฏเชคเชพ เชคเชชเชพเชธเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช…เชนเซ€เช‚ GenerateRandInt(gameId,rsaSign) เชญเชพเช— เช›เซ‡:

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

เชธเชพเชฐเซเชตเชœเชจเชฟเช• เช•เซ€ RSAPUBLIC เช…เชจเซ‡ rsaSign เชธเซเชŸเซเชฐเชฟเช‚เช— เช‡เชจเชชเซเชŸ เชชเชฐ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡. เชธเชนเซ€ เชฎเชพเชจเซเชฏเชคเชพ เชฎเชพเชŸเซ‡ เชคเชชเชพเชธเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชœเซ‹ เชšเซ‡เช• เชธเชซเชณ เชฅเชพเชฏ เชคเซ‹ เชจเช‚เชฌเชฐ เชœเชจเชฐเซ‡เชŸ เชฅเชพเชฏ เช›เซ‡. เชจเชนเชฟเช‚เชคเชฐ, เชธเชฟเชธเซเชŸเชฎ เชฎเชพเชจเซ‡ เช›เซ‡ เช•เซ‡ เชธเชนเซ€ เชฎเชพเชจเซเชฏ เชจเชฅเซ€ (เช…เชฎเชพเชจเซเชฏ RSA เชนเชธเซเชคเชพเช•เซเชทเชฐ).

เชธเชฐเซเชตเชฐเซ‡ เชชเซเชฐเชพเชˆเชตเซ‡เชŸ เช•เซ€ เชตเชกเซ‡ เช—เซ‡เชฎ เช†เชˆเชกเซ€ เชชเชฐ เชธเชนเซ€ เช•เชฐเชตเซ€ เชœเซ‹เชˆเช เช…เชจเซ‡ 2880 เชฌเซเชฒเซ‹เช•เชจเซ€ เช…เช‚เชฆเชฐ เชฎเชพเชจเซเชฏ Rsa เชนเชธเซเชคเชพเช•เซเชทเชฐ เชฎเซ‹เช•เชฒเชตเชพ เชœเซ‹เชˆเช. เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชœเชฎเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชชเชฐเชฟเชฎเชพเชฃ เช—เซ‹เช เชตเซ‡เชฒ เช›เซ‡. เชœเซ‹ เชซเชพเชณเชตเซ‡เชฒ เชธเชฎเชฏเชจเซ€ เช…เช‚เชฆเชฐ เช•เช‚เชˆ เชจ เชฅเชพเชฏ, เชคเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชœเซ€เชคเซ‡ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช‡เชจเชพเชฎ เชคเชฎเชพเชฐเชพ เชธเชฐเชจเชพเชฎเชพเช‚ เชชเชฐ เชœเชพเชคเซ‡ เชฎเซ‹เช•เชฒเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ "เชธเชฐเซเชตเชฐเชจเซ‡ เช›เซ‡เชคเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชจเชซเชพเช•เชพเชฐเช• เชจเชฅเซ€", เช•เชพเชฐเชฃ เช•เซ‡ เช† เชจเซเช•เชธเชพเชจ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชพเชฏ เช›เซ‡. เชจเซ€เชšเซ‡ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡.

เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชชเชฐ RSA เชฐเซ‡เชจเซเชกเชฎ

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฐเชฎเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡ เชกเชพเช‡เชธ เชฐเซ‹เชฒเชฐ. เชฎเซ‡เช‚ เช•เซเชฏเซเชฌเชจเซ€ 2 เชฌเชพเชœเซเช“เชฎเชพเช‚เชฅเซ€ 6 เชชเชธเช‚เชฆ เช•เชฐเซ€ เช›เซ‡, เชถเชฐเชค 14 เชตเซ‡เชตเซเชธ เช›เซ‡. เชœเซ‹ เชธเชฐเซเชตเชฐ เชธเซเชชเชทเซเชŸ เชธเชฎเชฏ (2880 เชฌเซเชฒเซ‹เช•เซเชธ) เชจเซ€ เช…เช‚เชฆเชฐ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชชเชฐ เชฎเชพเชจเซเชฏ RSA เชนเชธเซเชคเชพเช•เซเชทเชฐ เชฎเซ‹เช•เชฒเชคเซเช‚ เชจเชฅเซ€, เชคเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ 34.44 เชตเซ‡เชตเซเชธ เชฒเซ‡เชถเซ‡.

เชฐเชฎเชคเซ‹เชฎเชพเช‚ เชธเช‚เช–เซเชฏเชพเช“ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เช“เชฐเซ‡เช•เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช - เชเช• เชฌเชพเชนเซเชฏ, เชฌเชฟเชจ-เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เชธเชฟเชธเซเชŸเชฎ. เชธเชฐเซเชตเชฐ เช—เซ‡เชฎ เช†เชˆเชกเซ€เชจเซ€ RSA เชธเชนเซ€ เช•เชฐเซ‡ เช›เซ‡. เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชธเชนเซ€เชจเซ€ เชฎเชพเชจเซเชฏเชคเชพ เชคเชชเชพเชธเซ‡ เช›เซ‡ เช…เชจเซ‡ เชตเชฟเชœเซ‡เชคเชพ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เชธเชฐเซเชตเชฐ เช•เช‚เชˆเชชเชฃ เชฎเซ‹เช•เชฒเชคเซเช‚ เชจเชฅเซ€, เชคเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช†เชชเชฎเซ‡เชณเซ‡ เชœเซ€เชคเซ‡ เช›เซ‡.

เช† เชเช• เชชเซเชฐเชพเชฎเชพเชฃเชฟเช• เชชเซ‡เชขเซ€ เชชเชฆเซเชงเชคเชฟ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชฎเซ‡เชจเซ€เชชเซเชฏเซเชฒเซ‡เชถเชจ เชคเช•เชจเซ€เช•เซ€ เชฐเซ€เชคเซ‡ เช…เชถเช•เซเชฏ เช›เซ‡. เชฌเชงเซ€ Tradisys เชฐเชฎเชคเซ‹ เชตเชฐเซเชฃเชตเซ‡เชฒ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชจเชพ เช†เชงเชพเชฐเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡. เช† เชฐเซ€เชคเซ‡ เชฌเซเชฒเซ‹เช•เชšเซ‡เชจ เช—เซ‡เชฎเซเชธ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชฌเชงเซเช‚ เชชเชพเชฐเชฆเชฐเซเชถเช• เช…เชจเซ‡ เชšเช•เชพเชธเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เช›เซ‡. เช…เชจเซเชฏ เช•เซ‹เชˆเชชเชฃ เชฌเซเชฒเซ‹เช•เชšเซ‡เชจเชฎเชพเช‚ เช†เชตเซ€ เชธเชฟเชธเซเชŸเชฎเชจเชพ เช•เซ‹เชˆ เชเชจเชพเชฒเซ‹เช— เชจเชฅเซ€. เช† เชเช• เชตเชพเชœเชฌเซ€ เชฐเซ‡เชจเซเชกเชฎ เช›เซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹