Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Hello qof walba!

В marka hore Qaybta waxaan si faahfaahsan u eegnay sida loo abuuro oo loogu shaqeeyo dApp (codsiga baahsan) gudaha Mowjadaha RIDE IDE.

Aan tijaabinno midka la kala furfuray hadda Tusaale.

Marxaladda 3. Tijaabinta xisaabta dApp

Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Waa maxay dhibaatooyinka isla markiiba kugu soo booda Alice? dApp Koonto?
Marka hore:
Boob iyo Cooper waxa laga yaabaa inay si lama filaan ah lacag ugu soo diraan ciwaanka dAppka iyagoo isticmaalaya si caadi ah wareejinta wax kala iibsiga sidaas darteedna ma awoodi doonaan in ay dib u helaan.

Marka labaad:
Annagu sina kama xaddidno Alice inay kala baxdo lacagaha iyada oo aan oggolaansho laga helin Boob iyo/ama Cooper. Maadaama, fiiro gaar ah u yeelo si aad u xaqiijiso, dhammaan macaamilada Alice waa la fulin doonaa.

Aynu hagaajino 2aad inagoo mamnuucnay Alice wareejinta wax kala iibsiga. Aynu geyno qoraalka la saxay:
Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Waxaan isku dayeynaa inaan ka saarno shilimaad dApp Alice iyo saxiixeeda. Waxaan helnaa qalad:
Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Aan isku dayno inaan ka baxno ka noqoshada:

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

Qoraalku wuu shaqeeyaa waxaana ogaanay qodobka 2aad!

Marxaladda 4. Abuur DAO oo leh codbixin

Nasiib darro, luqadda RIDE weli ma bixin kartida ay kula shaqayn karto ururinta (qaamuusyada qaamuuska, tafatirayaasha, wax-yareeya, iwm.). Si kastaba ha ahaatee, hawlgal kasta oo leh ururin siman qiimaha-muhiimka ah waxaan naqshadeyn karnaa nidaam lagu shaqeeyo xargaha, si waafaqsan furayaasha iyo fur-furkooda.

Xargaha aad bay u fududahay in la isku xidho; xargaha waxa lagu kala saari karaa tusmooyin.
Aynu ururino oo aan kala saarno xadhig tusaale tijaabo ah oo aynu hubinno sida ay tani u saamaynayso natiijada wax kala iibsiga.
Waxaan dejinay xaqiiqda ah in Alice aysan saxiixi karin wax kala iibsiga, maadaama awooddan laga xannibay @verifier ee nooca wax kala iibsiga.

Aan ku dhaqanno xarig ka dibna tan xalliyo.

Xargaha RIDE

Wax kala iibsiga waa suurtagal mar kale, waan ognahay sida loo shaqeeyo xargaha.
Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)


Guud ahaan, waxaan haynaa wax kasta oo lagama maarmaanka u ah in la qoro caqli-gal adag DAO dApp.

Macaamilka Xogta

Macaamilka Xogta:
"Xajmiga ugu badan ee furuhu waa 100 xaraf, furuhuna wuxuu ka koobnaan karaa dhibco kood ah Unicode oo ay ku jiraan meelo bannaan iyo calaamado kale oo aan la daabici karin. Qiimaha xargaha waxay leeyihiin xadka 32,768 bytes iyo tirada ugu badan ee suurtogalka ah ee suurtogalka ah ee suurtogalka ah ee macaamilka xogta waa 100. Guud ahaan, cabbirka ugu badan ee macaamil ganacsigu wuxuu ku dhow yahay 140kb - tixraac ahaan, ku dhowaad dhererka ciyaarta Shakespeare ee Romeo iyo Juliet '."

Waxaan abuurnaa DAO leh shuruudaha soo socda:
Si qofka bilawga ahi u helo maalgelin isagoo wacaya getFunds() taageerada ugu yaraan kaqeybgalayaasha 2 - maalgashadayaasha DAO - ayaa loo baahan yahay. Dib ula noqoshada waxa ay noqon doontaa sida saxda ah inta wadarta lagu sheegay codaynta Milkiilayaasha DAO.

Aan sameyno 3 nooc oo furayaal ah oo aan ku darsano macquulka ah ku shaqeynta dheelitirka 2 shaqo oo cusub oo cod bixin ah iyo helitaankaFunds:
xx…xx_iya = maalgashadayaasha, dheelitirka la heli karo (cod, dhigaal, ka bixid)
xx…xx_sv = bilawga, tirada codadka (cod, getFunds)
xx…xx_sf = bilawga, tirada codadka (cod, getFunds)
xx…xx = ciwaanka guud (35 xaraf)

Fadlan la soco in Codbixinta aan u baahannahay inaan hal mar cusboonaysiinno dhowr goobood:

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

WriteSet waxay noo ogolaataa inaanu samayno dhawr diiwaan hal mar invokeScript wax kala iibsiga.

Tani waa waxa ay u egtahay kaydinta qiimaha muhiimka ah ee DAO dApp, ka dib markii Bob iyo Cooper ay buuxiyeen ia- deebaajiga:
Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Shaqadayada deebaajigu wax yar baa is bedeshay:
Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Hadda waxay timid daqiiqaddii ugu muhiimsanayd ee hawlaha DAO - codee mashaariicda lagu maalgelinayo.

Bob wuxuu u codeeyay Neli mashruuca 500000 mawjadaha:

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

Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Bakhaarka xogta waxaan ku aragnaa dhammaan galitaanka lagama maarmaanka u ah ciwaanka Neli:
Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)
Cooper ayaa sidoo kale u codeysay mashruuca Neli.
Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Aynu eegno code-ka shaqada heliFunds. Neli waa inuu ururiyaa ugu yaraan 2 cod si uu awood ugu yeesho inuu dhaqaalaha kala baxo DAO.
Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Neli waxay kala baxaysaa kala badh lacagta lagu aaminay:

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

Barashada qoritaanka Waves qandaraasyada caqliga leh ee RIDE iyo RIDE4DAPPS. Qaybta 2 (DAO - Ururka Baahsan ee Madaxbanaan)

Way ku guulaysataa, taasi waa, DAO way shaqeysaa!

Waxaan eegnay habka loo abuuray DAO luqadda RIDE4DAPPS.
Qaybaha soo socda waxaan si qoto dheer ugu eegi doonaa dib u habeynta code iyo baaritaanka kiis.

Nooca buuxa ee koodka gudaha Mowjadaha RIDE 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
    }
}

Qeybta koowaad
Koodhka GitHub
Mowjadaha RIDE IDE
Ku dhawaaqida barnaamijka deeqda

Source: www.habr.com

Add a comment