Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Hallo an alle!

In jüngerer Zeit Waves Labs angekündigt Wettbewerb für Entwickler zur Veröffentlichung der RIDE-Smart-Contract-Spracherweiterung für dezentrale Anwendungen Ride4Dapps im Testnetzwerk!

Wir haben uns für den DAO-Fall entschieden, weil Ventuary plant die Entwicklung von dApps mit sozialen Funktionen: Abstimmung, Spendensammlung, Treuhandverwaltung usw.
Wir begannen mit einem einfachen Beispiel in Frage-und-Antwort-Runden und RIDE IDE - Beispiel mit gemeinsame Geldbörse.

Schauen wir uns dieses Beispiel an, testen Hypothesen und schauen uns einige Kuriositäten an:

Lassen Sie uns Alice haben – dApp-Besitzerin
Boob und Cooper sind Alice-Partner und Mitbegründer von Alice-BC DAO
Neli ist eine Unternehmerin, die eine Finanzierung benötigt
Bank – eine Bank, die Token verteilt

Stufe 1. Initialisierung der Salden

Um Token im Waves-Testnetzwerk zu erhalten, müssen Sie Kontakt aufnehmen Wasserhahn und geben Sie die Adresse an, an die Token gesendet werden sollen.
Die Adresse finden Sie in der IDE, indem Sie Ihre Kontodaten öffnen.
Wir heben Bank 10 WAVES hervor. Dann überprüfen wir, ob sie über den Block- und Transaktionsbrowser angekommen sind: Rezensent

Lassen Sie uns nun Token von der Bank an die übrigen Teilnehmer verteilen. (Hinweise: Alle Transaktionen im Waves-Netzwerk sind nicht kostenlos, daher ist ein positiver Mindestsaldo erforderlich, damit alle Teilnehmer Transaktionen durchführen können.)

1 WAVES = 100000000 Einheiten (Wavelets), da Beträge nur ganzzahlig sein können
0.01 WAVES (Transaktionsgebühr) = 1000000

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

Wir prüfen, ob der env.SEED, von dem aus Transaktionen signiert werden, mit unserer Bank übereinstimmt:
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Wenn Sie keine passende Startphrase haben, wechseln Sie einfach auf der Registerkarte „Konten“ zu dieser und überprüfen Sie sie erneut.
Anschließend erstellen, kündigen und unterzeichnen wir eine Transaktion für die Übertragung von 3 WAVES Alice.
Sie können Alices Daten auch über die Variable env.accounts herausfinden. Die Nummerierung beginnt bei 0, Alice ist also env.accounts[1].
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

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

Das Ergebnis ist auch im Browser beobachtbar, ein Link dazu wird uns unmittelbar nach der Ausführung zurückgesendet Transaktionen.

Wir sorgen dafür, dass Alices Guthaben um 3 WAVES wieder aufgefüllt wird und das Bankguthaben bei 10 – 3 – 0.01 = 0.699 bleibt.
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Wir senden Boob und Cooper jeweils 3 WELLEN und Neli, Xena und Mark jeweils 0.2 WELLEN auf die gleiche Weise.
(Hinweise: Wir haben einen Ein-Zeichen-Fehler gemacht und Neli 0.02 WAVES gesendet. Seien Sie vorsichtig!)

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

Nachdem wir die Guthaben aller Teilnehmer aufgefüllt haben, sehen wir:
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Stufe 2. Erstellen Sie ein dApp-Konto

Wir waren uns einig, dass Alice die Erstellerin und Eigentümerin der dezentralen Anwendung sein würde.
Gehen Sie zu Konten, legen Sie SEED fest und überprüfen Sie, ob env.SEED mit Alice übereinstimmt.

Versuchen wir, das einfachste Skript (Vertrag) auf Alices Konto zu installieren.
Intelligente Kontakte in Waves sind Prädikate, die unter bestimmten Bedingungen jede Art von ausgehender Transaktion verbieten oder zulassen. In diesem Fall ist diese Bedingung IMMER. Vertragscode ist wahr. Rufen Sie „deploy()“ auf.

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Gebühr pro SetScript-Transaktion 1400000/100000000 = 0.014 WAVES. Alice hat noch 2.986 WAVES auf ihrem Guthaben.

Versuchen wir nun, eine komplexere Smart-Contract-Logik auf dem Alice-Konto zu installieren, beschrieben in Beispiel

Ride4Dapps Enthält jetzt zwei neue Anmerkungstypen:

  1. @Callable(i) – nimmt als Parameter i Daten darüber an, welches Konto die Transaktion aufgerufen/signiert hat. Das Ergebnis dieser Funktion bestimmt die Änderung des Status des dApp-Kontos. Andere Konten können mit dieser Annotation Transaktionen erstellen und Funktionen ausführen sowie den Status des dApp-Kontos ändern.
  2. @Verifier(tx) – Transaktionsprüfer mit dem Transaktions-TX-Parameter. Entspricht der Prädikatenlogik von RIDE. In diesem Ausdruck können Sie weitere Änderungen an der Logik von Smart Contracts auf dem dApp-Konto zulassen oder verbieten.

Lass es uns tun dApp Konto als gemeinsames Wallet für alle Teilnehmer.
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Um zu überprüfen, welcher Vertrag gerade auf Ihrem Konto aktiv ist, können Sie den Base64-Code des Smart Contracts im Block-Explorer kopieren und ihn mithilfe eines Dekompilers erkennen (beispielsweise)
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Wir stellen sicher, dass die Logik des Smart Contracts unseren Erwartungen entspricht.
Alice hat noch 2.972 WAVES auf ihrem Guthaben.

Diese dApp verfolgt über einen Mechanismus, wie viel jeder Teilnehmer zum gemeinsamen Fonds beiträgt Datentransaktion – DataEntry(currentKey, newAmount), wobei currentKey das Konto ist, das die Einzahlungsfunktion aufruft, und newAmount der Wert des aufgefüllten Guthabens ist.

Boob und Cooper tätigen ihre Einzahlungen auf das dApp-Konto mit 1 WAVES.
Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Wir machen einen Fehler und die Transaktion kommt nicht zustande. Denn obwohl wir davon überzeugt waren, dass wir eine Transaktion im Namen von Bob durchführen, haben wir im Index einen Fehler gemacht und ein Bankkonto angegeben, das über keinen Smart Contract verfügt. Hier ist ein wichtiger Punkt zu beachten: Für erfolglose Versuche, Transaktionen einzuleiten, wird eine Gebühr erhoben kann nicht entfernt werden! Alice hat noch 2.972 WAVES auf ihrem Guthaben. Bob hat 3 WELLEN.

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

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Bob hat noch 1.99 WAVES übrig. Das heißt, Bob hat 0.01 WAVES-Provision gezahlt

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Alice hatte 2.972 WAVES auf ihrem Kontostand, jetzt sind es 3.972. Auch auf dem Alice-Konto wurde eine Transaktion registriert, vom dApp-Konto (Alice) wurde jedoch keine Provision erhoben.
Nachdem Cooper das Konto ebenfalls aufgefüllt hatte, belief sich Alices Guthaben auf 4.972 WAVES.

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Wem wie viele WAVES im gemeinsamen Wallet gehören, kannst du im Block-Explorer im Reiter Daten herausfinden.

Cooper änderte seine Meinung darüber, den Betrag von 1 WAVES auf dem allgemeinen Wallet zu belassen, und beschloss, die Hälfte der Affinität abzuheben. Dazu muss er die Rückzugsfunktion aufrufen.

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Allerdings haben wir uns erneut geirrt, da die Auszahlungsfunktion völlig andere Parameter und eine andere Signatur hat. Wenn Sie Smart Contracts auf RIDE4DAPPS entwerfen, sollten Sie diesen Punkt beachten

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Cooper hat jetzt 2.48 WAVES in seiner Bilanz. Dementsprechend 3 WELLEN - 1 - 0.01 und dann + 0.5 - 0.01. Dementsprechend kostet jeder Aufruf zur Ein- und Auszahlung 0.01 WAVES. Infolgedessen haben sich die Einträge in der Tabelle der dApps-Besitzer wie folgt geändert.

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Bob beschloss ebenfalls, etwas Geld von der gemeinsamen Geldbörse abzuheben, machte jedoch einen Fehler und versuchte, 1.5 WAVES abzuheben.

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Allerdings verfügte der Smart Contract über eine Prüfung für diese Situation.

Xena ist eine Betrügerin, sie hat versucht, 1 WAVES vom Gesamtkonto abzuheben.

Lernen, Waves Smart Contracts auf RIDE und RIDE4DAPPS zu schreiben. Teil 1 (Mehrbenutzer-Wallet)

Auch bei ihr hat es nicht geklappt.

Im nächsten Teil werden wir uns mit komplexeren Problemen im Zusammenhang mit der Unvollkommenheit des Alice dApp-Kontos befassen.

Source: habr.com

Kommentar hinzufügen