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

Ich mag es PHP wegen der Entwicklungspeed und hervorragenden Portabilität. Es ist sehr gut, wenn man immer ein Instrument zur Verfügung hat, das bereit ist, Aufgaben zu lösen.

Es war ziemlich enttäuschend, als ich mit der einheimischen Blockchain Waves Platform bekannt wurde, dass es kein fertiges SDK in PHP gab. Nun, ich musste es selbst schreiben.

Anfangs musste ich Nodes zum Signieren von Transaktionen verwenden. So musste man für die Verwaltung von drei Adressen drei Nodes starten… Es war ein jämmerlicher Anblick, obwohl es einige Aufgaben löste. Bis ich die Einsicht bekam, dass es ein Irrweg ist, auf Nodes zu setzen. Erstens wegen der eingeschränkten Funktionalität API, und zweitens wegen der Geschwindigkeit (in diesen Tagen waren Nodes sehr langsam).

Ich begann mit zwei parallelen Arbeiten. Die eine war, einen Blockchain-Explorer zu erstellen, der schnell und völlig unabhängig von der API der Nodes sein würde. Die andere bestand darin, alle Funktionen für die Arbeit mit der Waves Platform an einem Ort zu sammeln. So entstanden die Projekte w8io und , über das.

Der erste Schritt hinter die Kulissen der Waves-Blockchain war der Explorer w8io. Es war nicht einfach, aber ich schaffte es trotzdem, eine unabhängige Berechnung aller Salden zu schreiben und sogar einen Fehler in den Berechnungen auf den Original-Nodes zu finden (das Bug-Bounty-Programm übrigens läuft bei ihnen, für gefundene Fehler wird bezahlt). Sie können die Funktionalität des Explorers w8io in diesem Thema näher erkunden: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Im Laufe der Arbeit an w8io hatte ich bereits Zweifel, aber als die Arbeit zu einem logischen Ende kam und ich mit der Erstellung des SDK begann, bestätigten sich die Zweifel. Ich konnte einige Funktionen, einschließlich der wichtigsten, kryptografischen, nirgendwo finden. Dann begann ich mit der Erstellung meiner eigenen Bausteine für das Fundament. So entstanden: ABCode zum Codieren in base58 (eigentlich zum Codieren jedes Alphabets in jedes), Curve25519 zum Erstellen und Überprüfen kompatibler Signaturen (mit Varianten auf Steroiden), Blake2b zur Berechnung eines der Hashes (der nur ab PHP 7.2 verfügbar war) usw.

Hier möchte ich mich bedanken bei Inal Kardanov für einige wertvolle Ratschläge, die mich in Richtung composer statt der mir vertrauten, aber veralteten, Include-Dateien gelenkt haben.

Nach ein paar Monaten sah WavesKit das Licht der Welt, trat aus der Beta-Version und ist nun bereit, mit allen Standardfunktionen der Waves-Plattform zu arbeiten. Alle in der Hauptnetze verfügbar Transaktionen können einfach erstellt, signiert und gesendet werden, unterstützt von einem einzigen Paket, das in allen 64-Bit-Versionen von PHP ab 5.6 funktioniert.

Integrieren Sie WavesKit in Ihr Projekt:

composer require deemru/waveskit

Verwendung:

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 im Testnetz 'T' arbeitet. Wir setzen den Seed, aus dem automatisch die Schlüssel und die Kontoadresse basierend auf dem öffentlichen Schlüssel berechnet werden. Dann erstellen wir eine Übertragungs-Transaktion von 0.00000001 Waves von der automatisch nach dem Seed berechneten Adresse zu der Adresse des Alias 'test', unterschreiben sie mit dem privaten Schlüssel und senden sie ins Netzwerk. Anschließend stellen wir sicher, dass die Transaktion erfolgreich im Netzwerk bestätigt wurde.

Die Arbeit mit Transaktionen konzentriert sich auf Funktionen, die mit tx beginnen. Für ein besseres Verständnis der Arbeit mit Transaktionen können Sie die Dokumentation von WavesKit oder direkt die anschaulichen Beispiele in den Continuous Integration-Tests.

Da WavesKit unter realen Bedingungen entwickelt wurde, hat es bereits fortschrittliche Funktionen. Die erste Killer-Feature ist die Funktion ensure, die sicherstellt, dass das erforderliche Maß an Zuverlässigkeit erreicht wird, sodass die Transaktion nicht verloren geht, sondern bestätigt wurde und die notwendige Anzahl an Bestätigungen im Netzwerk erreicht hat.

Ein weiterer robustes Mechanismus ist, wie WavesKit mit Knoten kommuniziert. In geschützten Bedingungen arbeitet das Framework nur mit dem Hauptknoten und hält eine dauerhafte Verbindung, kann jedoch bei Fehlern automatisch auf Reserveknoten umschalten. Wenn Sie ein Array von Reserveknoten festlegen, können Sie die Funktion setBestNode aufrufen, um den besten Knoten basierend auf der maximalen Höhe und der Antwortgeschwindigkeit der aktuellen Knoten auszuwählen. Jetzt fügen Sie noch einen internen Cache für Anfragen hinzu und kümmern Sie sich sowohl um die Benutzer als auch um die Knotenbetreiber.

Einer der letzten fortschrittlichen Mechanismen ist die Funktion txMonitor. Sie entstand aus der Notwendigkeit, in Echtzeit auf eingehende Transaktionen zu reagieren. Diese Funktion löst alle Aspekte der Verarbeitung von Transaktionen in der Blockchain vollständig. Kein Schmerz mehr, Sie installieren einfach Ihre Callback-Funktion mit den gewünschten Optionen und warten auf neue Transaktionen, die Ihre Prozesse auslösen. Zum Beispiel, ein weiteres von mir geplantes Projekt VECRO ist vollständig um diese Funktion herum aufgebaut, Sie können in Ruhe erforschen, wie sie direkt im Projektcode funktioniert.

Ich liebe Open Source, es ist eine der größten Errungenschaften der Menschheit. Da ich der einzige Entwickler bin und in der Lage bin, alle meine Bedürfnisse zu erfüllen, lade ich Sie ein, zu nutzen und beizutragen zu , über das.

Quelle: habr.com

60GB SSD 8Gb DDR4