Hallo an alle!
In jüngerer Zeit Waves Labs
Wir haben uns für den DAO-Fall entschieden, weil
Wir begannen mit einem einfachen Beispiel in
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
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:
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:

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].
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
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.
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:
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.
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
Ride4Dapps Enthält jetzt zwei neue Anmerkungstypen:
- @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.
- @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.
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 (
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.
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 }]}))
Bob hat noch 1.99 WAVES übrig. Das heißt, Bob hat 0.01 WAVES-Provision gezahlt
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.
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.
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
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.
Bob beschloss ebenfalls, etwas Geld von der gemeinsamen Geldbörse abzuheben, machte jedoch einen Fehler und versuchte, 1.5 WAVES abzuheben.
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.
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