WavesKit - PHP Waves Blockchain Framework

Ich mag PHP wegen seiner Entwicklungsgeschwindigkeit und seiner hervorragenden Portabilität. Dies ist sehr gut, wenn immer ein Werkzeug zur Lösung von Problemen in der Tasche ist.


Es war ziemlich enttäuschend, als es beim Treffen mit der inländischen Waves Platform- Blockchain kein fertiges SDK für PHP in seinem Arsenal gab. Nun, ich musste es schreiben.


Zuerst musste ich Knoten verwenden , um Transaktionen zu signieren. Um drei Adressen zu verwalten, mussten drei Knoten gestartet werden ... Es war ein miserabler Anblick, obwohl er einige Probleme löste. Bis sich herausgestellt hat, dass das Verlassen auf Knoten eine Sackgasse ist. Erstens wegen der eingeschränkten Funktionalität der API und zweitens wegen der Geschwindigkeit (damals waren die Knoten sehr langsam).


Ich habe zwei parallele Arbeiten begonnen. Eine besteht darin, einen Blockchain-Browser zu erstellen, der schnell und völlig unabhängig von den API-Knoten ist. Die zweite besteht darin, alle Funktionen für die Arbeit mit der Waves-Plattform an einem Ort zu sammeln. Es gab also Projekte w8io und WavesKit .


Der erste Schritt hinter die Kulissen der Waves-Blockchain war der w8io-Browser . Es war nicht einfach, aber es war immer noch möglich, eine unabhängige Berechnung aller Salden zu schreiben und sogar einen Fehler in den Berechnungen auf den ursprünglichen Knoten zu finden ( das Bug-Bounty-Programm funktioniert übrigens für sie, sie zahlen für die gefundenen Fehler). Weitere Informationen zur Funktionalität des w8io-Browsers finden Sie in diesem Thema: 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 zu einem logischen Ende kam und ich mit der Erstellung des SDK begann, wurden die Zweifel bestätigt. Ich konnte nirgendwo einige Funktionen finden, einschließlich der wichtigsten, kryptografischen. Dann habe ich meine eigenen Steine ​​für das Fundament geschaffen. Sie wurden geboren: ABCode zum Codieren in base58 (eigentlich zum Codieren eines beliebigen Alphabets in einem beliebigen), Curve25519 zum Erstellen und Überprüfen kompatibler Signaturen (mit Optionen für Steroide ), Blake2b zum Berechnen eines der Hashes (der nur ab PHP 7.2 verfügbar war) usw.


Hier muss ich mich bei Inal Kardanov für einige wertvolle Tipps bedanken, die mich an den Komponisten gerichtet haben, anstatt an die üblichen, aber veralteten Include-Dateien.


Nach ein paar Monaten erblickte WavesKit das Licht , verließ die Beta-Version und ist nun bereit, mit allen Standardfunktionen der Waves-Plattform zu arbeiten. Alle im Hauptnetzwerk verfügbaren Transaktionen können einfach mit nur einem Paket erstellt, signiert und gesendet werden, das auf allen 64-Bit-Versionen von PHP ab Version 5.6 ausgeführt wird.


Wir verbinden WavesKit mit unserem Projekt:


composer require deemru/waveskit 

Wir verwenden:


 use deemru\WavesKit; $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 Testnetzwerk "T" ausgeführt wird. Legen Sie die Startphrase fest, aus der die Schlüssel und die Kontoadresse basierend auf dem öffentlichen Schlüssel automatisch berechnet werden. Als Nächstes erstellen wir die Übertragungstransaktion 0.00000001 Waves aus der automatisch anhand der Startphrase berechneten Adressphrase an die Aliasadresse "test", übertragen sie mit dem privaten Schlüssel an die Signatur und senden sie an das Netzwerk. Danach überprüfen wir, ob die Transaktion vom Netzwerk erfolgreich bestätigt wurde.


Die Arbeit mit Transaktionen konzentriert sich auf Funktionen, die mit tx beginnen . Zum besseren Verständnis der Arbeit mit Transaktionen können Sie die WavesKit-Dokumentation lesen oder sich in kontinuierlichen Integrationstests sofort visuellen Beispielen zuwenden.


Da sich WavesKit unter realen Bedingungen entwickelt hat, verfügt es bereits über erweiterte Funktionen. Die erste Killer-Funktion ist die Sicherstellungsfunktion , die das Erreichen des erforderlichen Vertrauensniveaus steuert, dass die Transaktion nicht verloren gegangen ist, sondern bestätigt wurde und die erforderliche Anzahl von Bestätigungen im Netzwerk erreicht hat.


Ein weiterer kugelsicherer Mechanismus ist die Kommunikation von WavesKit mit Knoten. Unter Gewächshausbedingungen arbeitet das Framework nur mit dem Hauptknoten und hält eine konstante Verbindung zu ihm aufrecht. Im Fehlerfall kann es jedoch automatisch zu Sicherungsknoten wechseln. Wenn Sie ein Array von Sicherungsknoten installieren, können Sie die Funktion setBestNode aufrufen , um den besten Knoten als Hauptknoten anhand des Maximalwerts der aktuellen Höhe und Antwortgeschwindigkeit zu ermitteln. Fügen Sie nun den internen Abfrage-Cache hinzu und achten Sie sowohl auf Benutzer als auch auf Knotenbesitzer.


Einer der neuesten fortschrittlichen Mechanismen ist die Funktion txMonitor . Sie erschien im Zusammenhang mit der Notwendigkeit, auf eingehende Transaktionen in Echtzeit zu reagieren. Diese Funktion löst alle Nuancen, die mit der Verarbeitung von Transaktionen in der Blockchain verbunden sind, vollständig. Keine Schmerzen mehr, installieren Sie einfach Ihre Rückruffunktion mit den gewünschten Optionen und warten Sie auf neue Transaktionen, die Ihre Prozesse starten. Zum Beispiel ist mein anderes VECRO- Projekt vollständig auf diese Funktion aufgebaut. Sie können leicht lernen, wie es direkt im Projektcode funktioniert.


Ich mag Open Source, dies ist eine der größten Errungenschaften der Menschheit. Da ich der einzige Entwickler bin und den Punkt erreicht habe, an dem alle meine Anforderungen erfüllt wurden , lade ich Sie ein, WavesKit zu verwenden und dazu beizutragen .

Source: https://habr.com/ru/post/de446110/


All Articles