RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

เบกเบตเบšเบฑเบ™เบซเบฒ - เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ•เบปเบงเป€เบฅเบเปเบšเบšเบชเบธเปˆเบกเปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเบฒเบ™เบเบฐเบˆเบฒเบ. เป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ” blockchain เป„เบ”เป‰เบžเบปเบšเบ™เบตเป‰เปเบฅเป‰เบง. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบตเปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเป€เบŠเบทเปˆเบญเบซเบกเบฑเป‰เบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบœเบนเป‰เปƒเบŠเป‰, เบเบฒเบ™เบชเป‰เบฒเบ‡เบˆเปเบฒเบ™เบงเบ™เปเบšเบšเบชเบธเปˆเบกเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเป€เบชเบ”เป„เบ”เป‰เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบซเบผเบฒเบเบขเปˆเบฒเบ‡.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบšเบญเบเบ—เปˆเบฒเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป‚เบ”เบเปƒเบŠเป‰เป€เบเบกเป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡. เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™ Waves เบ•เบปเป‰เบ™เป„เบกเป‰ Xmas. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เบ•เบปเบงเป€เบฅเบเปเบšเบšเบชเบธเปˆเบก.

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ•เบปเบงเป€เบฅเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ blockchain. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™: เบ•เบปเบงเป€เบฅเบเบชเบฒเบกเบฒเบ”เบ–เบทเบเบซเบกเบนเบ™เปƒเบŠเป‰, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เปเบเป‰เป„เบ‚เปเบกเปˆเบ™เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹: เปƒเบŠเป‰โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เบเบฒเบ™โ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เบ•เบปเบงโ€‹. เป€เบŠเบตเบšเป€เบงเบตเป„เบ”เป‰เบ„เบฒเบ”เป€เบ”เบปเบฒเบ•เบปเบงเป€เบฅเบเบˆเบฒเบ 1 เบซเบฒ 5, เป€เบžเบตเปˆเบกเป€เบเบทเบญเปƒเบชเปˆเบกเบฑเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ hashed เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเปƒเบŠเป‰ เบŸเบฑเบ‡เบŠเบฑเปˆเบ™ Keccak. เป€เบŠเบตเบšเป€เบงเบตเป„เบ”เป‰เบ™เบณเปƒเบŠเป‰เบชเบฑเบ™เบเบฒเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบ”เป‰เบงเบเบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เบฅเปˆเบงเบ‡เปœเป‰เบฒ. เบกเบฑเบ™ turns เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เป€เบเบก boils เบฅเบปเบ‡โ€‹เปƒเบซเป‰โ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เป€เบ”เบปเบฒโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบŠเบทเปˆเบญเบ‡โ€‹เป„เบงเป‰โ€‹เป‚เบ”เบ hash เป„เบ”เป‰โ€‹.

เบœเบนเป‰เบ™เบงเบฒเบ‡เป€เบ”เบตเบกเบžเบฑเบ™, เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป„เบ”เป‰เบชเบปเปˆเบ‡เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰เปเบฅเบฐ "เป€เบเบทเบญ" เป„เบ›เบซเบฒเบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”. เป€เบงเบปเป‰เบฒเบ‡เปˆเบฒเบเป†, เบฅเบฒเบงเป€เบ›เบตเบ”เป€เบœเบตเบเบšเบฑเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป„เบ”เป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ•เบปเบงเป€เบฅเบเปเบฅเบฐเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบœเบนเป‰เปƒเบŠเป‰เบŠเบฐเบ™เบฐเบซเบผเบทเบชเบนเบ™เป€เบชเบ.

เบ–เป‰เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบ•เบปเบงเป€เบฅเบเบซเบผเบท "เป€เบเบทเบญ" เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš, เบœเบนเป‰เปƒเบŠเป‰เบŠเบฐเบ™เบฐ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเป€เบเบกเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”เบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเปเบฅเบฐเบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบŠเบฐเบ™เบฐเบ—เบตเปˆเบกเบตเบ—เปˆเบฒเปเบฎเบ‡เปƒเบ™เบกเบฑเบ™. เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบšเปเปˆเบชเบฐเบ”เบงเบ, เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเปเบฅเบฐเบฅเบฒเบ„เบฒเปเบžเบ‡. เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ™เบฑเป‰เบ™โ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบญเบทเปˆเบ™เป†โ€‹เบ—เบตเปˆโ€‹เบ›เบญเบ”โ€‹เป„เบžโ€‹เปเบกเปˆเบ™โ€‹.

เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰, เบ—เบตเบกเบ‡เบฒเบ™ Tradisys เป„เบ”เป‰เบชเบฐเป€เบซเบ™เบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบซเป‰เบเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™ Waves rsaVerify(). เบกเบฑเบ™เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™ RSA เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฅเบฐเบซเบฑเบ”เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปเบฅเบฐเบชเปˆเบงเบ™เบ•เบปเบง. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบชเบฒเบกโ€‹เป€เบเบกโ€‹: เป€เบงเบปเป‰เบฒเบงเปˆเบฒ Roller, เบซเบผเบฝเบ™เบžเบดเบ ะธ เบ‚เบตเปˆเบ„เบทเป‰เบ™. เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบ•เบปเบงเป€เบฅเบเปเบšเบšเบชเบธเปˆเบก. เปƒเบซเป‰เบ„เบดเบ”เบญเบญเบเบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”.

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเป€เบฅเบเปเบšเบšเบชเบธเปˆเบกเป‚เบ”เบเปƒเบŠเป‰ Ride on Waves เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡. เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰ เบ—เบตเปˆเบ™เบตเป‰.

เป„เบ›เบ—เบตเปˆเปเบ–เบš script เปเบฅเบฐเป€เบฅเบทเบญเบ Decompiled. เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบฅเบฐเบซเบฑเบ”เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ” (aka script).

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

เบฅเบฐเบซเบฑเบ”เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบŠเบธเบ”เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ. เบœเบนเป‰เบ—เบตเปˆเบ–เบทเบเปเบฒเบเป€เบ›เบฑเบ™ @Callable เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเป‚เบ”เบเปƒเบŠเป‰ เบ—เบธเบฅเบฐเบเปเบฒเบเบฒเบ™เป€เบญเบตเป‰เบ™. เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบชเบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ: bet ะธ เบ–เบญเบ™:

  • เบเบฒเบ™เป€เบ”เบตเบกเบžเบฑเบ™ func (playerChoice)
  • func เบ–เบญเบ™(gameId,rsaSign)

1. เบœเบนเป‰เปƒเบŠเป‰เป€เบฅเบทเบญเบเบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบชเปˆเบงเบ™เปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เป€เบ”เบตเบกเบžเบฑเบ™.

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

2. เบฅเบนเบเบ„เป‰เบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ”เบตเบกเบžเบฑเบ™. เบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเบžเบฒเบšเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™ bet ("50").

3. เบฅเบนเบเบ„เป‰เบฒเบชเบปเปˆเบ‡เบ—เบธเบฅเบฐเบเปเบฒ Invocation เป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ” (broadcast InvocationTx). เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบ”เบตเบกเบžเบฑเบ™เป€เบ›เบฑเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เป‚เบ—. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ Invocation เบเบฐเบ•เบธเป‰เบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ”เบตเบกเบžเบฑเบ™ (เบ—เบฒเบ‡เป€เบฅเบทเบญเบ: String) เปƒเบ™เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”.

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

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 game)
  • เบชเบฐเบ–เบฒเบ™เบฐเป€เบเบก = เบชเบปเปˆเบ‡เปเบฅเป‰เบง
  • เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เบซเบผเบดเป‰เบ™ (เบชเปˆเบงเบ™โ€‹เบเบฒเบง 50โ€‹)
  • เบเบฐเปเบˆเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ
  • เบเบฒเบ™เบŠเบฐเบ™เบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ (เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เป€เบ”เบตเบกเบžเบฑเบ™เบ‚เบญเบ‡เบœเบนเป‰เบ™)

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เปƒเบ™ blockchain เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ (key-value):

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

"เบเบฐเปเบˆ" (key) - ID เป€เบเบก เป€เบเบกโ€‹เปƒเบซเบกเปˆ. เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เบเบฑเบ‡โ€‹เป€เบซเบผเบทเบญโ€‹เปเบกเปˆเบ™โ€‹เบกเบตโ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ‚เบญเบ‡โ€‹เบžเบฒเบโ€‹เบชเบฐโ€‹เบซเบ™เบฒเบก "เบ„เบธเบ™โ€‹เบ„เปˆเบฒโ€‹"โ€‹. เบฅเบฒเบเบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เปเบ–เบš เบ‚เปเป‰เบกเบนเบ™ เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”:

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

5. เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ "เป€เบšเบดเปˆเบ‡" เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”เปเบฅเบฐเบŠเบญเบเบซเบฒเบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบชเบปเปˆเบ‡ (เป€เบเบกเปƒเบซเบกเปˆ) เป‚เบ”เบเปƒเบŠเป‰ blockchain Api. เป„เบญเบ”เบตเป€เบเบกเบ‚เบญเบ‡เป€เบเบกเปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™ blockchain เปเบฅเป‰เบง, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบทเบกเบตเบญเบดเบ”เบ—เบดเบžเบปเบ™เป„เบ”เป‰เบญเบตเบเบ•เปเปˆเป„เบ›.

6. เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบญเบ™เบ•เบปเบง (gameId, rsaSign). เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

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

7. เป€เบŠเบตเบšเป€เบงเบตเบชเบปเปˆเบ‡เบ—เบธเบฅเบฐเบเปเบฒ Invocation เบเบฑเบšเบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ” (broadcast InvocationTx). เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบญเบ™เบ•เบปเบง (gameId, rsaSign):

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

เบŸเบฑเบ‡เบŠเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบ ID เป€เบเบก เป€เบเบกเปƒเปเปˆ เปเบฅเบฐเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบฑเบ™ RSA เบ‚เบญเบ‡เบ•เบปเบงเบฅเบฐเบšเบธเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เบชเปˆเบงเบ™เบ•เบปเบง. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบฅเบฒเบเป€เบŠเบฑเบ™เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡.

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”?

เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบ„เปˆเบฒเบ”เบฝเบงเบเบฑเบ™ (id game) เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบฅเบฒเบเป€เบŠเบฑเบ™ RSA เบเบฑเบšเบกเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเป€เบซเบกเบตเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบ”เบฝเบงเบเบฑเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™ RSA algorithm เป€เบฎเบฑเบ”เบงเบฝเบ. เบ•เบปเบงเป€เบฅเบเบชเบธเบ”เบ—เป‰เบฒเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เป„เบ”เป‰, เป€เบžเบฒเบฐเบงเปˆเบฒ ID เป€เบเบก เปเบฅเบฐเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ RSA เปเบกเปˆเบ™เบšเปเปˆเบฎเบนเป‰เบˆเบฑเบ. เบเบฒเบ™เป€เบฅเบทเบญเบเป€เบญเบปเบฒเบ•เบปเบงเป€เบฅเบเปเบกเปˆเบ™เบเบฑเบ‡เบšเปเปˆเบกเบตเบˆเบธเบ”เบซเบกเบฒเบ.

8. Blockchain เบเบญเบกเบฎเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ. เบกเบฑเบ™เปเบฅเปˆเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ–เบญเบ™เบ•เบปเบง (gameId, rsaSign)

9. เบžเบฒเบเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบญเบ™, เบเบฒเบ™เบ–เบญเบ™เบ•เบปเบงเป€เบเบตเบ”เบ‚เบทเป‰เบ™ เบชเป‰เบฒเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™RandInt (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")
    }

เป„เบ•เป‰ - เปเบฅเบฐโ€‹เบกเบตโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™ Randomโ€‹.

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, เบชเบฐเบ•เบดเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบฅเบฒเบเป€เบŠเบฑเบ™ RSA ID เป€เบเบก เบเบฐเปเบˆเบชเปˆเบงเบ™เบ•เบปเบง (rsaSign). เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, hashed เบเบฑเบš SHA-256 (sha256(rsaSign)).

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เบ„เบฐเป€เบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™เปเบฅเบฐเบเบฒเบ™ hashing เบ•เปเปˆเบกเบฒ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบกเบตเบญเบดเบ”เบ—เบดเบžเบปเบ™เบ•เปเปˆเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ•เบปเบงเป€เบฅเบเปเบšเบšเบชเบธเปˆเบก. เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบ•เบปเบงเป€เบฅเบเบขเบนเปˆเปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡: เบˆเบฒเบ 1 เบซเบฒ 100), เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เบเบฒเบ™เปเบ›เบ‡ toInt เปเบฅเบฐ %100 (เบ„เป‰เบฒเบเบเบฑเบš. เบ•เป‰เบฒเบ™).

เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ rsaVerify(), เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™ RSA เป‚เบ”เบเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบชเปˆเบงเบ™เบ•เบปเบงเบ•เปเปˆเบเบฑเบšเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ. เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™ GenerateRandInt(gameId,rsaSign):

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

เบฅเบฐเบซเบฑเบ”เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ RSAPUBLIC เปเบฅเบฐเบชเบฐเบ•เบฃเบดเบ‡ rsaSign เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบฅเบฒเบเป€เบŠเบฑเบ™เบ–เบทเบเบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡. เบ•เบปเบงเป€เบฅเบเปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ–เป‰เบฒเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบšเบปเบšเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบฅเบฒเบเป€เบŠเบฑเบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡ (เบฅเบฒเบเป€เบŠเบฑเบ™ RSA เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡).

เป€เบŠเบตเบšเป€เบงเบตเบ•เป‰เบญเบ‡เป€เบŠเบฑเบ™เบŠเบทเปˆเป€เบเบกเบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เบชเปˆเบงเบ™เบ•เบปเบง เปเบฅเบฐเบชเบปเปˆเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™ Rsa เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบžเบฒเบเปƒเบ™ 2880 เบ•เบฑเบ™. เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบตเบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบกเบทเปˆเบญเบ™เบณเปƒเบŠเป‰เบชเบฑเบ™เบเบฒเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš, เบœเบนเป‰เปƒเบŠเป‰เบŠเบฐเบ™เบฐ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบฅเบฒเบ‡เบงเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡. เบกเบฑเบ™ turns เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เปเบกเปˆเบ™ "เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบœเบปเบ™โ€‹เบเปเบฒโ€‹เป„เบฅโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป‚เบเบ‡โ€‹", เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เบ™เปเบฒโ€‹เป„เบ›โ€‹เบชเบนเปˆโ€‹เบเบฒเบ™โ€‹เบชเบนเบ™โ€‹เป€เบชเบ. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡.

RSA เปเบšเบšเบชเบธเปˆเบกเปƒเบ™ blockchain

เบœเบนเป‰เปƒเบŠเป‰เบเปเบฒเบฅเบฑเบ‡เบซเบผเบตเป‰เบ™ เป€เบงเบปเป‰เบฒเบงเปˆเบฒ Roller. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฅเบทเบญเบ 2 เปƒเบ™ 6 เบ”เป‰เบฒเบ™เบ‚เบญเบ‡ cube, เบเบฒเบ™เป€เบ”เบตเบกเบžเบฑเบ™เปเบกเปˆเบ™ 14 WAVES. เบ–เป‰เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเปเปˆเบชเบปเปˆเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™ RSA เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เป„เบ›เบซเบฒเบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”เบžเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰ (2880 เบ•เบฑเบ™), เบœเบนเป‰เปƒเบŠเป‰เบˆเบฐเป€เบญเบปเบฒ 34.44 WAVES.

เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ•เบปเบงเป€เบฅเบเปƒเบ™เป€เบเบก, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ oracle - เบžเบฒเบเบ™เบญเบ, เบšเปเปˆเปเบกเปˆเบ™เบฅเบฐเบšเบปเบš blockchain. เป€เบŠเบตเบšเป€เบงเบตเป€เบฎเบฑเบ”เบฅเบฒเบเป€เบŠเบฑเบ™ RSA เบ‚เบญเบ‡ ID เป€เบเบก. เบชเบฑเบ™เบเบฒเบชเบฐเบซเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบœเบนเป‰เบŠเบฐเบ™เบฐ. เบ–เป‰เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเปเปˆเบชเบปเปˆเบ‡เบซเบเบฑเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบœเบนเป‰เปƒเบŠเป‰เบˆเบฐเบŠเบฐเบ™เบฐเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบŠเบทเปˆเบชเบฑเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เป€เบ•เบฑเบเบ™เบดเบ. เป€เบเบก Tradisys เบ—เบฑเบ‡เปเบปเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰. เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเป€เบเบก blockchain เป€เบฎเบฑเบ”เบงเบฝเบ. เบ—เบธเบเบขเปˆเบฒเบ‡เบกเบตเบ„เบงเบฒเบกเป‚เบ›เปˆเบ‡เปƒเบช เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเป„เบ”เป‰. เบšเปเปˆเบกเบต analogues เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™ blockchain เบญเบทเปˆเบ™เป†. เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบชเบธเปˆเบกเบ—เบตเปˆเบเบธเบ”เบ•เบดเบ—เปเบฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™