WavesKit - Framework PHP per lavorare con la blockchain Waves

Мне нравится PHP per la velocità di sviluppo e l'eccellente portabilità. È molto bello avere sempre uno strumento in tasca, pronto a risolvere i problemi.

È stato un vero peccato quando, quando ho conosciuto la blockchain domestica Piattaforma di onde non aveva un SDK PHP già pronto nel suo arsenale. Beh, dovevo scriverlo.

All'inizio dovevo usare nodi firmare le transazioni. Quindi per gestire tre indirizzi è stato necessario lanciare tre nodi... Uno spettacolo pietoso, anche se ha risolto alcuni problemi. Fino a quando non si è capito che fare affidamento sui nodi era un vicolo cieco. Innanzitutto, a causa della funzionalità limitata API, in secondo luogo, a causa della velocità (i nodi erano molto lenti a quei tempi).

Ho iniziato due lavori paralleli. Uno è creare un blockchain explorer che sarà veloce e completamente indipendente dall'API del nodo. Il secondo è raccogliere tutte le funzioni per lavorare con la Waves Platform in un unico posto. Ecco come sono apparsi i progetti w8io и WavesKit.

Il primo passo dietro le quinte della blockchain Waves è stato browser w8io. Non è stato facile, ma siamo comunque riusciti a scrivere un calcolo indipendente di tutti i saldi e persino a trovare un errore nei calcoli sui nodi originali (programma bug-bounty A proposito, per loro funziona, pagano per gli errori trovati). Puoi saperne di più sulla funzionalità del browser w8io in questo argomento: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Mentre lavoravo su w8io avevo già dei dubbi, ma quando il lavoro è arrivato alla sua conclusione logica e ho iniziato a creare l'SDK, i miei dubbi sono stati confermati. Alcune funzioni non sono riuscita a trovarle da nessuna parte, comprese quelle più importanti, quelle crittografiche. Poi ho iniziato creando i miei mattoni per la fondazione. Ecco come sono nati: Codice ABC per codificare in base58 (in realtà per codificare qualsiasi alfabeto in qualsiasi), Curve25519 per creare e verificare firme compatibili (con opzioni sugli steroidi), Blake2b per calcolare uno degli hash (disponibile solo a partire da PHP 7.2), ecc.

È qui che devo ringraziare Inala Kardanova per alcuni preziosi consigli che mi hanno indicato la direzione compositore invece dei file include che mi sono familiari, ma obsoleti.

Dopo un paio di mesi WavesKit è stato rilasciato, venne fuori versioni beta ed è ora pronto per funzionare con tutte le funzionalità standard della piattaforma Waves. Tutto disponibile in rete principale le transazioni possono essere facilmente create, firmate e inviate utilizzando un solo pacchetto, in esecuzione su tutte le versioni a 64 bit di PHP dalla 5.6 inclusa.

Colleghiamo WavesKit al nostro progetto:

composer require deemru/waveskit

Noi usiamo:

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 viene eseguito sulla testnet "T". Installiamo una frase seed da cui le chiavi e l'indirizzo dell'account vengono calcolati automaticamente in base alla chiave pubblica. Successivamente, creiamo una transazione di trasferimento 0.00000001 Waves dall'indirizzo calcolato automaticamente utilizzando la frase seed all'indirizzo alias “test”, la trasferiamo per essere firmata con una chiave privata e la inviamo alla rete. Successivamente, ci assicuriamo che la transazione sia confermata con successo dalla rete.

Il lavoro con le transazioni è concentrato in funzioni che iniziano con tx. Per una migliore comprensione del lavoro con le transazioni, puoi studiare Documentazione di WavesKit o passare immediatamente agli esempi illustrativi in test di integrazione continua.

Poiché WavesKit è stato sviluppato per l'uso nel mondo reale, dispone già di funzionalità avanzate. La prima caratteristica killer è garantire la funzione, che controlla il raggiungimento del livello di confidenza richiesto che la transazione non sia andata persa, ma, al contrario, sia stata confermata e abbia raggiunto il numero richiesto di conferme nella rete.

Un altro meccanismo a prova di proiettile è il modo in cui WavesKit comunica con i nodi. In condizioni di serra, il framework funziona solo con il nodo principale, mantenendo una connessione costante con esso, ma in caso di errori può passare automaticamente a quelli di backup. Se imposti un array di nodi di backup, puoi chiamare la funzione setBestNode per determinare il nodo migliore come principale in base al valore massimo dell'altezza corrente e alla velocità di risposta. Ora aggiungi a questo una cache di query interna e sentiti curato sia per gli utenti che per i proprietari dei nodi.

Uno degli ultimi meccanismi avanzati è la funzione txMonitor. È apparso a causa della necessità di rispondere alle transazioni in entrata in tempo reale. Questa funzione risolve completamente tutte le sfumature associate all'elaborazione delle transazioni nella blockchain. Niente più problemi, basta impostare la funzione di richiamata con le opzioni desiderate e attendere che nuove transazioni avviino i processi. Ad esempio, un altro mio progetto VECRO completamente costruito attorno a questa funzione, puoi facilmente studiare direttamente come funziona nel codice del progetto.

Adoro l'open source, è uno dei più grandi successi dell'umanità. Dato che sono l'unico sviluppatore e ho raggiunto uno stato in cui tutte le mie esigenze sono risolte, ti invito a utilizzare e contribuire WavesKit.

Fonte: habr.com

Aggiungi un commento