Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Hallo zusammen!

Vor kurzem hat Waves Labs hat angekĂŒndigt einen Wettbewerb fĂŒr Entwickler anlĂ€sslich der EinfĂŒhrung des Testnetzwerks zur Erweiterung der Programmiersprache RIDE fĂŒr dezentrale Anwendungen Ride4Dapps veranstaltet!

Wir haben den DAO-Fall gewÀhlt, da Ventuary plant, dApps mit sozialen Funktionen zu entwickeln: Abstimmungen, Fundraising, Treuhandverwaltung usw.
Wir haben mit einem einfachen Beispiel in Q&A-Sitzungen und in RIDE IDE — Beispiel mit gemeinsamem Wallet.

Lassen Sie uns dieses Beispiel durchgehen, Hypothesen ĂŒberprĂŒfen und einige MerkwĂŒrdigkeiten betrachten:

Angenommen, wir haben Alice – dApp-Besitzerin
Boob und Cooper – Partner von Alice, MitgrĂŒnder von Alice-BC DAO
Neli – GeschĂ€ftsinhaberin, die Finanzierung benötigt
Bank – die Bank, die Token verteilt

Schritt 1. Initialisierung der Salden

Um im Testnetz von Waves Token zu erhalten, mĂŒssen wir die faucet ansprechen und die Adresse angeben, an die die Token gesendet werden sollen.
Die Adresse kann im IDE ermittelt werden, indem die Kontoinformationen angezeigt werden.
Wir weisen der Bank 10 WAVES zu. Danach ĂŒberprĂŒfen wir, ob sie ĂŒber den Block- und Transaktions-Explorer eingegangen sind: Explorer

Nun lassen Sie uns die Token von der Bank an die anderen Teilnehmer verteilen. (Hinweis: Alle Transaktionen im Waves-Netzwerk sind nicht kostenlos, daher ist ein minimales positives Guthaben bei allen Teilnehmern erforderlich, um Transaktionen durchzufĂŒhren).

1 WAVES = 100000000 Einheiten (wavelets), da die BetrÀge nur ganze Zahlen sein können.
0.01 WAVES (TransaktionsgebĂŒhr) = 1000000

Bank -> [3 WAVES] -> Alice, ĂŒber TransferTransaction (Typ: 4).

Wir ĂŒberprĂŒfen, ob env.SEED, mit dem die Transaktionen signiert werden, mit unserer Bank ĂŒbereinstimmt:
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)
ïżŒ
Wenn Sie kein entsprechendes Seed-Phrase haben, wechseln Sie einfach im Tab 'Konten' zu ihm und ĂŒberprĂŒfen Sie es noch einmal.
Danach erstellen, kĂŒndigen und signieren wir die Transaktion ĂŒber die Übertragung von 3 WAVES an Alice.
Die Daten von Alice können auch ĂŒber die Variable env.accounts abgerufen werden. Die Nummerierung beginnt bei 0, daher ist Alice env.accounts[1].
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

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

Das Ergebnis kann auch im Explorer beobachtet werden, der Link wird uns sofort nach der AusfĂŒhrung der Transaktion.

Wir stellen sicher, dass Alicas Guthaben um 3 WAVES aufgestockt wurde, wĂ€hrend in der Bank 10 — 3 — 0.01 = 0.699 verbleiben.
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Wir senden Boob und Cooper je 3 WAVES und Neli, Xena und Mark je 0.2 WAVES auf dieselbe Weise.
(Hinweis: Wir haben einen Fehler bei einer Ziffer gemacht und Neli 0.02 WAVES geschickt. Seien Sie vorsichtig!)

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

Nach dem Aufstocken der Salden aller Teilnehmer sehen wir:
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Schritt 2. Erstellung eines dApp-Kontos

Wir haben uns darauf geeinigt, dass der Ersteller und Besitzer der dezentralen Anwendung Alice sein wird.
In den Konten gehen wir und setzen sie als SEED fest und ĂŒberprĂŒfen, ob env.SEED mit Alice ĂŒbereinstimmt.

Lassen Sie uns den einfachsten Skript (Vertrag) auf dem Account Alice installieren, der möglich ist.
Smart Contracts in Waves sind PrÀdikate, die es bestimmten Arten von ausgehenden Transaktionen unter bestimmten Bedingungen erlauben oder verbieten. In diesem Fall ist die Bedingung - ALWAYS. Der Code des Vertrags - true. Wir rufen deploy() auf.

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Die GebĂŒhr fĂŒr die setScript-Transaktion betrĂ€gt 1400000/100000000 = 0.014 WAVES. Alice hat noch 2.986 WAVES auf ihrem Konto.

Jetzt versuchen wir, auf das Konto von Alice eine komplexere Logik des Smart Contracts zu installieren, wie sie in dem Beispiel

Ride4Dapps jetzt 2 neue Annotationstypen umfasst:

  1. @Callable(i) - akzeptiert als Parameter i, die Informationen darĂŒber, welches Konto die Transaktion aufgerufen/unterzeichnet hat. Das Ergebnis dieser Funktion bestimmt den Zustand des dApp Kontos. Andere Konten können Transaktionen erstellen und Funktionen mit dieser Annotation ausfĂŒhren und den Zustand des dApp Kontos Ă€ndern.
  2. @Verifier(tx) - Der Verifier der Transaktion mit dem Parameter tx der Transaktion. Entspricht der Logik der PrĂ€dikate aus RIDE. In diesem Ausdruck kann man erlauben oder verbieten, dass weitere Änderungen an der Logik der Smart Contracts auf dem dApp Konto vorgenommen werden.

Lass uns machen dApp das Konto zu einer gemeinsamen Geldbörse fĂŒr alle Teilnehmer.
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Um zu ĂŒberprĂŒfen, welcher Vertrag jetzt aktiv ist, können wir im Blockexplorer den base64-Code des Smart Contracts kopieren und ihn durch den Dekompilator erkennen (zum Beispiel)
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Wir stellen sicher, dass die Logik des Smart Contracts dem entspricht, was wir erwarten.
Alice hat noch 2.972 WAVES auf ihrem Konto.

Dieser dApp verfolgt, wie viel jeder Teilnehmer in den gemeinsamen Fond einbringt, durch das Mechanismus data transaction — DataEntry(currentKey, newAmount), wobei currentKey das Konto ist, das die Funktion deposit aufruft, und newAmount der Betrag des aufgeladenen Guthabens ist.

Boob und Cooper bringen jeweils 1 WAVES auf das dApp Konto ein.
Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Wir machen einen Fehler und die Transaktion schlĂ€gt fehl. Obwohl wir uns vergewissert haben, dass die Transaktion im Namen von Bob durchgefĂŒhrt wird, haben wir im Index einen Fehler gemacht und das Konto Bank angegeben, das keinen Smart Contract hat. An dieser Stelle ist es wichtig zu beachten — fĂŒr erfolglose Versuche, Transaktionen zu initiieren, wird keine GebĂŒhr erhoben! Wird nicht abgezogen! Alice hat noch 2.972 WAVES auf ihrem Konto. Bob hat 3 WAVES.

Bob hat 1 WAVES an das dApp-Konto gesendet.

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

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Bob hat 1,99 WAVES ĂŒbrig. Das bedeutet, dass Bob 0,01 WAVES an GebĂŒhren gezahlt hat.

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Alice hatten ursprĂŒnglich 2,972 WAVES auf ihrem Konto, jetzt sind es 3,972. Auf dem Konto von Alice wurde ebenfalls eine Transaktion registriert, jedoch wurde von dApp Account (Alice) keine GebĂŒhr abgezogen.
Nachdem auch Cooper das Konto aufgeladen hat, betrÀgt der Stand auf Alices Konto jetzt 4,972 WAVES.

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Wer wie viele WAVES im gemeinsamen Wallet besitzt, kann im Block-Explorer im Tab Daten nachsehen.

Cooper hat sich entschieden, den Betrag von 1 WAVES nicht im gemeinsamen Wallet zu belassen und möchte die HÀlfte der Mittel abheben. Dazu muss er die Funktion withdraw aufrufen.

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Wir haben jedoch erneut einen Fehler gemacht, da die Funktion withdraw ganz andere Parameter und eine andere Signatur hat. Bei der Gestaltung von Smart Contracts in RIDE4DAPPS sollte auf diesen Punkt geachtet werden.

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Cooper hat nun 2,48 WAVES auf seinem Konto. Somit 3 WAVES – 1 – 0,01, dann + 0,5 – 0,01. Deshalb kostet jeder Aufruf von deposit und withdraw 0,01 WAVES. Damit haben sich die EintrĂ€ge in der Tabelle der dApp-EigentĂŒmer wie folgt geĂ€ndert.

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Bob wollte ebenfalls einen Betrag aus dem gemeinsamen Wallet abheben, hat jedoch einen Fehler gemacht und versucht, 1,5 WAVES abzuheben.

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Allerdings gab es im Smart Contract eine ÜberprĂŒfung fĂŒr eine solche Situation.

Xena ist eine BetrĂŒgerin, die versuchte, 1 WAVES vom gemeinsamen Konto abzuheben.

Wir lernen, Waves-Smart-VertrÀge in RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzergeldbörse)

Auch sie hatte damit keinen Erfolg.

Im nÀchsten Teil werden wir kompliziertere Aspekte diskutieren, die mit der UnzulÀnglichkeit des dApp-Kontos von Alice verbunden sind.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster