Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Hallo iedereen!

Meer recentelijk, Waves Labs aangekondigd competitie voor ontwikkelaars gewijd aan de release van de RIDE smart contract-taalextensie voor gedecentraliseerde applicaties Ride4Dapps in het testnetwerk!

We hebben voor de DAO-zaak gekozen omdat Ventuarium is van plan dApps te ontwikkelen met sociale functies: stemmen, fondsenwerving, trustbeheer, enz.
We zijn begonnen met een eenvoudig voorbeeld in Vraag- en antwoordsessies en RIJD IDE - voorbeeld met gedeelde portemonnee.

Laten we naar dit voorbeeld kijken, hypothesen testen en enkele eigenaardigheden bekijken:

Laten we Alice - dApp-eigenaar hebben
Boob en Cooper zijn Alice-partners, medeoprichters van Alice-BC DAO
Neli is een bedrijfseigenaar die financiering nodig heeft
Bank - een bank die tokens distribueert

Fase 1. Initialisatie van saldi

Om tokens op het golventestnetwerk te ontvangen, moet u contact opnemen kraan en geef het adres aan waarnaar de tokens moeten worden verzonden.
Het adres vindt u in de IDE door uw accountgegevens te openen.
We benadrukken Bank 10 WAVES. Vervolgens controleren we of ze via de blok- en transactiebrowser zijn aangekomen: recensent

Laten we nu tokens van de bank verdelen onder de rest van de deelnemers. (Opmerkingen: alle transacties op het golvennetwerk zijn niet gratis, dus een minimaal positief saldo is vereist voordat alle deelnemers transacties kunnen uitvoeren).

1 WAVES = 100000000 eenheden (wavelets), aangezien bedragen alleen gehele getallen kunnen zijn
0.01 WAVES (transactiekosten) = 1000000

Bank -> [3 GOLVEN] -> Alice, via TransferTransaction (Type: 4).

We controleren of de omgeving SEED waaruit transacties worden ondertekend overeenkomt met onze bank:
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)
οΏΌ
Als u geen overeenkomende beginzin heeft, kunt u er gewoon naar toe gaan op het tabblad Accounts en nogmaals controleren.
Hierna creΓ«ren, kondigen en ondertekenen we een transactie voor de overdracht van 3 WAVES Alice.
Je kunt de gegevens van Alice ook achterhalen via de variabele env.accounts. De nummering begint vanaf 0, dus Alice is env.accounts[1].
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

Het resultaat kan ook in de browser worden bekeken, een link ernaar wordt onmiddellijk na uitvoering aan ons teruggestuurd transacties.

Wij zorgen ervoor dat het saldo van Alice wordt aangevuld met 3 GOLVEN, en het banksaldo op 10 - 3 - 0.01 = 0.699 blijft.
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

We sturen Boob en Cooper elk 3 WAVES, en Neli, Xena en Mark elk 0.2 WAVES op dezelfde manier.
(Opmerkingen: we hebben een fout van één teken gemaakt en Neli 0.02 WAVES gestuurd. Wees voorzichtig!)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Nadat we de saldi van alle deelnemers hebben aangevuld, zien we:
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Stap 2. Maak een dApp-account aan

We spraken af ​​dat Alice de maker en eigenaar van de gedecentraliseerde applicatie zou zijn.
Ga naar Accounts, stel het in als SEED en controleer of env.SEED overeenkomt met Alice.

Laten we proberen het eenvoudigst mogelijke script (contract) op het account van Alice te installeren.
Slimme contacten in Waves zijn predikaten die onder bepaalde omstandigheden elke vorm van uitgaande transactie verbieden of toestaan. In dit geval is deze toestand ALTIJD. Contractcode is waar. Roep deployment() aan.

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Kosten per setScript-transactie 1400000/100000000 = 0.014 WAVES. Alice heeft nog 2.986 WAVES op haar saldo.

Laten we nu proberen complexere slimme contractlogica te installeren op het Alice-account, beschreven in voorbeeld

Ride4Dapps bevat nu 2 nieuwe annotatietypen:

  1. @Oproepbaar(i) β€” neemt als parameter i de gegevens over welke rekening de transactie heeft aangeroepen/ondertekend. Het is het resultaat van deze functie dat de verandering in de status van het dApp-account bepaalt. Andere accounts kunnen met deze annotatie transacties aanmaken en functies uitvoeren en de status van het dApp-account wijzigen.
  2. @Verificateur(tx) β€” Transactieverificateur met de transactie tx-parameter. Komt overeen met de predicaatlogica van RIDE. In deze uitdrukking kunt u verdere wijzigingen in de logica van slimme contracten op het dApp-account toestaan ​​of verbieden.

Laten we doen dapper account als een gemeenschappelijke portemonnee voor alle deelnemers.
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Om te controleren welk contract momenteel actief is op uw account, kunt u de base64-code van het slimme contract in de blokverkenner kopiΓ«ren en deze herkennen met behulp van een decompiler (bij voorbeeld)
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

We zorgen ervoor dat de logica van het slimme contract overeenkomt met wat we verwachten.
Alice heeft nog 2.972 WAVES op haar saldo.

Deze dApp houdt via een mechanisme bij hoeveel elke deelnemer bijdraagt ​​aan het gemeenschappelijke fonds gegevenstransactie β€” DataEntry(currentKey, newAmount), waarbij currentKey het account is dat de stortingsfunctie aanroept, en newAmount de waarde is van het aangevulde saldo.

Boob en Cooper storten hun stortingen op het dApp-account met 1 WAVES.
Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

We maken een fout en de transactie gaat niet door. Omdat we er, ondanks het feit dat we ervan overtuigd waren dat we namens Bob een transactie uitvoerden, een fout hebben gemaakt in de index en een bankrekening hebben aangegeven die geen slim contract heeft. Het is de moeite waard hier een belangrijk punt op te merken: er zijn kosten verbonden aan mislukte pogingen om transacties te initiΓ«ren kan niet worden verwijderd! Alice heeft nog 2.972 WAVES op haar saldo. Bob heeft 3 GOLVEN.

Bob stuurde 1 WAVES naar dApp-account.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Bob heeft nog 1.99 WAVES over. Dat wil zeggen, Bob betaalde 0.01 WAVES-commissie

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Alice had 2.972 WAVES op haar saldo, nu is het 3.972. Er werd ook een transactie geregistreerd op het Alice-account, maar er werd geen commissie in rekening gebracht op het dApp-account (Alice).
Nadat Cooper ook de rekening had aangevuld, werd het saldo van Alice 4.972 WAVES.

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

U kunt in de blokverkenner op het tabblad Gegevens achterhalen wie de eigenaar is van hoeveel WAVES in de gemeenschappelijke portemonnee.

Cooper veranderde van gedachten over het achterlaten van het bedrag van 1 WAVES op de algemene portemonnee en besloot de helft van de affiniteit in te trekken. Om dit te doen, moet hij de terugtrekkingsfunctie aanroepen.

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

We hadden het echter weer mis, omdat de terugtrekkingsfunctie compleet andere parameters en een andere handtekening heeft. Wanneer u slimme contracten op RIDE4DAPPS ontwerpt, moet u op dit punt letten

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Cooper heeft nu 2.48 WAVES op zijn balans. Dienovereenkomstig 3 GOLVEN - 1 - 0.01, en dan + 0.5 - 0.01. Dienovereenkomstig kost elke oproep om te storten en op te nemen 0.01 WAVES. Als gevolg hiervan zijn de vermeldingen in de tabel met dApps-eigenaren als volgt gewijzigd.

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Bob besloot ook wat geld uit de gedeelde portemonnee op te nemen, maar maakte een fout en probeerde 1.5 WAVES op te nemen.

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Het slimme contract had echter een controle op deze situatie.

Xena is een oplichter, ze heeft geprobeerd 1 WAVES van het totale account af te halen.

Leren Waves slimme contracten schrijven op RIDE en RIDE4DAPPS. Deel 1 (portemonnee voor meerdere gebruikers)

Ook voor haar lukte het niet.

In het volgende deel zullen we kijken naar complexere problemen die verband houden met de imperfectie van Alice dApp Account.

Bron: www.habr.com

Voeg een reactie