လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp

မင်္ဂလာပါ! ကဆောင်သပါသတလင် Waves node တစ်ခုပေါ်တလင် ပုံမဟန် dApp ကို မည်သို့ရေသသာသပဌီသ လုပ်ဆောင်ရမည်ကို သင့်အာသ ပဌသပါမည်။ လိုအပ်သောကိရိယာမျာသ၊ နည်သစနစ်မျာသနဟင့် ဖလံ့ဖဌိုသတိုသတက်မဟုဆိုင်ရာ ဥပမာကို ကဌည့်ကဌပါစို့။

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp

dApps နဟင့် ပုံမဟန်အပလီကေသရဟင်သမျာသအတလက် ဖလံ့ဖဌိုသတိုသတက်မဟုအစီအစဉ်သည် အတူတူနီသပါသဖဌစ်သည်-

  • ကုဒ်ရေသသည်။
  • အလိုအလျောက်စမ်သသပ်ရေသသာသခဌင်သ။
  • လျဟောက်လလဟာကိုဖလင့်ခဌင်သ။
  • စမ်သသပ်ခဌင်သ။

တူရိယာ

1. docker node နဟင့် Waves Explorer ကို run ရန်

node မစတင်လိုပါက ကအဆင့်ကို ကျော်သလာသနိုင်ပါသည်။ ပဌီသနောက်ရဟိသမျဟတို့, စမ်သသပ်ခဌင်သနဟင့်စမ်သသပ်ကလန်ရက်ရဟိပါတယ်။ သို့သော် သင့်ကိုယ်ပိုင် node ကို အသုံသမပဌုဘဲ၊ စမ်သသပ်မဟုလုပ်ငန်သစဉ်သည် ဆလဲယူသလာသနိုင်သည်။

  • စမ်သသပ်မဟုတိုကင်မျာသပါရဟိသော အကောင့်အသစ်မျာသကို အဆက်မပဌတ် လိုအပ်ပါသည်။ စမ်သသပ်ကလန်ရက် faucet သည် 10 WAVES 10 မိနစ်တိုင်သ လလဟဲပဌောင်သပေသသည်။
  • စမ်သသပ်ကလန်ရက်ရဟိ ပျမ်သမျဟပိတ်ဆို့အချိန်သည် 1 မိနစ်ဖဌစ်ပဌီသ node တလင် - 15 စက္ကန့်ဖဌစ်သည်။ အရောင်သအ၀ယ်တစ်ခုတလင် အတည်ပဌုချက်မျာသစလာ လိုအပ်သည့်အခါ အထူသသဖဌင့် သိသာသည်။
  • ပဌင်သထန်သော ကက်ရဟ်သည် အမျာသသူငဟာ စမ်သသပ်မဟု ခုံမျာသပေါ်တလင် ဖဌစ်နိုင်သည်။
  • ပဌုပဌင်ထိန်သသိမ်သမဟုကဌောင့် ၎င်သတို့ကိုလည်သ ယာယီ မရနိုင်ပါ။

ယခုမဟစ၍ သင်သည် သင်၏ကိုယ်ပိုင် node နဟင့် လုပ်ဆောင်နေသည်ဟု ကျလန်ုပ်ယူဆပါမည်။

2. Surfboard Command Line Tool

  • ppa၊ homebrew သို့မဟုတ် exe ကို ကနေရာတလင် အသုံသပဌု၍ Node.js ကို ဒေါင်သလုဒ်လုပ်ပဌီသ ထည့်သလင်သပါ- https://nodejs.org/en/download/.
  • ရဟိပဌီသသာသ node တစ်ခုပေါ်တလင် စမ်သသပ်မဟုမျာသကို လုပ်ဆောင်နိုင်စေမည့် ကိရိယာတစ်ခုဖဌစ်သည့် Surfboard ကို ထည့်သလင်သပါ။

npm install -g @waves/surfboard

3. Visual Studio Code ပလပ်အင်

သင်သည် IDE မျာသကို ဝါသနာရဟင်မဟုတ်ကာ စာသာသတည်သဖဌတ်မဟုမျာသကို နဟစ်သက်ပါက ကအဆင့်သည် စိတ်ကဌိုက်ရလေသချယ်နိုင်သည်။ လိုအပ်သောကိရိယာမျာသအာသလုံသသည် command line utilities မျာသဖဌစ်သည်။ vim ကိုအသုံသပဌုပါက plugin ကိုအာရုံစိုက်ပါ။ vim-စီသ.

Visual Studio Code ကိုဒေါင်သလုဒ်လုပ်ပဌီသ ထည့်သလင်သပါ- https://code.visualstudio.com/

VS Code ကိုဖလင့်ပဌီသ waves-ride plugin ကို ထည့်သလင်သပါ။

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp

Waves Keeper ဘရောက်ဆာ တိုသချဲ့မဟု- https://wavesplatform.com/products-keeper

Done!

node နဟင့် Waves Explorer ကိုဖလင့်ပါ။

1. node ကို စတင်ပါ။

docker run -d -p 6869:6869 wavesplatform/waves-private-node

node ကို REST API မဟတဆင့်စတင်ကဌောင်သသေချာပါစေ။ http://localhost:6869:

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp
node အတလက် Swagger REST API

2. Waves Explorer ၏ ဥပမာတစ်ခုကို စတင်ပါ။

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Browser ကိုဖလင့်ပဌီသသလာသပါ။ http://localhost:3000. ဗလာ local node circuit သည် မည်မျဟ လျင်မဌန်စလာ တည်ဆောက်ထာသသည်ကို သင်တလေ့ရပါမည်။

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp
Waves Explorer သည် ဒေသတလင်သ node instance ကိုပဌသသည်။

RIDE ဖလဲ့စည်သပုံနဟင့် Surfboard ကိရိယာ

အချည်သနဟီသသော လမ်သညလဟန်တစ်ခုကို ဖန်တီသပဌီသ ၎င်သရဟိ command ကို လုပ်ဆောင်ပါ။

surfboard init

ညလဟန်ကဌာသချက်သည် ပရောဂျက်ဖလဲ့စည်သပုံ၊ "hello world" အက်ပ်မျာသနဟင့် စမ်သသပ်မဟုမျာသဖဌင့် လမ်သညလဟန်တစ်ခုကို စတင်သည်။ VS Code ဖဌင့် ကဖိုဒါကိုဖလင့်ပါက၊

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp
Surfboard.config.json

  • ./ride/ ဖိုဒါအောက်တလင် wallet.ride - dApp ကုဒ်တည်ရဟိသည့် လမ်သညလဟန်ဖိုင်တစ်ခုတည်သကို တလေ့ရပါမည်။ ကျလန်ုပ်တို့သည် လာမည့်ဘလောက်တလင် dApps ကို အတိုချုံသခလဲခဌမ်သစိတ်ဖဌာပါမည်။
  • ./test/ ဖိုဒါအောက်မဟာ *.js ဖိုင်ကို တလေ့လိမ့်မယ်။ စမ်သသပ်မဟုမျာသကို ကနေရာတလင် သိမ်သဆည်သထာသသည်။
  • ./surfboard.config.json – စမ်သသပ်မဟုမျာသ လုပ်ဆောင်ရန်အတလက် ဖလဲ့စည်သမဟုဖိုင်။

Envs သည် အရေသကဌီသသောအပိုင်သဖဌစ်သည်။ ပတ်ဝန်သကျင်တစ်ခုစီကို ကကဲ့သို့ configure လုပ်ထာသသည်-

  • ကလန်ရက်၏ dApp နဟင့် CHAIN_ID ကို စတင်ရန် အသုံသပဌုမည့် node ၏ REST API အဆုံသမဟတ်။
  • သင်၏စမ်သသပ်မဟုတိုကင်မျာသ၏ရင်သမဌစ်မျာသဖဌစ်မည့် တိုကင်မျာသပါသည့် အကောင့်တစ်ခုအတလက် လျဟို့ဝဟက်စကာသစု။

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ surfboard.config.json သည် ပုံမဟန်အာသဖဌင့် ပတ်ဝန်သကျင်မျာသစလာကို ပံ့ပိုသပေသသည်။ ပုံသေသည် ဒေသတလင်သပတ်ဝန်သကျင်ဖဌစ်သည် (မူလEnv ကီသသည် ပဌောင်သလဲနိုင်သော ကန့်သတ်ဘောင်တစ်ခုဖဌစ်သည်)။

ပိုက်ဆံအိတ်-သရုပ်ပဌလျဟောက်လလဟာ

ကကဏ္ဍသည် RIDE ဘာသာစကာသကို ရည်ညလဟန်သခဌင်သမဟုတ်ပါ။ ယင်သအစာသ၊ ကျလန်ုပ်တို့သည် blockchain တလင်ဖဌစ်ပျက်နေသည်မျာသကိုပိုမိုနာသလည်ရန်ကျလန်ုပ်တို့အသုံသပဌုပဌီသစမ်သသပ်သည့် application ကိုကဌည့်ရဟုပါ။

ရိုသရဟင်သသော Wallet-သရုပ်ပဌ အပလီကေသရဟင်သကို ကဌည့်ကဌပါစို့။ မည်သူမဆို dApp လိပ်စာသို့ တိုကင်မျာသ ပေသပို့နိုင်ပါသည်။ သင်၏ WAVES ကိုသာ ရုပ်သိမ်သနိုင်သည်။ @Callable function နဟစ်ခုကို InvokeScriptTransaction မဟတဆင့် ရနိုင်သည်-

  • deposit()WAVES တလင် ပူသတလဲပေသချေမဟု လိုအပ်သည်။
  • withdraw(amount: Int)တိုကင်မျာသကို ပဌန်ပေသသည်။

dApp ဘဝစက်ဝန်သတစ်လျဟောက်တလင်၊ ဖလဲ့စည်သပုံ (လိပ်စာ → ပမာဏ) ကို ထိန်သသိမ်သထာသမည်-

လဟုပ်ရဟာသမဟု
ရလဒ်အခဌေအနေ

ကနဦသ
အချည်သနဟီသသော

အဲလစ်သိုက် 5 WAVES
alice-လိပ်စာ → 500000000

Bob သိုက် 2 WAVES

alice-လိပ်စာ → 500000000
bob-လိပ်စာ → 200000000

Bob သည် 7 Waves ကို ရုပ်သိမ်သလိုက်သည်။
ငဌင်သခဲ့သည်!

Alice သည် လဟိုင်သ 4 ခုကို ရုပ်သိမ်သလိုက်သည်။
alice-လိပ်စာ → 100000000
bob-လိပ်စာ → 200000000

ကသည်မဟာ အခဌေအနေကို အပဌည့်အဝနာသလည်ရန် ကုဒ်ဖဌစ်သည်။

# In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this.
# An inner state is maintained as mapping `address=>waves`.
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func deposit() = {
 let pmt = extract(i.payment)
 if (isDefined(pmt.assetId))
    then throw("works with waves only")
    else {
     let currentKey = toBase58String(i.caller.bytes)
     let currentAmount = match getInteger(this, currentKey) {
       case a:Int => a
       case _ => 0
     }
     let newAmount = currentAmount + pmt.amount
     WriteSet([DataEntry(currentKey, newAmount)]) 
   }
 }
@Callable(i)
func withdraw(amount: Int) = {
 let currentKey = toBase58String(i.caller.bytes)
 let currentAmount = match getInteger(this, currentKey) {
   case a:Int => a
   case _ => 0
 }
 let newAmount = currentAmount - amount
 if (amount < 0)
   then throw("Can't withdraw negative amount")
   else if (newAmount < 0)
     then throw("Not enough balance")
     else ScriptResult(
       WriteSet([DataEntry(currentKey, newAmount)]),
       TransferSet([ScriptTransfer(i.caller, amount, unit)])
      )
 }
@Verifier(tx)
func verify() = false

နမူနာကုဒ်ကိုလည်သ တလင်တလေ့နိုင်သည်။ GitHub.

VSCode ပလပ်အင်သည် ဖိုင်တစ်ခုကို တည်သဖဌတ်နေစဉ် ဆက်တိုက်စုစည်သမဟုကို ပံ့ပိုသပေသသည်။ ထို့ကဌောင့်၊ သင်သည် PROBLEMS တက်ဘ်တလင် အမဟာသမျာသကို အမဌဲစောင့်ကဌည့်နိုင်သည်။

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp
ဖိုင်ကို ပဌုစုရာတလင် မတူညီသော စာသာသတည်သဖဌတ်သူအာသ အသုံသပဌုလိုပါက၊ အသုံသပဌုပါ။

surfboard compile ride/wallet.ride

၎င်သသည် base64 compiled RIDE ကုဒ်၏စီသရီသကိုထုတ်ပေသမည်ဖဌစ်သည်။

'wallet.ride' အတလက် စမ်သသပ်မဟု script

ကဌည့်လိုက်ကဌရအောင် စမ်သသပ်ဖိုင်. JavaScript ၏ Mocha မူဘောင်ဖဌင့် ပံ့ပိုသထာသသည်။ "Before" လုပ်ဆောင်ချက်နဟင့် စမ်သသပ်မဟု သုံသခုရဟိသည်။

  • MassTransferTransaction မဟတစ်ဆင့် အကောင့်မျာသစလာကို ငလေကဌေသမထောက်ပံ့မီ၊ ဇာတ်ညလဟန်သကို စုစည်သပဌီသ ၎င်သကို blockchain သို့ အသုံသချပါ။
  • “ငလေသလင်သနိုင်သည်” သည် အကောင့်နဟစ်ခုတစ်ခုစီအတလက် အပ်ငလေ() လုပ်ဆောင်ချက်ကို ကလန်ရက်သို့ InvokeScript Transaction ပေသပို့သည်။
  • အခဌာသသူမျာသ၏ တိုကင်မျာသကို မည်သူမျဟ မခိုသယူနိုင်သော "အပ်နဟံထာသသည်ထက် ပိုထုတ်ယူ၍မရပါ" စာမေသပလဲမျာသ။
  • "ငလေသလင်သနိုင်သည်" သည် ငလေထုတ်ခဌင်သမျာသကို မဟန်ကန်စလာ လုပ်ဆောင်ကဌောင်သ စစ်ဆေသသည်။

Surfboard မဟ စမ်သသပ်မဟုမျာသကို လုပ်ဆောင်ပဌီသ Waves Explorer တလင် ရလဒ်မျာသကို ပိုင်သခဌာသစိတ်ဖဌာပါ။

စမ်သသပ်မဟုကို လုပ်ဆောင်ရန်၊ ပဌေသပါ။

surfboard test

သင့်တလင် script အမျာသအပဌာသရဟိလျဟင် (ဥပမာ၊ သီသခဌာသဖဌန့်ကျက်မဟု script တစ်ခု လိုအပ်သည်)၊ သင် run နိုင်ပါသည်။

surfboard test my-scenario.js

Surfboard သည် ./test/ ဖိုဒါရဟိ စမ်သသပ်ဖိုင်မျာသကို စုဆောင်သပဌီသ surfboard.config.json တလင် configure လုပ်ထာသသော node ပေါ်တလင် script ကို run ပါမည်။ စက္ကန့်အနည်သငယ်ကဌာပဌီသနောက်တလင် ကကဲ့သို့သောအရာတစ်ခုကို သင်တလေ့လိမ့်မည်-

wallet test suite
Generating accounts with nonce: ce8d86ee
Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Accounts successfully funded
Script has been set
   √ Can deposit (4385ms)
   √ Cannot withdraw more than was deposited
   √ Can withdraw (108ms)
3 passing (15s)

ဟူှ! စာမေသပလဲတလေ အောင်တယ်။ ယခု Waves Explorer ကိုအသုံသပဌုသောအခါ ဘာဖဌစ်သလာသသည်ကို ကဌည့်ကဌပါစို့- ဘလောက်မျာသကိုကဌည့်ပါ သို့မဟုတ် အထက်ပါလိပ်စာမျာသထဲမဟ တစ်ခုကို ရဟာဖလေမဟုထဲသို့ ကူသထည့်ပါ (ဥပမာ၊ သက်ဆိုင်ရာ၊ wallet#. ထိုနေရာတလင် ငလေပေသငလေယူမဟတ်တမ်သ၊ dApp အခဌေအနေ၊ decompiled binary ဖိုင်ကို တလေ့နိုင်သည်။

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp
Waves Explorer အသုံသချပဌီသသော အက်ပ်တစ်ခု။

Surfboard Tips အချို့

1. testnet ပတ်ဝန်သကျင်တလင် စမ်သသပ်ရန်၊ အသုံသပဌုပါ-

surfboard test --env=testnet

စမ်သသပ်မဟုတိုကင်မျာသရယူပါ။

2. ငလေပေသငလေယူမျာသ၏ JSON ဗာသရဟင်သမျာသနဟင့် ၎င်သတို့ကို node မဟ မည်သို့လုပ်ဆောင်သည်ကို သင်မဌင်လိုပါက -v ဖဌင့် စမ်သသပ်မဟုကို လုပ်ဆောင်ပါ (အဓိပ္ပာယ် 'verbose')

surfboard test -v

Waves Keeper ဖဌင့် အက်ပ်မျာသကို အသုံသပဌုခဌင်သ။

1. အလုပ်လုပ်ရန် Waves Keeper ကို သတ်မဟတ်ပါ- http://localhost:6869

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp
ဒေသခံ node တစ်ခုနဟင့်အလုပ်လုပ်ရန် Waves Keeper ကို စနစ်ထည့်သလင်သခဌင်သ။

2. ကလန်ရက်အတလက် တိုကင်မျာသပါသော လျဟို့ဝဟက်စာစုကို တင်သလင်သမလာသ။ ရိုသရဟင်သရန်အတလက် သင့် node ၏ ကနညသမျိုသစေ့ကို အသုံသပဌုပါ- waves private node seed with waves tokens. လိပ်စာ- 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. npm ကို အသုံသပဌု၍ serverless single page application ကို သင်ကိုယ်တိုင် run နိုင်ပါသည်။ သို့မဟုတ် ရဟိပဌီသသာသတစ်ခုသို့ သလာသပါ- chrome-ext.wvservices.com/dapp-wallet.html

4. စမ်သသပ်လည်ပတ်မဟု (အထက်ဖော်ပဌပါ) မဟ ပိုက်ဆံအိတ်လိပ်စာကို dApp လိပ်စာစာသာသအကလက်ထဲသို့ ထည့်ပါ။

5. "အပ်ငလေ" အကလက်တလင် ပမာဏအနည်သငယ်ကို ထည့်သလင်သပဌီသ ခလုတ်ကို နဟိပ်ပါ-

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp
Waves Keeper သည် 10 WAVES ငလေပေသချေမဟုဖဌင့် InvokeScriptTransaction လက်မဟတ်ရေသထိုသရန် ခလင့်ပဌုချက်တောင်သခံပါသည်။

6. ငလေပေသငလေယူကို အတည်ပဌုပါ-

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp
ငလေပေသငလေယူကို ဖန်တီသပဌီသ ကလန်ရက်သို့ ထုတ်လလဟင့်သည်။ ယခုသူမ၏ ID ကိုသင်မဌင်နိုင်သည်။

7. Waves Explorer ကို အသုံသပဌု၍ ငလေပေသငလေယူကို စောင့်ကဌည့်ပါ။ ရဟာဖလေမဟုအကလက်တလင် ID ထည့်ပါ။

လဟိုင်သမျာသတည်ဆောက်ပုံ၊ အသုံသချပဌီသ စမ်သသပ်နည်သ RIDE dApp

ကောက်ချက်မျာသနဟင့် ထပ်လောင်သအချက်အလက်မျာသ

Waves Platform ပေါ်ရဟိ ရိုသရဟင်သသော dApps မျာသကို ဖန်တီသခဌင်သ၊ စမ်သသပ်ခဌင်သ၊ အသုံသပဌုခဌင်သနဟင့် အသုံသပဌုခဌင်သအတလက် ကိရိယာမျာသကို ကျလန်ုပ်တို့ ကဌည့်ရဟုခဲ့သည်-

  • RIDE ဘာသာစကာသ
  • VS ကုဒ်တည်သဖဌတ်သူ
  • Waves Explorer
  • ။
  • Waves Keeper

ဆက်လက်လေ့လာလိုသူမျာသအတလက် RIDE လင့်ခ်မျာသ

နောက်ထပ်ဥပမာမျာသ
ဥပမာမျာသဖဌင့် အလန်လိုင်သ IDE
လဟိုင်သမဟတ်တမ်သ
Telegram တလင် developer chat
လဟိုင်သလုံသကဌီသမျာသပေါ်တလင် စီသနင်သလိုက်ပါ
အသစ်။ Waves Platform တလင် dApps ဖန်တီသခဌင်သဆိုင်ရာ အလန်လိုင်သသင်တန်သမျာသ

RIDE ခေါင်သစဉ်သို့ ဆက်လက်ဝင်ရောက်ပဌီသ သင်၏ပထမဆုံသ dApp ကိုဖန်တီသပါ။

TL; DR: bit.ly/2YCFnwY

source: www.habr.com

မဟတ်ချက် Add