Hej alla!
På senare tid, Waves Labs
Vi valde DAO-fallet pga
Vi började med ett enkelt exempel i
Låt oss titta på det här exemplet, testa hypoteser och titta på några konstigheter:
Låt oss ha Alice - dApp-ägare
Boob och Cooper är Alice-partners, medgrundare av Alice-BC DAO
Neli är en företagare som behöver finansiering
Bank - en bank som delar ut polletter
Steg 1. Initiering av saldon
För att ta emot tokens på waves testnätverket måste du kontakta
Du hittar adressen i IDE genom att öppna dina kontouppgifter.
Vi lyfter fram Bank 10 WAVES. Sedan kontrollerar vi att de kom via block- och transaktionswebbläsaren:
Låt oss nu dela ut polletter från banken till resten av deltagarna. (Anmärkningar: Alla transaktioner på waves-nätverket är inte gratis, så ett minsta positivt saldo krävs för att alla deltagare ska kunna göra transaktioner).
1 VÅGOR = 100000000 enheter (vågor), eftersom belopp bara kan vara heltal
0.01 WAVES (Transaktionsavgift) = 1000000
Bank -> [3 VÅGOR] -> Alice, via TransferTransaction (Typ: 4).
Vi kontrollerar att env.SEED från vilket transaktioner undertecknas matchar vår bank:

Om du inte har en matchande fröfras byter du bara till den på fliken Konton och kollar igen.
Efter detta skapar, tillkännager och undertecknar vi en transaktion för överföring av 3 WAVES Alice.
Du kan också ta reda på Alices data genom variabeln env.accounts. Numrering börjar från 0, så Alice är env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Resultatet kan också observeras i webbläsaren, en länk till det kommer att returneras till oss omedelbart efter exekvering
Vi ser till att Alices saldo fylls på med 3 WAVES, och att banksaldot förblir på 10 - 3 - 0.01 = 0.699.
Vi skickar Boob och Cooper 3 WAVES vardera, och Neli, Xena och Mark 0.2 WAVES vardera på samma sätt.
(Anmärkningar: Vi gjorde ett fel med ett tecken och skickade Neli 0.02 WAVES. Var försiktig!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Efter att ha fyllt på saldot för alla deltagare ser vi:
Steg 2. Skapa ett dApp-konto
Vi kom överens om att Alice skulle vara skaparen och ägaren av den decentraliserade applikationen.
Gå till Konton, ställ in det som SEED och kontrollera env.SEED matchar Alice.
Låt oss försöka installera det enklaste möjliga skriptet (kontraktet) på Alices konto.
Smarta kontakter i Waves är predikat som förbjuder eller tillåter någon typ av utgående transaktion att ske under vissa förhållanden. I det här fallet är detta tillstånd ALLTID. Avtalskoden är sann. Ring deploy().
Avgift per setScript-transaktion 1400000/100000000 = 0.014 VÅGOR. Alice har 2.986 VÅGOR kvar på sin balans.
Låt oss nu försöka installera mer komplex smart kontraktslogik på Alice-kontot, beskrivet i
Ride4Dapps innehåller nu 2 nya annoteringstyper:
- @Callable(i) — tar som parameter i, data om vilket konto som anropade/signerade transaktionen. Det är resultatet av den här funktionen som bestämmer ändringen i tillståndet för dApp-kontot. Andra konton kan skapa transaktioner och utföra funktioner med denna anteckning och ändra tillståndet för dApp-kontot.
- @Verifier(tx) — Transaktionsverifierare med parametern transaktion tx. Motsvarar predikatlogiken från RIDE. Det är i detta uttryck som du kan tillåta eller förbjuda ytterligare ändringar av logiken för smarta kontrakt på dApp-kontot.
Låt oss göra Dapp konto som en gemensam plånbok för alla deltagare.
För att kontrollera vilket kontrakt som för närvarande är aktivt på ditt konto, kan du kopiera base64-koden för det smarta kontraktet i blockutforskaren och känna igen det med en dekompilator (
Vi ser till att logiken i det smarta kontraktet stämmer överens med vad vi förväntar oss.
Alice har 2.972 VÅGOR kvar på sin balans.
Denna dApp håller reda på hur mycket varje deltagare bidrar till den gemensamma fonden genom en mekanism datatransaktion — DataEntry(currentKey, newAmount), där currentKey är kontot som anropar insättningsfunktionen, och newAmount är värdet på det påfyllda saldot.
Boob och Cooper gör sina insättningar till dApp-kontot med 1 WAVES.
Vi gör ett misstag och transaktionen går inte igenom. Eftersom vi, trots att vi var övertygade om att vi gjorde en transaktion på uppdrag av Bob, gjorde ett misstag i indexet och angav ett bankkonto som inte har ett smart kontrakt. Det är värt att notera en viktig punkt här - det tillkommer en avgift för misslyckade försök att initiera transaktioner kan inte tas bort! Alice har 2.972 VÅGOR kvar på sin balans. Bob har 3 VÅGOR.
Bob skickade 1 WAVES till dApp-konto.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bob har 1.99 WAVES kvar. Det vill säga Bob betalade 0.01 WAVES i provision
Alice hade 2.972 WAVES på sin balans, nu är den 3.972. En transaktion registrerades också på Alice-kontot, men ingen provision togs ut från dApp-kontot (Alice).
Efter att Cooper också fyllt på kontot blev Alices saldo 4.972 WAVES.
Du kan ta reda på vem som äger hur många WAVES i den gemensamma plånboken i blockutforskaren på fliken Data.
Cooper ändrade sig om att lämna beloppet 1 WAVES på den allmänna plånboken och bestämde sig för att dra tillbaka hälften av affiniteten. För att göra detta måste han anropa uttagsfunktionen.
Men vi hade fel igen, eftersom uttagsfunktionen har helt andra parametrar och en annan signatur. När du designar smarta kontrakt på RIDE4DAPPS bör du vara uppmärksam på denna punkt
Cooper har nu 2.48 WAVES på sin balansräkning. Följaktligen 3 VÅGOR - 1 - 0.01, och sedan + 0.5 - 0.01. Följaktligen kostar varje samtal att sätta in och ta ut 0.01 WAVES. Som ett resultat ändrades posterna i tabellen dApps-ägare enligt följande.
Bob bestämde sig också för att ta ut lite pengar från den delade plånboken, men gjorde ett misstag och försökte ta ut 1.5 WAVES.
Det smarta kontraktet hade dock en kontroll för denna situation.
Xena är en bedragare, hon försökte ta ut 1 WAVES från det totala kontot.
Det gick inte för henne heller.
I nästa del kommer vi att titta på mer komplexa frågor relaterade till ofullkomligheten hos Alice dApp-konto.
Källa: will.com