WavesKit — PHP framework pre prácu s blockchainom Waves

Páči sa mi PHP za rýchlosť vývoja a vynikajúcu prenosnosť. Je to veľmi dobré, keď máte vrecku vždy nástroj pripravený na riešenie úloh.

Bolo dosť mrzuté, keď pri zoznamovaní sa s domácim blockchainom Waves Platform v jeho arzenále neexistoval žiadny hotový SDK pre PHP. Nuž, musel som ho napísať.

Na začiatku som musel použiť uzly na podpisovanie transakcií. Takže na správu troch adries som musel spustiť tri uzly… Bolo to smutné divadlo, hoci to riešilo niektoré úlohy. Až kým neprišlo pochopenie, že spoliehať sa na uzly je slepá ulička. Po prvé, z dôvodu obmedzenej funkčnosti API, po druhé, kvôli rýchlosti (vtedy boli uzly veľmi pomalé).

Začal som dve paralelné práce. Jedna bola vytvoriť blockchainový prehliadač, ktorý bude rýchly a úplne nezávislý od API uzlov. Druhá bola zhromaždiť všetky funkcie pre prácu s Waves Platform na jednom mieste. Tak sa objavili projekty w8io a WavesKit.

Prvým krokom za kulisy blockchainu Waves sa stal prehliadač w8io. Nebolo to jednoduché, ale aj tak sa mi podarilo napísať nezávislý výpočet všetkých zostatkov a dokonca nájsť chybu vo výpočtoch na originálnych uzloch (program bug-bounty , mimochodom, u nich funguje, za nájdené chyby platia). Môžete podrobne preskúmať funkčnosť prehliadača w8io v tejto téme: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Počas práce na w8io som mal už pochybnosti, ale keď sa práca priblížila k logickému záveru a začal som s vytváraním SDK, pochybnosti sa potvrdili. Nenašiel som niektoré funkcie nikde, vrátane tých najdôležitejších, kryptografických. Tak som začal s vytvorením svojich prvkov na základy. Tak vznikli: ABCode na kódovanie do base58 (v skutočnosti na kódovanie akéhokoľvek abecedy do akéhokoľvek), Curve25519 na vytvorenie a kontrolu kompatibilných podpisov (s variantmi na steroidy), Blake2b na výpočet jedného z hashov (ktorý bol k dispozícii len od PHP 7.2) a tak ďalej.

Tu by som mal poďakovať Inalovi Kardanovovi za niekoľko cenných rád, ktoré ma nasmerovali k composer namiesto pre mňa zvyčajných, ale zastaraných include súborov.

Po pár mesiacoch WavesKit uzrel svetlo sveta, vyšiel z beta verzie a teraz je pripravený na prácu so všetkým štandardným funkčným vybavením platformy Waves. Všetky dostupné v hlavnej sieti Transakcie môžu byť jednoducho vytvorené, podpísané a odoslané jediným balíkom, ktorý pracuje vo všetkých 64-bitových verziách PHP od verzie 5.6 a vyššie.

Pripojte WavesKit do svojho projektu:

composer require deemru/waveskit

Používame:

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

V príklade vyššie vytvárame objekt WavesKit, ktorý pracuje v testovacej sieti „T“. Nastavujeme seed frázu, z ktorej sa automaticky vypočítajú kľúče a adresa účtu na základe verejného kľúča. Potom vytvárame transakciu prevodu 0.00000001 Waves z automaticky vypočítanej adresy na adresu aliasu „test“, posielame ju na podpis súkromným kľúčom a odosielame do siete. Následne sa ubezpečíme, že transakcia bola úspešne potvrdená sieťou.

Práca s transakciami je sústredená v funkciách začínajúcich na tx. Pre lepšie pochopenie práce s transakciami si môžete študovať dokumentáciu WavesKit alebo sa priamo obrátiť na názorné príklady v testoch kontinuálnej integrácie.

Keďže WavesKit sa vyvíjal v podmienkach reálneho použitia, už má pokročilé funkcie. Prvá killer funkcia — to je funkcia ensure, ktorá kontroluje dosiahnutie požadovanej úrovne dôvery, že transakcia sa nestratila, ale naopak, bola potvrdená a dosiahla potrebný počet potvrdení v sieti.

Ďalší nepriestrelný mechanizmus — ako WavesKit komunikuje s uzlami. V optimálnych podmienkach rámec pracuje iba s hlavnou uzlom, udržujúc s ňou trvalé spojenie, ale pri chybách sa môže automaticky prepínať na záložné. Ak nastavíte pole záložných uzlov, môžete volať funkciu setBestNode pre určenie najlepšej uzlu ako hlavnej na základe maximálnej hodnoty aktuálnej výšky a rýchlosti odpovede. Teraz pridajte k tomu vnútornú cache požiadaviek a postaráte sa o používateľov aj vlastníkov uzlov.

Jedným z posledných pokročilých mechanizmov — funkcia txMonitor. Prišla ako reakcia na potrebu reagovať na prichádzajúce transakcie v reálnom čase. Táto funkcia úplne rieši všetky aspekty súvisiace s spracovaním transakcií v blockchaine. Žiadna bolesť, jednoducho nastavíte svoju callback funkciu s požadovanými možnosťami a čakáte na nové transakcie, ktoré spustia vaše procesy. Napríklad, ešte jeden môj projekt VECRO úplne postavený okolo tejto funkcie, môžete si v pokoji preskúmať, ako funguje priamo v kóde projektu.

Páči sa mi open source, to je jedno z najväčších dosiahnutí ľudstva. Keďže som jediný vývojár a dosiahol som stav, v ktorom sú všetky moje potreby splnené, pozývam vás, aby ste používali a prispievali k WavesKit.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster