
Hallo allerseits!
In jüngerer Zeit hat Waves Labs einen Wettbewerb für Entwickler angekündigt , der sich der Veröffentlichung der intelligenten Vertragssprachenerweiterung RIDE für dezentrale Ride4Dapps-Anwendungen im Testnetzwerk widmet!
Wir haben uns für den DAO-Fall entschieden, da Ventuary plant, dApp mit sozialen Funktionen zu entwickeln: Abstimmung, Spendenbeschaffung, Vertrauensmanagement usw.
Wir haben mit einem einfachen Beispiel in der Q & A-Sitzung und in der RIDE IDE begonnen - einem Beispiel mit einer gemeinsamen Brieftasche .
Schauen wir uns dieses Beispiel an, testen wir Hypothesen und betrachten einige Kuriositäten:
Lassen Sie uns Alice - dApp Besitzerin haben
Boob und Cooper sind Partner von Alice, Mitbegründer von Alice-BC DAO
Neli ist ein Geschäftsinhaber, der eine Finanzierung benötigt
Bank - eine Bank, die Token verteilt
Stufe 1. Initialisierung der Salden
Um Token im Wave-Test-Netzwerk zu empfangen, müssen Sie sich an den Wasserhahn wenden und die Adresse angeben, an die Token gesendet werden sollen.
Die Adresse finden Sie in der IDE, indem Sie die Kontoinformationen anzeigen.
Wählen Sie Bank 10 WAVES. Nachdem wir überprüft haben, ob sie den Block- und Transaktions-Explorer durchlaufen haben: Browser
Verteilen wir nun Token von der Bank an die anderen Teilnehmer. (Hinweise: Alle Transaktionen im Wave-Netzwerk sind nicht kostenlos, daher ist für alle Teilnehmer ein positiver Mindestsaldo erforderlich, um Transaktionen abzuschließen.)
1 WAVES = 100000000 Einheiten (Wavelets), da Beträge nur ganzzahlig sein können
0,01 WELLEN (Transaktionsgebühr) = 1000000
Bank -> [3 WAVES] -> Alice über TransferTransaction (Typ: 4).
Wir überprüfen, ob der env.SEED, von dem die Transaktionen unterzeichnet werden, unserer Bank entspricht:


Wenn Sie keine passenden Startphrasen haben, wechseln Sie einfach auf der Registerkarte "Konten" zu dieser und überprüfen Sie sie erneut.
Danach erstellen, kündigen und unterzeichnen wir eine Transaktion zur Übertragung von 3 WAVES Alice.
Sie können die Daten von Alice auch über die Variable env.accounts lernen. Die Nummerierung beginnt bei 0 bzw. Alice ist env.accounts [1].

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Das Ergebnis kann auch im Browser beobachtet werden, der Link dazu wird unmittelbar nach der Transaktion an uns zurückgesendet.
Wir stellen sicher, dass der Alice-Kontostand mit 3 WAVES aufgefüllt wird und dass 10 - 3 - 0,01 = 0,699 auf dem Bankguthaben verbleiben.


Wir senden Boob und Cooper in 3 WAVES und Neli, Xena und Mark in 0,2 WAVES auf die gleiche Weise.
(Anmerkungen: Wir haben einen Fehler mit einem einzelnen Zeichen gemacht und Neli 0.02 WAVES gesendet. Seien Sie vorsichtig!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Nach dem Auffüllen des Guthabens aller Teilnehmer sehen wir:

Phase 2. Erstellen eines dApp-Kontos
Wir haben vereinbart, dass der Ersteller und Eigentümer der dezentralen Anwendung Alice sein wird.
Installieren Sie es in Accounts als SEED und überprüfen Sie, ob env.SEED mit Alice übereinstimmt.
Versuchen wir, das einfachste Skript (Vertrag) auf dem Alice-Konto zu installieren.
Intelligente Kontakte in Waves sind Prädikate, die unter bestimmten Bedingungen die Ausführung ausgehender Transaktionen jeglicher Art verbieten oder zulassen. In diesem Fall ist diese Bedingung IMMER. Der Vertragscode ist wahr. Wir rufen deploy () auf.

Gebühr für setScript-Transaktion 1400000/100000000 = 0,014 WAVES. Alice hat 2.986 WELLEN auf ihrem Gleichgewicht.
Versuchen wir nun, auf dem Alice-Konto eine komplexere intelligente Vertragslogik zu installieren, die im Beispiel beschrieben wird
Ride4Dapps enthält jetzt zwei neue Arten von Anmerkungen:
- @Callable (i) - verwendet als Parameter i Daten darüber, welches Konto die Transaktion verursacht / signiert hat. Das Ergebnis dieser Funktion bestimmt die Änderung des Status des dApp-Kontos. Andere Konten können mit dieser Anmerkung Transaktionen erstellen und Funktionen ausführen und den Status des dApp-Kontos ändern.
- @Verifier (tx) - Transaktionsprüfer mit Transaktions-tx-Parameter. Entspricht der Prädikatenlogik von RIDE. In diesem Ausdruck können Sie weitere Änderungen an der Logik intelligenter Verträge für ein dApp-Konto aktivieren oder deaktivieren.
Seien Sie aufmerksam! Der wichtige Punkt ist, dass das Skript für das Konto standardmäßig nicht wahr ist , sondern den Signaturvergleich verwendet und nur dem Eigentümer der Signatur erlaubt, Transaktionen durchzuführen.
sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPk)
Ohne eine solche Überprüfung kann jeder Transaktionen von einem Konto aus durchführen!
Lassen Sie uns das dApp- Konto als gemeinsame Brieftasche für alle Teilnehmer erstellen .

Um zu überprüfen, welcher Vertrag derzeit in Ihrem Konto aktiv ist, können Sie den base64-Code des Smart-Vertrags im Blockbrowser kopieren und über den Dekompiler erkennen ( z. B. ).



Wir stellen sicher, dass die Logik des intelligenten Vertrags unseren Erwartungen entspricht.
Alice hat 2.972 WELLEN auf ihrem Gleichgewicht.
Diese dApp verfolgt, wie viel jeder Teilnehmer über den Datentransaktionsmechanismus - DataEntry (currentKey, newAmount) zum gemeinsamen Fonds beiträgt , wobei currentKey das Konto ist, das die Einzahlungsfunktion aufruft, und newAmount der Wert des aufgefüllten Guthabens ist.
Boob und Cooper machen ihre Einzahlungen auf dApp-Konto zu je 1 WAVES.

Wir machen einen Fehler und die Transaktion wird nicht bestanden. Da wir trotz der Tatsache, dass wir davon überzeugt waren, dass wir eine Transaktion im Auftrag von Bob durchführen, einen Fehler im Index gemacht und ein Bankkonto angegeben haben, das keinen intelligenten Vertrag hat. Hier ist ein wichtiger Punkt zu beachten - bei erfolglosen Versuchen, Transaktionen einzuleiten, wird die Provision nicht abgehoben! Alice hat 2.972 WELLEN auf ihrem Gleichgewicht. Bob 3 hat WELLEN.
Bob hat 1 WAVES an dApp Account 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 zahlte 0,01 WAVES Provision

Alice hatte 2.972 WAVES in ihrer Bilanz, es wurde 3.972. Eine Transaktion wurde auch auf Alices Konto registriert, es wurde jedoch keine Provision vom dApp-Konto (Alice) abgezogen.
Nachdem Cooper auch Alices Konto aufgefüllt hatte, wurden 4.972 WAVES in der Bilanz ausgewiesen.

Im Block-Explorer auf der Registerkarte Daten können Sie herausfinden, zu wie vielen WAVES in der allgemeinen Brieftasche gehören.
Cooper änderte seine Meinung darüber, den Betrag von 1 WAVES auf einer gemeinsamen Brieftasche zu belassen, und beschloss, die Hälfte der Affinitäten zurückzuziehen. Dazu muss die Rückzugsfunktion aufgerufen werden.

Wir haben uns jedoch erneut geirrt, da die Rückzugsfunktion völlig andere Parameter hat, eine andere Signatur. Achten Sie beim Entwerfen intelligenter Verträge auf RIDE4DAPPS auf diesen Moment.

Cooper hat 2,48 WAVES in seiner Bilanz. Dementsprechend 3 WELLEN - 1 - 0,01 und dann + 0,5 - 0,01. Dementsprechend kostet jeder Anruf zum Ein- und Auszahlen 0,01 WAVES. Infolgedessen haben sich die Einträge in der dApps-Besitzertabelle wie folgt geändert.

Bob beschloss auch, einen bestimmten Betrag aus dem gesamten Portemonnaie abzuziehen, täuschte sich jedoch und versuchte, 1,5 WELLEN zu extrahieren.

Der Smart-Vertrag hatte jedoch eine Überprüfung für eine solche Situation.
Xena ist ein Betrüger, sie hat versucht, 1 WAVES vom allgemeinen Konto abzuheben.

Sie hat auch versagt.
Im nächsten Teil werden wir komplexere Probleme im Zusammenhang mit der Unvollkommenheit des Alice dApp-Kontos betrachten.