WavesKit - PHP framework pre prácu s Waves blockchainom

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

Bola to celkom škoda, keď som sa zoznámil s domácim blockchainom Platforma Waves nemal vo svojom arzenáli hotové PHP SDK. No musel som to napísať.

Najprv som musel použiť uzly podpisovať transakcie. Takže na spravovanie troch adries bolo potrebné spustiť tri uzly... Bol to žalostný pohľad, aj keď niektoré problémy vyriešil. Až kým neprišlo pochopenie, že spoliehanie sa na uzly je slepá ulička. Po prvé, kvôli obmedzenej funkčnosti API, po druhé, kvôli rýchlosti (uzly boli v tých časoch veľmi pomalé).

Nastúpil som do dvoch paralelných zamestnaní. Jedným z nich je vytvoriť blockchainový prieskumník, ktorý bude rýchly a úplne nezávislý od API uzla. Druhým je zhromaždenie všetkých funkcií pre prácu s platformou Waves na jednom mieste. Takto sa objavili projekty w8io и WavesKit.

Prvým krokom v zákulisí blockchainu Waves bol prehliadač w8io. Nebolo to jednoduché, ale aj tak sa nám podarilo napísať nezávislý výpočet všetkých zostatkov a dokonca nájsť chybu vo výpočtoch na pôvodných uzloch (bug-bounty program Mimochodom, funguje im to, platia za nájdené chyby). Viac o funkcionalite prehliadača w8io sa dozviete v tejto téme: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Už pri práci na w8io som mal pochybnosti, no keď sa práca logicky skončila a začal som vytvárať SDK, moje pochybnosti sa potvrdili. Nikde som nenašiel niektoré funkcie, vrátane tých najdôležitejších, kryptografických. Potom som začal výrobou vlastných tehál na základ. Takto sa narodili: ABCode zakódovať do base58 (v skutočnosti zakódovať ľubovoľnú abecedu do ľubovoľnej), Curve25519 na vytváranie a overovanie kompatibilných podpisov (s možnosťami na steroidoch), Blake2b na výpočet jedného z hashov (ktorý bol dostupný až od PHP 7.2) atď.

Toto je miesto, kde musím poďakovať Inala Kardanová za cenné rady, ktoré ma nasmerovali skladateľ namiesto zahrnutých súborov, ktoré sú mi známe, ale zastarané.

Po par mesiacoch Bol vydaný WavesKit, vyšiel beta verzie a je teraz pripravený pracovať so všetkými štandardnými funkciami platformy Waves. Všetky dostupné v hlavná sieť transakcie je možné jednoducho vytvoriť, podpísať a odoslať pomocou jediného balíka, ktorý beží na všetkých 64-bitových verziách PHP od verzie 5.6 vrátane.

Pripájame WavesKit k nášmu 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 );

Vo vyššie uvedenom príklade vytvoríme objekt WavesKit, ktorý beží na testovacej sieti „T“. Nainštalujeme počiatočnú frázu, z ktorej sa kľúče a adresa účtu automaticky vypočítajú na základe verejného kľúča. Ďalej vytvoríme prenosovú transakciu 0.00000001 Waves z adresy automaticky vypočítanej pomocou počiatočnej frázy na alias adresu „test“, prenesieme ju na podpis súkromným kľúčom a odošleme do siete. Potom sa ubezpečíme, že sieť úspešne potvrdila transakciu.

Práca s transakciami je sústredená v funkcie začínajúce tx. Pre lepšie pochopenie práce s transakciami si môžete naštudovať Dokumentácia WavesKit alebo sa rovno obráť na názorné príklady v priebežné integračné testy.

Keďže WavesKit bol vyvinutý v reálnom svete, má už pokročilé funkcie. Prvá zabijácka vlastnosť je zabezpečiť funkciu, ktorá kontroluje dosiahnutie požadovanej úrovne istoty, že transakcia sa nestratila, ale naopak bola potvrdená a dosiahla požadovaný počet potvrdení v sieti.

Ďalším nepriestrelným mechanizmom je spôsob, akým WavesKit komunikuje s uzlami. V skleníkových podmienkach framework pracuje iba s hlavným uzlom, udržiava s ním neustále spojenie, no v prípade chýb sa môže automaticky prepnúť na záložné. Ak nastavíte pole záložných uzlov, môžete funkciu zavolať setBestNode určiť najlepší uzol ako hlavný na základe maximálnej hodnoty aktuálnej výšky a rýchlosti odozvy. Teraz k tomu pridajte internú vyrovnávaciu pamäť dotazov a cíťte sa postarané o používateľov aj vlastníkov uzlov.

Jedným z najnovších pokročilých mechanizmov je funkcia txMonitor. Objavil sa kvôli potrebe reagovať na prichádzajúce transakcie v reálnom čase. Táto funkcia úplne rieši všetky nuansy spojené so spracovaním transakcií v blockchaine. Už žiadna bolesť, stačí nastaviť funkciu spätného volania s požadovanými možnosťami a čakať na nové transakcie, ktoré spustia vaše procesy. Napríklad ďalší môj projekt VECRO úplne postavená na tejto funkcii, môžete si jednoducho priamo preštudovať, ako funguje v kóde projektu.

Milujem open source, je to jeden z najväčších úspechov ľudstva. Keďže som jediný vývojár a dosiahol som stav, keď sú všetky moje potreby vyriešené, pozývam vás, aby ste ich používali a prispievali WavesKit.

Zdroj: hab.com

Pridať komentár