Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

Hej alla!

På senare tid, Waves Labs meddelat tävling för utvecklare dedikerade till lanseringen av RIDE smart kontraktsspråktillägg för decentraliserade applikationer Ride4Dapps in i testnätverket!

Vi valde DAO-fallet pga Ventuarium planerar att utveckla dApps med sociala funktioner: röstning, insamling, förtroendehantering, etc.
Vi började med ett enkelt exempel i Frågestunder och RIDE IDE - exempel med delad plånbok.

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 kran och ange adressen till vilken tokens ska skickas.
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: recensent

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:
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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].
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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 transaktioner.

Vi ser till att Alices saldo fylls på med 3 WAVES, och att banksaldot förblir på 10 - 3 - 0.01 = 0.699.
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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:
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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().

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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 exempel

Ride4Dapps innehåller nu 2 nya annoteringstyper:

  1. @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.
  2. @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.
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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 (exempelvis)
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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.
Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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 }]}))

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

Bob har 1.99 WAVES kvar. Det vill säga Bob betalade 0.01 WAVES i provision

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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.

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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.

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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.

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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.

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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.

Lär dig skriva Waves smarta kontrakt på RIDE och RIDE4DAPPS. Del 1 (Multi-användar plånbok)

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

Lägg en kommentar