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

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster