WavesKit – PHP-Framework für die Arbeit mit der Waves-Blockchain

Ich mag PHP für schnelle Entwicklung und hervorragende Portabilität. Es ist sehr gut, wenn man immer ein Werkzeug zur Lösung von Problemen in der Tasche hat.

Es war ziemlich schade, als ich mich mit der heimischen Blockchain vertraut machte Wellen-Plattform er hatte kein fertiges PHP SDK in seinem Arsenal. Nun, ich musste es schreiben.

Zuerst musste ich verwenden Knoten Transaktionen zu unterzeichnen. Um drei Adressen zu verwalten, musste man also drei Knoten betreiben ... Es war ein erbärmlicher Anblick, obwohl er einige Probleme löste. Bis man erkannte, dass es eine Sackgasse ist, sich auf Knoten zu verlassen. Erstens aufgrund der eingeschränkten Funktionalität API, zweitens wegen der Geschwindigkeit (Knoten waren damals sehr langsam).

Ich habe zwei parallele Jobs begonnen. Eine besteht darin, einen Blockchain-Explorer zu erstellen, der schnell und völlig unabhängig von der Knoten-API ist. Die zweite besteht darin, alle Funktionen für die Arbeit mit der Waves-Plattform an einem Ort zu sammeln. So sind die Projekte entstanden. w8io и WavesKit.

Der erste Schritt hinter die Kulissen der Waves-Blockchain war w8io-Browser. Es war nicht einfach, aber es gelang trotzdem, eine unabhängige Berechnung aller Salden zu schreiben und sogar einen Fehler in den Berechnungen auf den ursprünglichen Knoten zu finden (Bug-Bounty-Programm Bei ihnen funktioniert es übrigens, sie zahlen für die gefundenen Fehler. Mehr über die Funktionalität des w8io-Browsers erfahren Sie in diesem Thread: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Während der Arbeit an w8io hatte ich bereits Zweifel, aber als die Arbeit ein logisches Ende fand und ich mit der Erstellung des SDK begann, wurden meine Zweifel bestätigt. Einige Funktionen, auch die wichtigsten kryptografischen, konnte ich nirgendwo finden. Dann begann ich mit der Herstellung meiner Grundsteine. So wurden sie geboren: ABCode in Base58 kodieren (eigentlich, um jedes Alphabet in jedes zu kodieren), Curve25519 um kompatible Signaturen zu erstellen und zu überprüfen (mit Optionen auf Steroiden), Blake2b um einen der Hashes zu berechnen (der erst seit PHP 7.2 verfügbar ist) usw.

Hier muss ich mich bedanken Inala Kardanova für einige wertvolle Ratschläge, die mich geleitet haben Komponist statt der für mich üblichen, aber veralteten Include-Dateien.

Nach ein paar Monaten WavesKit erblickte das Licht der Welt, kam heraus Beta-Versionen und ist nun bereit, mit allen Standardfunktionen der Waves-Plattform zu arbeiten. Alles verfügbar in Hauptnetzwerk Transaktionen können einfach mit nur einem Paket erstellt, signiert und versendet werden, das auf allen 64-Bit-Versionen von PHP ab 5.6 läuft.

Wir verbinden WavesKit mit unserem Projekt:

composer require deemru/waveskit

Wir gebrauchen:

use deemruWavesKit;
$wk = new WavesKit( 'T' );
$wk->setSeed( 'manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add' );
$tx = $wk->txBroadcast( $wk->txSign( $wk->txTransfer( 'test', 1 ) ) );
$tx = $wk->ensure( $tx );

Im obigen Beispiel erstellen wir ein WavesKit-Objekt, das auf dem Testnetz „T“ läuft. Wir legen die Seed-Phrase fest, aus der anhand des öffentlichen Schlüssels automatisch die Schlüssel und die Adresse des Kontos berechnet werden. Als nächstes erstellen wir eine Übertragungstransaktion 0.00000001 Waves von der automatisch aus der Seed-Phrase berechneten Adresse zur Adresse des „Test“-Alias, übertragen diese zur Signatur mit dem privaten Schlüssel und senden sie an das Netzwerk. Danach stellen wir sicher, dass die Transaktion erfolgreich vom Netzwerk bestätigt wird.

Der Schwerpunkt liegt auf Transaktionen Funktionen beginnend mit tx. Um die Arbeit mit Transaktionen besser zu verstehen, können Sie studieren WavesKit-Dokumentation oder gehen Sie direkt zu den anschaulichen Beispielen in Kontinuierliche Integrationstests.

Da WavesKit im realen Einsatz entwickelt wurde, verfügt es bereits über erweiterte Funktionen. Das erste Killer-Feature ist Funktion sicherstellen, die das Erreichen des erforderlichen Vertrauensniveaus steuert, dass die Transaktion nicht verloren ging, sondern im Gegenteil bestätigt wurde und die erforderliche Anzahl von Bestätigungen im Netzwerk erreichte.

Ein weiterer kugelsicherer Mechanismus ist die Art und Weise, wie WavesKit mit Knoten kommuniziert. Unter Gewächshausbedingungen arbeitet das Framework nur mit dem Hauptknoten zusammen und hält eine ständige Verbindung mit diesem aufrecht. Bei Fehlern kann es jedoch automatisch auf Backup-Knoten umschalten. Wenn Sie ein Array von Standby-Knoten einrichten, können Sie die Funktion aufrufen setBestNode Bestimmen Sie den besten Knoten als Hauptknoten anhand des Maximalwerts der aktuellen Höhe und Reaktionsgeschwindigkeit. Fügen Sie nun einen internen Abfragecache hinzu und spüren Sie die Fürsorge sowohl der Benutzer als auch der Knotenbesitzer.

Einer der neuesten fortschrittlichen Mechanismen ist die Funktion txMonitor. Es entstand im Zusammenhang mit der Notwendigkeit, auf eingehende Transaktionen in Echtzeit zu reagieren. Diese Funktion löst vollständig alle Nuancen, die mit der Verarbeitung von Transaktionen in der Blockchain verbunden sind. Kein Ärger mehr, richten Sie einfach Ihre Rückruffunktion mit den gewünschten Optionen ein und warten Sie auf neue Transaktionen, um Ihre Prozesse zu starten. Zum Beispiel ein weiteres meiner Projekte VECRO Da es vollständig um diese Funktion herum aufgebaut ist, können Sie leicht lernen, wie es richtig funktioniert im Projektcode.

Ich liebe Open Source, es ist eine der größten Errungenschaften der Menschheit. Da ich der einzige Entwickler bin und alle meine Bedürfnisse erfüllt sind, lade ich Sie ein, es zu nutzen und dazu beizutragen WavesKit.

Source: habr.com

Kommentar hinzufügen