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

Ich mag PHP die Geschwindigkeit der Entwicklung und die hervorragende Portabilität. Es ist sehr gut, ein sofort einsatzbereites Werkzeug zur Lösung von Aufgaben immer griffbereit zu haben.

Es war ziemlich enttäuschend, als ich mit der lokalen Blockchain Waves Platform in ihrem Arsenal kein fertiges SDK für PHP fand. Nun, ich musste es selbst schreiben.

Zunächst musste ich verwenden Knoten um Transaktionen zu signieren. Um drei Adressen zu verwalten, musste ich drei Knoten starten... Das war ein armseliger Anblick, obwohl es einige Aufgaben erledigte. Bis ich verstand, dass es ein Fehler ist, sich auf Knoten zu verlassen. Erstens aufgrund der eingeschränkten Funktionalität API, zweitens wegen der Geschwindigkeit (zu jener Zeit waren die Knoten sehr langsam).

Ich nahm zwei parallele Projekte in Angriff. Eins – einen Blockchain-Explorer zu erstellen, der schnell und völlig unabhängig von der API der Knoten ist. Das andere – alle Funktionen zur Arbeit mit der Waves Platform an einem Ort zu vereinen. So entstanden die Projekte w8io и WavesKit.

Der erste Schritt hinter die Kulissen der Waves Blockchain war der Explorer w8io. Es war nicht einfach, aber es gelang mir, eine unabhängige Berechnung aller Salden zu schreiben und sogar einen Fehler in den Berechnungen auf den Originalknoten zu finden (Bug-Bounty-Programm Übrigens funktioniert es bei ihnen, sie bezahlen für gefundene Fehler). Sie können die Funktionen des Browsers w8io in diesem Thema genauer studieren: 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 logiched zu Ende ging und ich mit der Erstellung des SDK begann, bestätigten sich die Zweifel. Ich konnte einige Funktionen, darunter die wichtigsten, kryptographischen Funktionen, nirgendwo finden. Also begann ich mit der Erstellung meiner eigenen Bausteine für das Fundament. So entstanden: ABCode zum Codieren in base58 (eigentlich zum Codieren eines beliebigen Alphabets in jede Form), Curve25519 zum Erstellen und Überprüfen kompatibler Signaturen (mit Varianten auf Steroiden), Blake2b zum Berechnen eines der Hashes (der erst ab PHP 7.2 verfügbar war) usw.

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

Nach ein paar Monaten sah WavesKit das Licht der Welt, trat aus Beta-Version und ist nun bereit, mit allen Standardfunktionen der Waves-Plattform zu arbeiten. Alle verfügbaren in dem Hauptnetz Transaktionen können einfach erstellt, signiert und von einer einzigen Bibliothek gesendet werden, die mit allen 64-Bit-Versionen von PHP ab 5.6 kompatibel ist.

Wir integrieren WavesKit in unser 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 die Seed-Phrase, aus der automatisch die Schlüssel und die Kontoadresse basierend auf dem öffentlichen Schlüssel berechnet werden. Danach erstellen wir eine Überweisungstransaktion von 0,00000001 Waves von der automatisch über die Seed-Phrase berechneten Adresse zur Adresse des Alias "test", signieren sie mit dem privaten Schlüssel und senden sie ins Netzwerk. Anschließend stellen wir sicher, dass die Transaktion erfolgreich vom Netzwerk bestätigt wurde.

Die Arbeit mit Transaktionen konzentriert sich auf Funktionen, die mit tx beginnen. Um ein besseres Verständnis für die Transaktionsbearbeitung zu entwickeln, können Sie die WavesKit-Dokumentation oder direkt die anschaulichen Beispiele in den Kontinuierlichen Integrations-Tests.

Da sich WavesKit unter realen Bedingungen entwickelt hat, sind bereits fortschrittliche Funktionen vorhanden. Die erste Killer-Funktion ist die Funktion ensure, die sicherstellt, dass das erforderliche Vertrauensniveau erreicht wird, um zu garantieren, dass die Transaktion nicht verloren gegangen ist, sondern bestätigt wurde und die notwendige Anzahl von Bestätigungen im Netzwerk erreicht hat.

Ein weiteres äußerst effektives Verfahren — wie WavesKit mit Knoten kommuniziert. In einer geschützten Umgebung arbeitet das Framework nur mit dem Hauptknoten und hält eine ständige Verbindung zu diesem, kann aber im Fehlerfall automatisch auf Backup-Knoten umschalten. Wenn Sie ein Array von Backup-Knoten einrichten, können Sie die Funktion setBestNode aufrufen, um den besten Knoten als Hauptknoten basierend auf der maximalen aktuellen Höhe und der Antwortgeschwindigkeit zu bestimmen. Fügen Sie jetzt noch einen internen Anfrage-Cache hinzu und spüren Sie die Fürsorge sowohl für die Benutzer als auch für die Knotenbesitzer.

Einer der neuesten fortschrittlichen Mechanismen ist die Funktion txMonitor. Sie wurde notwendig, um in Echtzeit auf eingehende Transaktionen zu reagieren. Diese Funktion löst alle Herausforderungen bei der Verarbeitung von Transaktionen in der Blockchain vollständig. Kein Stress mehr, Sie setzen einfach Ihre Callback-Funktion mit den gewünschten Optionen und warten auf neue Transaktionen, die Ihre Prozesse auslösen. Zum Beispiel, ein weiteres meiner Projekte VECRO ist komplett um diese Funktion herum aufgebaut, Sie können in Ruhe sehen, wie sie direkt im Projektkode.

funktioniert. Ich mag Open Source, es ist eines 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 zu den WavesKit.

Quelle: habr.com

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster