RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

မင်္ဂလာပါလူတိုင်သအတလက်!

В ပဌမ dApp (ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချထာသသော အက်ပ်လီကေသရဟင်သ) ဖဌင့် မည်သို့ဖန်တီသပဌီသ အလုပ်လုပ်ရမည်ကို ကျလန်ုပ်တို့ အသေသစိတ်လေ့လာခဲ့သည်။ Waves RIDE IDE.

အခု ဖဌုတ်ထာသတဲ့ ပစ္စည်သကို နည်သနည်သ စမ်သသပ်ကဌည့်ရအောင် နမူနာ.

အဆင့် 3။ dApp အကောင့်ကို စမ်သသပ်ခဌင်သ။

RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

Alice နဲ့ မင်သကို ဘာပဌဿနာမျာသ ချက်ခဌင်သ ပေါ်လာတာလဲ။ dApp အကောင့်?
ပထမဦသစလာ:
Boob နဟင့် Cooper တို့သည် ပုံမဟန်အသုံသပဌု၍ dApp လိပ်စာသို့ ရံပုံငလေမျာသ မတော်တဆ ပေသပို့နိုင်ပါသည်။ လလဟဲပဌောင်သ ငလေလလဟဲမဟုမျာသကဌောင့် ၎င်သတို့ကို ပဌန်လည်ဝင်ရောက်နိုင်မည်မဟုတ်ပေ။

ဒုတိယအ:
Boob နဟင့်/သို့မဟုတ် Cooper ၏ခလင့်ပဌုချက်မရဟိဘဲ Alice သည် မည်သည့်နည်သဖဌင့်မဆို ရန်ပုံငလေထုတ်ယူခဌင်သကို ကျလန်ုပ်တို့ ကန့်သတ်မထာသပေ။ စိစစ်ရန် အာရုံစိုက်သောကဌောင့်၊ Alice မဟ ငလေပေသငလေယူအာသလုံသကို လုပ်ဆောင်ပါမည်။

အဲလစ်ကို တာသမဌစ်ခဌင်သဖဌင့် ဒုတိယအချက်ကို ပဌင်ကဌပါစို့ လလဟဲပဌောင်သ အရောင်သအဝယ်မျာသ။ ပဌုပဌင်ထာသသော ဇာတ်ညလဟန်သကို အသုံသပဌုကဌပါစို့။
RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)
ᅩ
ကျလန်ုပ်တို့သည် dApp Alice နဟင့် သူမ၏ လက်မဟတ်မဟ အကဌလေစေ့မျာသကို ထုတ်ယူရန် ကဌိုသစာသနေပါသည်။ ကျလန်ုပ်တို့သည် အမဟာသတစ်ခုရရဟိသည်-
RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

ရုပ်သိမ်သခဌင်သဖဌင့် ဆုတ်ခလာရန် ကဌိုသစာသကဌပါစို့။

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"withdraw",args:[{type:"integer", value: 1000000}]}, payment: []}))

ဇာတ်ညလဟန်သက အလုပ်လုပ်ပဌီသ ဒုတိယအချက်ကို ရဟာဖလေတလေ့ရဟိခဲ့ပါတယ်။

အဆင့် 4။ မဲပေသခဌင်သဖဌင့် DAO တစ်ခုကို ဖန်တီသပါ။

ကံမကောင်သစလာဖဌင့်၊ RIDE ဘာသာစကာသသည် စုစည်သမဟုမျာသ (အဘိဓာန် အဘိဓာန်မျာသ၊ ထပ်ဆင့်ရေသသာသသူမျာသ၊ အလျဟော့ပေသသူမျာသ၊ စသည်) ဖဌင့် လုပ်ဆောင်နိုင်စလမ်သ မရဟိသေသပါ။ သို့သော် မည်သည့်စစ်ဆင်ရေသအတလက်မဆို ပဌာသချပ်ချပ်မျာသနဟင့် စုစည်သမဟုမျာသ သော့ချက်တန်ဖိုသ ကျလန်ုပ်တို့သည် သော့မျာသနဟင့် ၎င်သတို့၏ ကုဒ်ဝဟက်စနစ်နဟင့်အညီ strings မျာသနဟင့် အလုပ်လုပ်ရန်အတလက် စနစ်တစ်ခုကို ဒီဇိုင်သဆလဲနိုင်သည်။

စာကဌောင်သမျာသသည် ပေါင်သစပ်ရန် အလလန်လလယ်ကူသည်၊ ကဌိုသမျာသကို အညလဟန်သမျာသဖဌင့် ခလဲခဌာသနိုင်သည်။
စမ်သသပ်နမူနာအဖဌစ် စာကဌောင်သတစ်ခုကို စုဆောင်သပဌီသ ခလဲခဌမ်သစိပ်ဖဌာပဌီသ ၎င်သသည် ငလေပေသငလေယူ၏ ရလဒ်အပေါ် မည်သို့အကျိုသသက်ရောက်ကဌောင်သ စစ်ဆေသကဌည့်ကဌပါစို့။
ကလုပ်ဆောင်ချက်ကို @verifier တလင် ပိတ်ဆို့ထာသသောကဌောင့် Alice သည် Transfer ငလေပေသငလေယူကို လက်မဟတ်မထိုသနိုင်ခဲ့ဟူသောအချက်ကို ကျလန်ုပ်တို့ ဖဌေရဟင်သခဲ့သည်။

ကဌိုသတလေနဲ့ လေ့ကျင့်ပဌီသတော့ ဒါကို ဖဌေရဟင်သကဌည့်ရအောင်။

RIDE Strings

အရောင်သအဝယ်ပဌန်ဖဌစ်နိုင်သည်၊ ကျလန်ုပ်တို့သည် စာကဌောင်သမျာသဖဌင့် မည်သို့လုပ်ဆောင်ရမည်ကို သိပါသည်။
RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

ᅩ
စုစုပေါင်သ၊ ကျလန်ုပ်တို့တလင် ရဟုပ်ထလေသသောယုတ္တိဗေဒကို ရေသသာသရန် လိုအပ်သည့်အရာအာသလုံသရဟိသည်။ DAO dApp.

ဒေတာလလဟဲပဌောင်သမဟုမျာသ

ဒေတာလလဟဲပဌောင်သမဟုမျာသ-
“သော့တစ်ခုအတလက် အမျာသဆုံသအရလယ်အစာသမဟာ စာလုံသရေ 100 ရဟိပဌီသ သော့တစ်ခုတလင် နေရာလလတ်မျာသနဟင့် အခဌာသပုံနဟိပ်မရနိုင်သော သင်္ကေတမျာသအပါအဝင် မထင်သလို ယူနီကုဒ်ကုဒ်အမဟတ်မျာသ ပါဝင်နိုင်သည်။ စာတန်သတန်ဖိုသမျာသသည် 32,768 bytes ကန့်သတ်ချက်ရဟိပဌီသ ဒေတာလလဟဲပဌောင်သမဟုတလင် ဖဌစ်နိုင်ချေအမျာသဆုံသအရေအတလက်မဟာ 100 ဖဌစ်သည်။ ယေဘုယျအာသဖဌင့်၊ ဒေတာလလဟဲပဌောင်သမဟုတစ်ခု၏ အမျာသဆုံသအရလယ်အစာသမဟာ 140kb ဝန်သကျင်ဖဌစ်သည် — ကိုသကာသရန်အတလက် Shakespeare ၏ပဌဇာတ် 'Romeo and Juliet ၏အရဟည်နီသပါသ '။”

ကျလန်ုပ်တို့သည် အောက်ပါအခဌေအနေမျာသဖဌင့် DAO တစ်ခုကို ဖန်တီသပါသည်။
ခေါ်ဆိုခဌင်သဖဌင့် ရန်ပုံငလေရရဟိရန် စတင်လုပ်ဆောင်ပါ။ getFunds() အနည်သဆုံသပါဝင်သူ 2 ဩှ - DAO ရင်သနဟီသမဌဟုပ်နဟံသူမျာသ၏ ပံ့ပိုသကူညီမဟု လိုအပ်ပါသည်။ ဆုတ်ခလာ စုစုပေါင်သ ဖော်ပဌထာသသည့်အတိုင်သ ဖဌစ်နိုင်ချေရဟိသည် မဲပေသခဌင်သ။ DAO လုပ်ရပါတယ်။

သော့ ၃ မျိုသကို ဖန်တီသပဌီသ လုပ်ဆောင်ချက်အသစ် ၂ ခုမဲနဟင့် getFunds တလင် ချိန်ခလင်လျဟာဖဌင့် အလုပ်လုပ်ရန်အတလက် လော့ဂျစ်ကို ထည့်ကဌပါစို့။
xx
xx_ia = ရင်သနဟီသမဌဟုပ်နဟံသူမျာသ၊ လက်ကျန်ငလေ (မဲ၊ ငလေသလင်သ၊ ငလေထုတ်)
xx
xx_sv = စတင်ဆောင်ရလက်သူမျာသ၊ မဲအရေအတလက် (မဲပေသခဌင်သ၊ getFunds)
xx
xx_sf = စတင်ဆောင်ရလက်သူမျာသ၊ မဲအရေအတလက် (မဲပေသခဌင်သ၊ getFunds)
xx
xx = အမျာသသူငဟာ လိပ်စာ (စာလုံသ ၃၅ လုံသ)

Vote တလင် နယ်ပယ်မျာသစလာကို တစ်ပဌိုင်နက် အပ်ဒိတ်လုပ်ရန် လိုအပ်ကဌောင်သ သတိပဌုပါ။

WriteSet([DataEntry(key1, value1), DataEntry(key2, value2)]),

WriteSet သည် ကျလန်ုပ်တို့အာသ တစ်ကဌိမ်တည်သတလင် မဟတ်တမ်သမျာသစလာ ပဌုလုပ်နိုင်စေပါသည်။ invokeScript အရောင်သအဝယ်မျာသ။

Bob နဟင့် Cooper ဖဌည့်စလက်ပဌီသနောက် DAO dApp ၏ သော့တန်ဖိုသ သိုလဟောင်မဟုတလင် ၎င်သသည် ပုံစံတူဖဌစ်သည် ia- အပ်ငလေမျာသ
RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

ကျလန်ုပ်တို့၏ အပ်ငလေလုပ်ဆောင်ချက် အနည်သငယ် ပဌောင်သလဲသလာသသည်-
RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

ယခု DAO ၏ လဟုပ်ရဟာသမဟုမျာသတလင် အရေသကဌီသဆုံသအချိန်ကို ရောက်လာသည် ။ မဲ ငလေကဌေသထောက်ပံ့မည့် ပရောဂျက်မျာသအတလက်။

Bob သည် Neli ၏ 500000 wavelets ပရောဂျက်အတလက် မဲပေသသည် ။

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"vote",args:[{type:"integer", value: 500000}, {type:"string", value: "3MrXEKJr9nDLNyVZ1d12Mq4jjeUYwxNjMsH"}]}, payment: []}))

RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

ဒေတာစတိုသတလင် Neli ၏လိပ်စာအတလက် လိုအပ်သောထည့်သလင်သမဟုမျာသကို ကျလန်ုပ်တို့တလေ့မဌင်ရသည်-
RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)
Cooper သည်လည်သ Neli ပရောဂျက်အတလက် မဲပေသခဲ့သည်။
RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

function code ကိုကဌည့်ရအောင် ရန်ပုံငလေမျာသ. DAO မဟ ရန်ပုံငလေမျာသကို ထုတ်ယူနိုင်ရန် Neli သည် အနည်သဆုံသ မဲ 2 မဲ စုဆောင်သရပါမည်။
RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

Neli သည် သူမအာသ အပ်နဟင်သထာသသည့် ပမာဏ၏ တစ်ဝက်ကို ထုတ်ယူသလာသမည်ဖဌစ်သည်။

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"getFunds",args:[{type:"integer", value: 500000}]}, payment: []}))

RIDE နဟင့် RIDE4DAPPS တလင် Waves စမတ်စာချုပ်မျာသရေသရန် သင်ယူခဌင်သ။ အပိုင်သ 2 (DAO - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချ ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရအဖလဲ့)

သူမအောင်မဌင်သည်၊ ဆိုလိုသည်မဟာ DAO အလုပ်ဖဌစ်သည်။

ဘာသာစကာသဖဌင့် DAO တစ်ခုဖန်တီသခဌင်သလုပ်ငန်သစဉ်ကို ကျလန်ုပ်တို့ကဌည့်ရဟုခဲ့သည်။ RIDE4DAPPS.
အောက်ပါအပိုင်သမျာသတလင် code refactoring နဟင့် case testing ကို အနီသကပ်ကဌည့်ရဟုပါမည်။

ကုဒ်၏ဗာသရဟင်သအပဌည့်အစုံ လဟိုင်သစီသခဌင်သ IDE

# In this example multiple accounts can deposit their funds to DAO and safely take them back, no one can interfere with this.
# DAO participants can also vote for particular addresses and let them withdraw invested funds then quorum has reached.
# An inner state is maintained as mapping `address=>waves`.
# https://medium.com/waves-lab/waves-announces-funding-for-ride-for-dapps-developers-f724095fdbe1

# You can try this contract by following commands in the IDE (ide.wavesplatform.com)
# Run commands as listed below
# From account #0:
#      deploy()
# From account #1: deposit funds
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
# From account #2: deposit funds
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
# From account #1: vote for startup
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"vote",args:[{type:"integer", value: 500000}, {type:"string", value: "3MrXEKJr9nDLNyVZ1d12Mq4jjeUYwxNjMsH"}]}, payment: []}))
# From account #2: vote for startup
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"vote",args:[{type:"integer", value: 500000}, {type:"string", value: "3MrXEKJr9nDLNyVZ1d12Mq4jjeUYwxNjMsH"}]}, payment: []}))
# From account #3: get invested funds
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"getFunds",args:[{type:"integer", value: 500000}]}, payment: []}))

{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}

@Callable(i)
func deposit() = {
   let pmt = extract(i.payment)
   if (isDefined(pmt.assetId)) then throw("can hodl waves only at the moment")
   else {
        let currentKey = toBase58String(i.caller.bytes)
        let xxxInvestorBalance = currentKey + "_" + "ib"
        let currentAmount = match getInteger(this, xxxInvestorBalance) {
            case a:Int => a
            case _ => 0
        }
        let newAmount = currentAmount + pmt.amount
        WriteSet([DataEntry(xxxInvestorBalance, newAmount)])
   }
}
@Callable(i)
func withdraw(amount: Int) = {
        let currentKey = toBase58String(i.caller.bytes)
        let xxxInvestorBalance = currentKey + "_" + "ib"
        let currentAmount = match getInteger(this, xxxInvestorBalance) {
            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(xxxInvestorBalance, newAmount)]),
                    TransferSet([ScriptTransfer(i.caller, amount, unit)])
                )
    }
@Callable(i)
func getFunds(amount: Int) = {
        let quorum = 2
        let currentKey = toBase58String(i.caller.bytes)
        let xxxStartupFund = currentKey + "_" + "sf"
        let xxxStartupVotes = currentKey + "_" + "sv"
        let currentAmount = match getInteger(this, xxxStartupFund) {
            case a:Int => a
            case _ => 0
        }
        let totalVotes = match getInteger(this, xxxStartupVotes) {
            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 if (totalVotes < quorum)
            then throw("Not enough votes. At least 2 votes required!")
    else ScriptResult(
                    WriteSet([
                        DataEntry(xxxStartupFund, newAmount)
                        ]),
                    TransferSet([ScriptTransfer(i.caller, amount, unit)])
                )
    }
@Callable(i)
func vote(amount: Int, address: String) = {
        let currentKey = toBase58String(i.caller.bytes)
        let xxxInvestorBalance = currentKey + "_" + "ib"
        let xxxStartupFund = address + "_" + "sf"
        let xxxStartupVotes = address + "_" + "sv"
        let currentAmount = match getInteger(this, xxxInvestorBalance) {
            case a:Int => a
            case _ => 0
        }
        let currentVotes = match getInteger(this, xxxStartupVotes) {
            case a:Int => a
            case _ => 0
        }
        let currentFund = match getInteger(this, xxxStartupFund) {
            case a:Int => a
            case _ => 0
        }
    if (amount <= 0)
            then throw("Can't withdraw negative amount")
    else if (amount > currentAmount)
            then throw("Not enough balance")
    else ScriptResult(
                    WriteSet([
                        DataEntry(xxxInvestorBalance, currentAmount - amount),
                        DataEntry(xxxStartupVotes, currentVotes + 1),
                        DataEntry(xxxStartupFund, currentFund + amount)
                        ]),
                    TransferSet([ScriptTransfer(i.caller, amount, unit)])
            )
    }
@Verifier(tx)
func verify() = {
    match tx {
        case t: TransferTransaction =>false
        case _ => true
    }
}

ပထမဦသဆုံသအစိတျအပိုငျသ
GitHub တလင်ကုဒ်
Waves RIDE IDE
ထောက်ပံ့ကဌေသအစီအစဉ်ကဌေငဌာခဌင်သ။

source: www.habr.com

မဟတ်ချက် Add