WavesKit — framework PHP per lavorare con la blockchain Waves

Mi piace PHP per la velocità di sviluppo e l'ottima portabilità. È davvero utile avere sempre a portata di mano uno strumento pronto per risolvere i problemi.

È stato piuttosto deludente quando, iniziando a conoscere la blockchain nazionale Waves Platform nel suo arsenale non c'era un SDK pronto per PHP. Beh, ho dovuto scriverlo.

Inizialmente dovevo usare (nodes). La configurazione per i nodi è scritta per firmare le transazioni. Così, per gestire tre indirizzi dovevo avviare tre nodi... Era uno spettacolo triste, anche se risolveva alcuni problemi. Fino a quando non ho capito che fare affidamento sui nodi è un vicolo cieco. In primo luogo, a causa delle funzionalità limitate API, in secondo luogo, a causa della velocità (in quei giorni i nodi erano molto lenti).

Ho iniziato due lavori paralleli. Uno - creare un esploratore blockchain che fosse veloce e completamente indipendente dall'API dei nodi. Il secondo - raccogliere tutte le funzionalità per lavorare con la Waves Platform in un unico posto. Da lì sono nati i progetti w8io e WavesKit.

Il primo passo dietro le quinte della blockchain Waves è stato l'esploratore w8io. Non è stato facile, ma sono comunque riuscito a scrivere un calcolo indipendente di tutti i saldi e persino a trovare un errore nei calcoli sui nodi originali (il programma bug-bounty peraltro funziona lì, pagano per gli errori trovati). Puoi esplorare più a fondo le funzionalità dell'esploratore w8io in questo tema: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Durante il lavoro su w8io avevo già dei dubbi, ma quando il lavoro è giunto a una conclusione logica e ho iniziato a creare l'SDK, i dubbi si sono confermati. Non riuscivo a trovare da nessuna parte alcune funzionalità, comprese quelle più importanti, crittografiche. Allora ho iniziato a creare i miei mattoni per le fondamenta. Così sono nati: ABCode per la codifica in base58 (in realtà per codificare qualsiasi alfabeto in qualsiasi) Curve25519 per la creazione e verifica di firme compatibili (con varianti sotto steroidi), Blake2b per calcolare uno degli hash (che era disponibile solo a partire da PHP 7.2) e così via.

Qui devo ringraziare Inal Kardanov per alcuni preziosi consigli che mi hanno indirizzato verso composer invece dei file include che mi erano familiari, ma ormai obsoleti.

Dopo un paio di mesi WavesKit ha visto la luce, è uscito da della versione beta ed è ora pronto a lavorare con tutte le funzionalità standard della piattaforma Waves. Tutto ciò che è disponibile nella rete principale Le transazioni possono essere facilmente create, firmate e inviate da un singolo pacchetto che funziona su tutte le versioni PHP a 64 bit a partire dalla 5.6 inclusa.

Colleghiamo WavesKit al nostro progetto:

composer require deemru/waveskit

Utilizziamo:

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 );

Nell'esempio sopra abbiamo creato un oggetto WavesKit che opera nella rete di test "T". Impostiamo la frase seed, da cui vengono automaticamente calcolate le chiavi e l'indirizzo dell'account basato sulla chiave pubblica. Successivamente, creiamo una transazione di trasferimento di 0.00000001 Waves dall'indirizzo calcolato automaticamente dalla frase seed all'indirizzo dell'alias "test", la firmiamo con la chiave privata e la inviamo nella rete. Dopo di che verifichiamo che la transazione sia stata confermata con successo dalla rete.

Lavorare con le transazioni è incentrato su funzioni che iniziano con tx. Per una migliore comprensione del funzionamento delle transazioni, puoi esaminare la documentazione di WavesKit o passare direttamente a esempi pratici in test di integrazione continua.

Poiché WavesKit si è sviluppato in condizioni di utilizzo reale, ha già acquisito funzionalità avanzate. La prima killer feature è la funzione ensure, che controlla il raggiungimento del livello di fiducia necessario, assicurandosi che la transazione non sia andata persa, ma sia stata confermata e abbia raggiunto il numero necessario di conferme nella rete.

Un altro meccanismo a prova di proiettile è come WavesKit comunica con i nodi. In condizioni ottimali, il framework lavora solo con un nodo principale, mantenendo una connessione costante, ma in caso di errori può commutare automaticamente su nodi di riserva. Se imposti un array di nodi di riserva, puoi chiamare la funzione setBestNode per determinare il miglior nodo come principale in base al valore massimo dell'attuale altezza e alla velocità di risposta. Ora aggiungi a questo una cache interna delle richieste e senti la cura sia per gli utenti sia per i proprietari dei nodi.

Uno degli ultimi meccanismi avanzati è la funzione txMonitor. È emersa la necessità di reagire alle transazioni in tempo reale. Questa funzione affronta completamente tutte le sfide legate all'elaborazione delle transazioni nella blockchain. Nessun dolore, basta impostare la tua funzione di callback con le opzioni desiderate e aspettare nuove transazioni che attiveranno i tuoi processi. Ad esempio, un altro mio progetto VECRO è interamente costruito attorno a questa funzione, puoi tranquillamente studiare come funziona direttamente nel codice del progetto.

Mi piace l'open source, è una delle più grandi conquiste dell'umanità. Essendo l'unico sviluppatore e avendo raggiunto uno stato in cui tutte le mie esigenze sono soddisfatte, ti invito a utilizzare e contribuire a WavesKit.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster