WavesKit è un 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 disposizione uno strumento pronto per risolvere i problemi.

È stato piuttosto deludente quando, durante l'incontro con il blockchain nazionale Waves Platform non avevo un SDK pronto per PHP. Dovetti 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 deplorevole, anche se risolveva alcuni problemi. Fino a quando non ho capito che fare affidamento sui nodi era un vicolo cieco. In primo luogo, a causa delle limitazioni funzionali API, in secondo luogo, a causa della velocità (ai tempi i nodi erano molto lenti).

Ho iniziato due lavori paralleli. Uno era creare un esploratore blockchain che fosse veloce e completamente indipendente dalle API dei nodi. L'altro era raccogliere tutte le funzioni per lavorare con Waves Platform in un unico posto. Così sono nati i progetti w8io e WavesKit.

Il primo passo dietro le quinte del blockchain di Waves è stato l'esploratore w8io. Non è stato semplice, ma alla fine sono riuscito a scrivere un calcolo indipendente di tutti i saldi e persino a trovare un errore nei calcoli sui nodi originali (programma bug-bounty tra l'altro, funziona, pagano per gli errori trovati). Puoi approfondire il funzionamento del browser w8io in questo thread: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Durante il lavoro su w8io ho avuto 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 sono riuscito a trovare alcune funzioni, incluse le più importanti, quelle crittografiche. Così ho iniziato a creare i miei mattoni per le fondamenta. E così sono nati: ABCode per la codifica in base58 (in realtà per codificare qualsiasi alfabeto in qualsiasi), Curve25519 per creare e verificare firme compatibili (con varianti potenziate), Blake2b per calcolare uno degli hash (che era disponibile solo a partire da PHP 7.2) e così via.

Qui devo ringraziare Inal Kardanova per alcuni preziosi consigli che mi hanno indirizzato verso composer invece dei file include a cui ero abituato, ma obsoleti.

Dopo qualche mese WavesKit ha visto la luce, è uscito dalla beta versione ed è ora pronto per lavorare con tutta la funzionalità standard della piattaforma Waves. Tutte le disponibili nella rete principale Le transazioni possono essere facilmente create, firmate e inviate utilizzando un unico pacchetto, compatibile con tutte le versioni a 64 bit di PHP dalla 5.6 in poi.

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, creiamo un oggetto WavesKit che opera nella testnet 'T'. Impostiamo una seed phrase 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 tramite la seed phrase all'indirizzo 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.

Il lavoro con le transazioni è concentrato nelle funzioni che iniziano con tx. Per una migliore comprensione del lavoro con le transazioni, puoi consultare la documentazione di WavesKit o passare direttamente ad esempi pratici nei test di integrazione continua.

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

Un altro meccanismo a prova di proiettile è il modo in cui WavesKit comunica con i nodi. In condizioni controllate, il framework lavora solo con il nodo principale, mantenendo una connessione costante con esso, ma in caso di errori può automaticamente passare a nodi di riserva. Se stai configurando un insieme 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 velocità di risposta. Ora aggiungi a questo una cache interna delle richieste e sentirai la cura sia per gli utenti che per i proprietari dei nodi.

Uno degli ultimi meccanismi avanzati è la funzione txMonitor. È emersa dalla necessità di rispondere alle transazioni in tempo reale. Questa funzione risolve completamente tutte le questioni legate all'elaborazione delle transazioni nella blockchain. Niente più problemi, basta impostare la propria funzione di callback con le opzioni desiderate e attendere le nuove transazioni che attiveranno i vostri processi. Ad esempio, un altro mio progetto VECRO è completamente costruito attorno a questa funzione, puoi facilmente esplorare come funziona direttamente nel codice del progetto.

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

Fonte: habr.com

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