WavesKit — PHP keretrendszer a Waves blokklánccal való munkához

Tetszik PHP a fejlesztési sebesség és a kiváló hordozhatóság miatt. Nagyon jó, amikor a zsebünkben mindig ott van egy eszköz, amely készen áll a feladatok megoldására.

Meglehetősen csalódott voltam, amikor megismertem a hazai blockchain-t. Waves Platform a repertoárjában nem volt készen álló SDK PHP-ra. Hát, meg kellett írnom.

Kezdetben használnom kellett nódok a tranzakciók aláírásához. Így három cím kezelése érdekében három node-ot kellett futtatnom... Ez szánalmas látvány volt, bár egyes feladatokat megoldott. Egészen addig, amíg nem jöttem rá, hogy a node-okra támaszkodás zsákutca. Először is, a korlátozott funkcionalitás miatt, API, másodszor pedig a sebesség miatt (akkoriban a node-ok nagyon lassúak voltak).

Két párhuzamos munkát kezdtem. Az egyik - egy blockchain böngésző készítése, amely gyors és teljesen független az API node-októl. A másik - minden funkció összegyűjtése a Waves Platform működéséhez egy helyen. Így születtek a projektek: w8io és WavesKit.

Az első lépés a Waves blockchain kulisszái mögé a w8io böngésző volt. Nem volt egyszerű, de végül sikerült egy független számítást végezni az összes egyenlegről, és még hibát is találtam az eredeti node-okon végzett számításokban (a bug-bounty program amely mellesleg működik náluk, kifizetnek a megtalált hibákért). További részleteket megtalálhat a w8io böngésző funkcióiról ebben a témában: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

A w8io-n végzett munka során már voltak kétségeim, de amikor a munka logikai végére érkezett, és elkezdtem az SDK elkészítését, a kétségek megerősítést nyertek. Sehol sem találtam meg bizonyos funkciókat, köztük a legfontosabbakat, a kriptográfiaiakat. Akkor kezdtem saját építőelemeket készíteni az alaphoz. Így születtek: ABCode base58 kódolásához (valójában bármely ábécé bármilyen kódolásához), Curve25519 a kompatibilis aláírások létrehozásához és ellenőrzéséhez (változatokkal szteroidon), Blake2b az egyik hash kiszámításához (amely csak a PHP 7.2-től volt elérhető) stb.

Itt szeretném megköszönni Inal Kardanovnak több értékes tanácsáért, amelyek az irányomba tereltek composer a számomra szokásos, de elavult include fájlok helyett.

Pár hónappal később a WavesKit fényt látott, megjelent béta verziók és most készen áll a Waves platform összes standard funkciójával való munkára. Minden elérhető a fő hálózaton A tranzakciók egyszerűen létrehozhatók, aláírhatók és küldhetők egyetlen csomag által, amely a PHP 5.6 és újabb 64-bites verzióin fut.

A WavesKit integrálása a projektbe:

composer require deemru/waveskit

Használat:

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

A fenti példában létrehozunk egy WavesKit objektumot, amely a "T" teszt hálózaton működik. Beállítjuk a seed frázist, amely alapján automatikusan kiszámításra kerülnek a kulcsok és a fiók címe az nyilvános kulcs alapján. Ezután létrehozunk egy 0.00000001 Waves átutalási tranzakciót a seed frázisból automatikusan kiszámított címről a "test" alias címére, aláírjuk a privát kulccsal és elküldjük a hálózatba. Ezt követően biztosítjuk, hogy a tranzakciót a hálózat sikeresen megerősítette.

A tranzakciókkal kapcsolatos tevékenységek a tx-el kezdődő funkciókban. A tranzakciók kezelésének jobb megértéséhez érdemes tanulmányozni a WavesKit dokumentációját vagy azonnal megtekinteni a szemléltető példákat a folyamatos integrációs tesztekben.

Mivel a WavesKit valódi felhasználásra fejlesztették, már vannak fejlett funkciói. Az első killer funkció a ensure funkció, amely ellenőrzi a szükséges bizalom szintjének elérését, így biztosítva, hogy a tranzakció ne vesszen el, hanem éppen ellenkezőleg, megerősítést nyert és megfelelő számú megerősítést kapott a hálózatban.

Egy másik golyóálló mechanizmus az, ahogyan a WavesKit kommunikál a node-okkal. Ideális körülmények között a keretrendszer csak a fő node-dal működik, állandó kapcsolatban tartva vele, de hibák esetén automatikusan átválthat a tartalékokra. Ha tartalék node-ok tömbjét állítja be, akkor meghívhatja a setBestNode funkciót a legjobb node meghatározására, mint fő, a jelenlegi magasság és válaszsebesség maximális értéke alapján. Most adja hozzá ehhez a belső kérés cache-t, és érezze a gondoskodást a felhasználók és a node-ok tulajdonosai iránt.

Az utolsó fejlett mechanizmusok egyike a txMonitor funkcióEz a funkció a valós idejű beérkező tranzakciókra való reagálás szükségességével jött létre. Ez a funkció teljes mértékben megoldja a blokklánc tranzakciók feldolgozásának minden részletét. Nincs több fájdalom, csak állítsa be a kívánt opciókkal a callback funkcióját, és várja az új tranzakciókat, amelyek elindítják a folyamatait. Például, egy másik projektem VECRO teljes mértékben erre a funkcióra épül, nyugodtan megismerheti, hogyan működik közvetlenül a projekt kódjában.

Szeretem az open source-t, ez az emberiség egyik legnagyobb vívmánya. Mivel egyedüli fejlesztő vagyok, és elértem azt az állapotot, hogy minden szükségem megoldódott, invitállak titeket, hogy használjátok és járuljatok hozzá WavesKit.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster