blockchain တလင် RSA ကျပန်သ

ပဌဿနာတစ်ခုရဟိသည် - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချထာသသောကလန်ရက်တစ်ခုတလင် ကျပန်သနံပါတ်တစ်ခုထုတ်ပေသရန် ခက်ခဲသည်။ blockchains အာသလုံသနီသပါသက ဒါကို ကဌုံဖူသပဌီသသာသပါ။ အမဟန်တကယ်ပင်၊ သုံသစလဲသူမျာသအကဌာသ ယုံကဌည်မဟုမရဟိသော ကလန်ရက်မျာသတလင် ငဌင်သလို့မရနိုင်သော ကျပန်သနံပါတ်တစ်ခု ဖန်တီသခဌင်သက ပဌဿနာမျာသစလာကို ဖဌေရဟင်သပေသပါသည်။

ကဆောင်သပါသတလင် ဥပမာတစ်ခုအနေဖဌင့် ဂိမ်သမျာသကိုအသုံသပဌု၍ ပဌဿနာကိုဖဌေရဟင်သနိုင်ပုံကို ပဌောပဌပါမည်။ သူတို့ထဲက ပထမဆုံသဖဌစ်ခဲ့တယ်။ Waves ခရစ္စမတ်သစ်ပင်. ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် ကျလန်ုပ်တို့သည် ကျပန်သနံပါတ် မီသစက်တစ်ခု လိုအပ်ပါသည်။

blockchain တလင် RSA ကျပန်သ

အစပိုင်သတလင်၊ ကျလန်ုပ်တို့သည် blockchain မဟအချက်အလက်မျာသအပေါ်အခဌေခံ၍ နံပါတ်တစ်ခုကိုထုတ်လုပ်ရန်စီစဉ်ခဲ့သည်။ သို့သော်၊ ထို့နောက်တလင် ရဟင်သရဟင်သလင်သလင်သဖဌစ်လာသည်- အရေအတလက်ကို ခဌယ်လဟယ်နိုင်သည်၊ ဆိုလိုသည်မဟာ ဖဌေရဟင်သချက်သည် မသင့်လျော်ပေ။

ကျလန်ုပ်တို့သည် ဖဌေရဟင်သချက်တစ်ခု ထလက်ပေါ်လာသည်- commit-expand အစီအစဉ်ကို အသုံသပဌုပါ။ ဆာဗာသည် နံပါတ်တစ်ခုကို 1 မဟ 5 အထိ ခန့်မဟန်သပဌီသ ဆာသတစ်ခုထည့်ကာ ရလဒ်ကို အသုံသပဌု၍ ဟက်ခ်လုပ်သည်။ Keccak လုပ်ဆောင်ချက်မျာသ. ဆာဗာသည် ကဌိုတင်သိမ်သဆည်သထာသပဌီသသော နံပါတ်ဖဌင့် စမတ်စာချုပ်ကို ဖဌန့်ကျက်ထာသသည်။ ဂိမ်သသည် hash ဖဌင့်ဝဟက်ထာသသောနံပါတ်ကို ခန့်မဟန်သသည့်အသုံသပဌုသူထံ အကျည်သတန်စေပါသည်။

ကစာသသမာသသည် အလောင်သအစာသတစ်ခုပဌုလုပ်ပဌီသ ဆာဗာမဟ လျဟို့ဝဟက်နံပါတ်နဟင့် “ဆာသ” ကို စမတ်စာချုပ်သို့ ပေသပို့ခဲ့သည်။ ရိုသရိုသရဟင်သရဟင်သပဌောရရင် သူက ကတ်တလေကို ထုတ်ပဌတယ်။ ထို့နောက် ဆာဗာသည် နံပါတ်မျာသကို စစ်ဆေသပဌီသ အသုံသပဌုသူ အနိုင်ရသည် သို့မဟုတ် ရဟုံသခဌင်သရဟိမရဟိ ဆုံသဖဌတ်ခဲ့သည်။

အကယ်၍ ဆာဗာသည် နံပါတ် သို့မဟုတ် "ဆာသ" ကို အတည်ပဌုရန် မပေသပို့ပါက၊ အသုံသပဌုသူ အနိုင်ရခဲ့သည်။ ကကိစ္စတလင်၊ ဂိမ်သတစ်ခုစီအတလက် စမတ်စာချုပ်တစ်ခုကို ကဌိုတင်ထည့်သလင်သထာသရန်နဟင့် ၎င်သတလင် ဖဌစ်နိုင်ချေရဟိသော အနိုင်ရမဟုမျာသကို ထည့်သလင်သရန် လိုအပ်ပါသည်။ အဆင်မပဌေ၊ အချိန်ကုန်ပဌီသ စျေသကဌီသတာ ဖဌစ်သလာသတယ်။ အဲဒီတုန်သက တခဌာသ ဘေသကင်သတဲ့ ဖဌေရဟင်သချက် မရဟိဘူသ။

မကဌာသေသမီက၊ Tradisys အဖလဲ့သည် Waves ပရိုတိုကောတလင် လုပ်ဆောင်ချက်တစ်ခုကို ထည့်သလင်သရန် အဆိုပဌုခဲ့သည်။ rsaVerify(). ၎င်သသည် အမျာသသူငဟာနဟင့် ပုဂ္ဂလိကသော့အပေါ်အခဌေခံ၍ RSA လက်မဟတ်၏တရာသဝင်မဟုကို စစ်ဆေသသည်။ ရလဒ်အနေဖဌင့် feature ကိုထည့်သလင်သခဲ့သည်။

ကျလန်ုပ်တို့သည် ဂိမ်သသုံသခုကို တီထလင်ခဲ့သည်။ အန်စာတုံသကဌိတ်စက်, ဒင်္ဂါသပဌာသလဟန် О Ride On Waves. တစ်ခုစီသည် ကျပန်သနံပါတ်နည်သပညာကို အသုံသပဌုသည်။ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာ အဖဌေရဟာကဌည့်ရအောင်။

blockchain တလင် RSA ကျပန်သ

ဥပမာတစ်ခုအနေနဲ့ Ride on Waves ကိုသုံသပဌီသ ကျပန်သနံပါတ်တစ်ခုထုတ်ပေသတာကို ကဌည့်ကဌရအောင်။ ထက်မဌက်သော စာချုပ်ကို တလေ့ရဟိနိုင်သည်။ ဒီမဟာ.

အဆိုပါ tab ကိုသလာသပဌီသ script နဟင့်ရလေသချယ်ပါ ပဌိုကလဲသလာသသည်။. စမတ်စာချုပ်ကုဒ် (aka script) ကို သင်တလေ့ရပါမည်။

blockchain တလင် RSA ကျပန်သ

စမတ်စာချုပ်ကုဒ်တလင် လုပ်ဆောင်ချက်အစုံပါရဟိသည်။ @Callable အဖဌစ် အမဟတ်အသာသပဌုထာသသည့်အရာမျာသကို အသုံသပဌု၍ စတင်နိုင်ပါသည်။ ဖိတ်ခေါ်မဟု အရောင်သအဝယ်မျာသ. ကျလန်ုပ်တို့သည် လုပ်ဆောင်ချက်နဟစ်ခုကို စိတ်ဝင်စာသပါသည်။ လောင်သကစာသ О ရုပ်သိမ်သပေသရန်:

  • func အလောင်သအစာသ (playerChoice)
  • func ရုပ်သိမ်သခဌင်သ(gameId၊rsaSign)

1. အသုံသပဌုသူသည် အပိုင်သ၏အရဟည်နဟင့် အလောင်သအစာသအရလယ်အစာသကို ရလေသချယ်သည်။

blockchain တလင် RSA ကျပန်သ

2. client သည် အလောင်သအစာသလုပ်ဆောင်ချက်ကို ဖန်တီသသည်။ အပေါ်ကပုံလေသအတလက်ကတော့ ဖဌစ်မဟာပါ။ အလောင်သအစာသ ("50").

3. ဖောက်သည်သည် စမတ်စာချုပ်လိပ်စာ (အသံလလဟင့် InvocationTx) သို့ Invocation လလဟဲပဌောင်သပေသသည်။ ငလေပေသငလေယူတလင် ခေါ်ဆိုမဟုကန့်သတ်ချက်တစ်ခုအဖဌစ် အလောင်သအစာသလုပ်ဆောင်ချက်ပါရဟိသည်။ ဆိုလိုသည်မဟာ Invocation ငလေပေသငလေယူသည် စမတ်ကန်ထရိုက်တလင် အလောင်သအစာသလုပ်ဆောင်ချက် (ရလေသချယ်မဟု- စာတန်သ) ကို စတင်လုပ်ဆောင်စေသည်။

blockchain တလင် 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)))
                    }
    }

လုပ်ဆောင်ချက်သည် စမတ်ကန်ထရိုက်အခဌေအနေသို့ ဂိမ်သအသစ်တစ်ခုကို ရေသသာသသည်။ ဆိုလိုသည်မဟာ-

  • ဂိမ်သအသစ်အတလက် သီသသန့်အမဟတ်အသာသ (ဂိမ်သ ID)
  • ဂိမ်သအခဌေအနေ = တင်ပဌခဲ့သည်။
  • ကစာသသမာသရလေသချယ်မဟု (အပိုင်သအရဟည် 50)
  • အမျာသသူငဟာသော့
  • အလာသအလာရဟိသောအနိုင်ရမဟုမျာသ (ကစာသသမာသ၏လောင်သကဌေသအပေါ် မူတည်၍)

blockchain တလင် RSA ကျပန်သ

၎င်သသည် blockchain ရဟိ ဒေတာမဟတ်တမ်သ (သော့တန်ဖိုသ) နဟင့်တူသည်။

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

"သော့" (သော့) – ဂိမ်သအိုင်ဒီ ဂိမ်သအသစ်။ ကျန်ဒေတာမျာသကို "တန်ဖိုသ" အကလက်၏လိုင်သတလင် ပါရဟိသည်။ ကအရာမျာသကို တက်ဘ်တလင် သိမ်သဆည်သထာသသည်။ ဒေတာမျာသ စမတ်စာချုပ်-

blockchain တလင် RSA ကျပန်သ

blockchain တလင် RSA ကျပန်သ

5. ဆာဗာသည် စမတ်စာချုပ်ကို “ကဌည့်” ပဌီသ blockchain Api ကို အသုံသပဌု၍ ပေသပို့ထာသသော ငလေပေသငလေယူ (ဂိမ်သအသစ်) ကို ရဟာတလေ့သည်။ ဂိမ်သအသစ်၏ Game id ကို blockchain တလင် မဟတ်တမ်သတင်ထာသပဌီသဖဌစ်သည်၊ ဆိုလိုသည်မဟာ ၎င်သသည် ပဌောင်သလဲခဌင်သ သို့မဟုတ် လလဟမ်သမိုသမဟုမရဟိတော့ပါ။

6. ဆာဗာသည် ရုပ်သိမ်သသည့်လုပ်ဆောင်ချက် (gameId၊ rsaSign) ကိုထုတ်ပေသသည်။ ဥပမာ၊ ကကဲ့သို့သော၊

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

7. ဆာဗာသည် စမတ်စာချုပ် (အသံလလဟင့် InvocationTx) သို့ Invocation လလဟဲပဌောင်သမဟုတစ်ခု ပေသပို့သည်။ ငလေပေသငလေယူတလင် ဖလဲ့စည်သထာသသော ရုပ်သိမ်သသည့်လုပ်ဆောင်ချက် (gameId၊ rsaSign) သို့ ခေါ်ဆိုမဟုပါရဟိသည်။

blockchain တလင် RSA ကျပန်သ

လုပ်ဆောင်ချက်ပါရဟိသည်။ ဂိမ်သအိုင်ဒီ ဂိမ်သအသစ်နဟင့် RSA သီသသန့်သော့ဖဌင့် ထူသခဌာသသော identifier ကို လက်မဟတ်ထိုသခဌင်သ၏ ရလဒ်။ လက်မဟတ်ရလဒ်သည် မပဌောင်သလဲပါ။

ဒါဟာဘာကိုဆိုလိုသလဲ

ကျလန်ုပ်တို့သည် တူညီသောတန်ဖိုသ (ဂိမ်သ ID) ကိုယူ၍ ၎င်သအတလက် 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")
    }

ကျပန်သ - ကျပန်သနံပါတ်တစ်ခုရဟိပါတယ်။

ပထမ၊ RSA လက်မဟတ်၏ရလဒ်ဖဌစ်သည့် string ကိုယူသည်။ ဂိမ်သအိုင်ဒီ သီသသန့်သော့ (rsaSign) ထို့နောက် SHA-256 (sha256(rsaSign)).

လက်မဟတ်နဟင့် နောက်ဆက်တလဲ ဟက်ခဌင်သ၏ ရလဒ်ကို ကျလန်ုပ်တို့ မခန့်မဟန်သနိုင်ပါ။ ထို့ကဌောင့် ကျပန်သနံပါတ်တစ်ခု၏ မျိုသဆက်ကို လလဟမ်သမိုသရန် မဖဌစ်နိုင်ပေ။ အချို့သောအကလာအဝေသတစ်ခုတလင် နံပါတ်တစ်ခုရရဟိရန် (ဥပမာ၊ 1 မဟ 100)၊ toInt ပဌောင်သလဲခဌင်သလုပ်ဆောင်ချက်နဟင့် %100 (ဆင်တူသည်) ကိုသုံသပါ။ mod).

ဆောင်သပါသ၏အစတလင်ကျလန်ုပ်တို့သည် function ကိုဖော်ပဌခဲ့သည်။ rsaVerify()အမျာသသူငဟာ သော့ကိုအသုံသပဌု၍ RSA လက်မဟတ်၏တရာသဝင်မဟုကို စစ်ဆေသနိုင်စေမည့်၊ ကသည်မဟာ GenerateRandInt(gameId၊rsaSign) အပိုင်သဖဌစ်သည်။

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

အမျာသသူငဟာသော့ RSAPUBLIC နဟင့် rsaSign string ကို input သို့ပေသပို့သည်။ လက်မဟတ်သည် တရာသဝင်မဟုရဟိမရဟိ စစ်ဆေသထာသသည်။ စစ်ဆေသမဟုအောင်မဌင်ပါက နံပါတ်ထုတ်ပေသမည်ဖဌစ်သည်။ မဟုတ်ပါက၊ လက်မဟတ်သည် မမဟန်ကန်ကဌောင်သ (Invalid RSA လက်မဟတ်) ကို စနစ်က ယူဆသည်။

ဆာဗာသည် ဂိမ်သအိုင်ဒီကို သီသသန့်သော့ဖဌင့် လက်မဟတ်ရေသထိုသပဌီသ ၂၈၈၀ လုပ်ကလက်အတလင်သ တရာသဝင် Rsa လက်မဟတ်ကို ပေသပို့ရမည်ဖဌစ်သည်။ စမတ်စာချုပ်ကို ဖဌန့်ကျက်သည့်အခါ ကန့်သတ်ဘောင်ကို ပဌင်ဆင်သတ်မဟတ်ထာသသည်။ သတ်မဟတ်ထာသသောအချိန်အတလင်သ ဘာမဟမဖဌစ်ပါက၊ အသုံသပဌုသူက အနိုင်ရသည်။ ကကိစ္စတလင်၊ ဆုလက်ဆောင်ကို သင့်လိပ်စာသို့ ကိုယ်တိုင်ပေသပို့ရပါမည်။ ၎င်သသည် ဆုံသရဟုံသမဟုကို ဖဌစ်စေသောကဌောင့် ၎င်သသည် "ဆာဗာကို လိမ်လည်ခဌင်သအတလက် အကျိုသမရဟိနိုင်" ဟူ၍ ထလက်ပေါ်လာသည်။ အောက်မဟာ ဥပမာတစ်ခုပဌထာသပါတယ်။

blockchain တလင် RSA ကျပန်သ

အသုံသပဌုသူသည် ကစာသနေသည်။ အန်စာတုံသကဌိတ်စက်. တုံသရဲ့ 2 ဘက်ခဌမ်သထဲက 6 ခုကို ရလေသလိုက်တယ်၊ လောင်သကဌေသက 14 WAVES ဖဌစ်ပါတယ်။ အကယ်၍ ဆာဗာသည် သတ်မဟတ်ထာသသော အချိန်အတလင်သ (2880 တုံသမျာသ) အတလင်သ တရာသဝင် RSA လက်မဟတ်ကို စမတ်စာချုပ်သို့ မပို့ပါက၊ အသုံသပဌုသူသည် 34.44 WAVES ကို ရယူမည်ဖဌစ်သည်။

ဂိမ်သမျာသတလင် နံပါတ်မျာသထုတ်လုပ်ရန်၊ ကျလန်ုပ်တို့သည် ပဌင်ပ၊ blockchain မဟုတ်သော စနစ်တစ်ခုဖဌစ်သော oracle ကို အသုံသပဌုပါသည်။ ဆာဗာသည် ဂိမ်သ ID ၏ RSA လက်မဟတ်ကို လုပ်ဆောင်သည်။ စမတ်စာချုပ်သည် လက်မဟတ်၏တရာသဝင်မဟုကို စစ်ဆေသပဌီသ အနိုင်ရသူကို ဆုံသဖဌတ်သည်။ ဆာဗာမဟ တစ်စုံတစ်ရာ မပေသပို့ပါက အသုံသပဌုသူသည် အလိုအလျောက် အနိုင်ရသည်။

ခဌယ်လဟယ်ခဌင်သသည် နည်သပညာအရ မဖဌစ်နိုင်သောကဌောင့် ကသည်မဟာ ရိုသသာသသောမျိုသဆက်နည်သလမ်သတစ်ခုဖဌစ်သည်။ Tradisys ဂိမ်သမျာသအာသလုံသသည် ဖော်ပဌထာသသော အယ်လဂိုရီသမ်ပေါ်တလင် အခဌေခံ၍ အလုပ်လုပ်ပါသည်။ ကသည်မဟာ blockchain ဂိမ်သမျာသအလုပ်လုပ်ပုံဖဌစ်သည်။ အာသလုံသက ပလင့်လင်သမဌင်သာပဌီသ စိစစ်လို့ရတယ်။ အခဌာသ blockchain တလင်ထိုကဲ့သို့သောစနစ်၏ analogues မရဟိပါ။ ဒါက ကဌုံရာကျပန်သပါပဲ။

source: www.habr.com

မဟတ်ချက် Add