
Im April 2018 präsentierte das Waves-Team seine nicht vollständig abgeschlossenen Smart-Verträge.
Wenig später, als der Waves-Hackathon angekündigt wurde, entschied ich, dass es Zeit war, in neue Technologien einzutauchen. Unter dem Schnitt finden Sie detaillierte Informationen zu dem Smart-Vertrag, der beim Hackathon den dritten Platz gewonnen hat.
Der Artikel ist nützlich für Entwickler, um ihre eigenen intelligenten Verträge zu implementieren und sich mit Technologie vertraut zu machen.
Idee
Die Idee des Projekts ist es, die Gehälter von Softwareentwicklern, die Github verwenden, automatisch proportional zur geleisteten Arbeit zu verteilen. Die Hauptaufgabe, die Aufgabe, die der intelligente Vertrag gleichzeitig löst, befreit uns von der Notwendigkeit, dem Geldverteilungsprogramm zu vertrauen, und ermöglicht es dem Benutzer ohne Programmierkenntnisse sogar, die korrekte Verteilung von Geldern zu überprüfen, bevor er Geld überweist
Technologie-Stack
HTML und JavaScript (Node.js Waves-
Bibliothek ), Open
Source auf GitHub und
Demonstration des Projekts auf Firebase Hosting
Der Prozess
- Der Benutzer wählt das GitHub-Repository aus und bestimmt die Gesamtmenge der Gehälter
- Der Benutzer zahlt 0,01 Wellen (ca. 0,02 US-Dollar), um Daten in der Blockchain zu speichern und einen intelligenten Vertrag zu erstellen
- Der Benutzer überprüft die Richtigkeit der Daten und überträgt dann die Höhe der Gehälter an die Adresse des Smart-Vertrags
- Die Gehälter werden zwischen den Entwicklern geteilt
Entwicklung
Der beste Einstiegspunkt für Anfänger ist die
Demokonsole , die ein gutes Beispiel und eine Konsole zum Testen von Code enthält. Während der Entwicklung ist es besser, eine
Testblockkette zu verwenden , bei der Sie mit
einem Klick 10 kostenlose
Testwellen erhalten . Obwohl Google aufgrund der Neuheit der Technologie immer noch nicht viele Beispiele findet, sind intelligente Verträge gut
dokumentiert und enthalten alle erforderlichen Informationen.
Die NodeJs-Bibliothek (1.4.0) funktioniert bereits gut in Browsern (mit Ausnahme der Erstellung von Alias), ist jedoch leider noch NICHT mit Google Functions oder React Native kompatibel (Waves-Entwickler
versprechen, dies in naher Zukunft
zu beheben).
Intelligenter Vertrag
Für ein Konto wird ein intelligenter Vertrag erstellt, der jede Aktion mit diesem Konto überprüft (mit Ausnahme eingehender Geldtransfers):
let signature = base58'${currentWallet.keyPair.publicKey}'; match tx { case tx:TransferTransaction => { let employerAddress = addressFromPublicKey(tx.senderPk); let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); let salary = extract(getLong(employerAddress, dateKey)); if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false } case _ => false }
Intelligentes zeilenweises Parsen von Verträgen
let signature = base58'${currentWallet.keyPair.publicKey}';
Hier speichern wir den öffentlichen Schlüssel der Brieftasche (Ihr JavaScript muss die mit dem Befehl Waves.Seed.create () erstellte Variable currentWallet enthalten), damit nur das Smart Contract-Konto der Brieftasche (in unserem Fall Smart Rewarding Project) Geld überweisen kann.
match tx { case tx:TransferTransaction => {some validations} case _ => false }
Dies ist die Grundkonstruktion eines intelligenten Waves-Vertrags. Er besagt, dass dieser Vertrag andere Aktivitäten als das Überweisen von Geldern (TransferTransaction) verbietet. Nach dem Erstellen eines Vertrags ist es daher unmöglich, Daten über Entwickler (DataTransaction) oder den Smart-Vertrag selbst (SetScript) zu ändern.
let employerAddress = addressFromPublicKey(tx.senderPk);
Es verwendet die Basismethode addressFromPublicKey der integrierten
Bibliothek , um die Adresse des Anforderungserstellers aus seinem öffentlichen Schlüssel abzurufen.
let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes);
Die Basismethode addressFromRecipient ruft die Adresse des Geldempfängers ab
let salary = extract(getLong(employerAddress, dateKey));
Die grundlegende getLong-Methode liefert uns Daten, die in der Blockchain unter der Adresse des Anforderungserstellers gespeichert sind. Dies ist die Höhe des Gehalts des Entwicklers. Der Vertrag kann auf Daten zugreifen, die in der Waves-Blockchain gespeichert sind (und NICHT auf Daten, die sich auf einer Website oder einem Server eines Drittanbieters befinden).
if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false
Hier erfolgt die Überprüfung des korrekten Betrags und der Unterschrift. True bedeutet, dass die Transaktion zulässig ist, und false bedeutet, dass die Transaktion abgelehnt wird. Somit wird bei jeder Überweisung von diesem Konto überprüft, dass das Geld nur an die Geldbörse des Entwicklers und in dem bereits in der Blockkette gespeicherten Betrag im Format eines leicht lesbaren Schlüsselpaars (Adresse als Schlüssel und Betrag als Wert) gesendet wird, was dies ermöglicht Vertrauen Sie dem Programm, überprüfen Sie alle Daten selbst für 5-10 Sekunden, bevor Sie Gehälter übertragen.
Online-Demonstration des Projekts in der Testblockchain,
hier verfügbar
Hier sehen Sie den Projektcode.
Ich hoffe, dass der Artikel informativ war und für Sie nützlich sein wird, um Ihren ersten intelligenten Vertrag zu schreiben.