WavesKit - PHP framework za rad s Waves blockchainom

Sviđa mi se PHP za brzinu razvoja i izvrsnu prenosivost. Jako je dobro kada u džepu uvijek imate alat spreman za rješavanje problema.

Bila je prava šteta kada se, prilikom upoznavanja s domaćim blockchainom Platforma valova u svom arsenalu nije imao gotov PHP SDK. Pa, morao sam to napisati.

U početku sam morao koristiti čvorovi potpisivati ​​transakcije. Dakle, za upravljanje s tri adrese bilo je potrebno pokrenuti tri čvora... Bio je to jadan prizor, iako je riješio neke probleme. Sve dok nije došlo do razumijevanja da je oslanjanje na čvorove slijepa ulica. Prvo, zbog ograničene funkcionalnosti API, drugo, zbog brzine (čvorovi su tada bili vrlo spori).

Započeo sam dva paralelna posla. Jedan je napraviti blockchain explorer koji će biti brz i potpuno neovisan o node API-ju. Drugi je prikupljanje svih funkcija za rad s Waves Platformom na jednom mjestu. Tako su se pojavili projekti w8io и WavesKit.

Prvi korak iza kulisa Waves blockchaina bio je w8io preglednik. Nije bilo lako, ali ipak smo uspjeli napisati nezavisan izračun svih stanja i čak pronaći grešku u izračunima na izvornim čvorovima (bug-bounty program Usput, radi za njih, oni plaćaju za pronađene greške). Više o funkcionalnosti preglednika w8io možete saznati u ovoj temi: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Dok sam radio na w8io, već sam sumnjao, ali kada je posao došao svom logičnom kraju i kada sam krenuo u izradu SDK-a, moje sumnje su se potvrdile. Nigdje nisam uspio pronaći neke funkcije, uključujući i one najvažnije, kriptografske. Zatim sam počeo izrađivati ​​vlastite cigle za temelj. Ovako su rođeni: ABCod kodirati u base58 (zapravo kodirati bilo koju abecedu u bilo koju), Curve25519 za stvaranje i provjeru kompatibilnih potpisa (s opcijama na steroidima), Blake2b za izračunavanje jednog od hashova (koji je bio dostupan tek od PHP 7.2), itd.

Ovdje moram zahvaliti Inala Kardanova za neke vrijedne savjete koji su me uputili u smjeru kompozitor umjesto uključenih datoteka koje su mi poznate, ali su zastarjele.

Nakon par mjeseci Pušten je WavesKit, izašlo beta verzije i sada je spreman za rad sa svim standardnim funkcionalnostima Waves platforme. Sve dostupno u glavna mreža transakcije se mogu jednostavno kreirati, potpisati i poslati pomoću samo jednog paketa, koji radi na svim 64-bitnim verzijama PHP-a od 5.6 uključivo.

Povezujemo WavesKit s našim projektom:

composer require deemru/waveskit

Koristimo:

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

U gornjem primjeru stvaramo WavesKit objekt koji radi na "T" testnetu. Instaliramo početnu frazu iz koje se ključevi i adresa računa automatski izračunavaju na temelju javnog ključa. Zatim kreiramo transakciju prijenosa 0.00000001 Waves s adrese koja je automatski izračunata korištenjem početne fraze na alias adresu "test", prenosimo je na potpisivanje privatnim ključem i šaljemo na mrežu. Nakon toga osiguravamo da je mreža uspješno potvrdila transakciju.

Rad s transakcijama koncentriran je u funkcije koje počinju s tx. Za bolje razumijevanje rada s transakcijama, možete proučiti WavesKit dokumentacija ili odmah prijeći na ilustrativne primjere u kontinuirani integracijski testovi.

Budući da je WavesKit razvijen za upotrebu u stvarnom svijetu, već ima napredne značajke. Prva ubojita značajka je osigurati funkciju, koji kontrolira postizanje potrebne razine povjerenja da transakcija nije izgubljena, već je, naprotiv, potvrđena i dosegla potreban broj potvrda u mreži.

Drugi neprobojni mehanizam je način na koji WavesKit komunicira s čvorovima. U uvjetima staklenika, okvir radi samo s glavnim čvorom, održavajući stalnu vezu s njim, ali u slučaju pogrešaka može se automatski prebaciti na rezervne. Ako postavite niz rezervnih čvorova, možete pozvati funkciju postaviNajboljiČvor odrediti najbolji čvor kao glavni na temelju maksimalne vrijednosti trenutne visine i brzine odziva. Sada ovome dodajte internu predmemoriju upita i osjetite brigu za korisnike i vlasnike čvorova.

Jedan od najnovijih naprednih mehanizama je funkcija txMonitor. Pojavio se zbog potrebe da se odgovori na dolazne transakcije u stvarnom vremenu. Ova funkcija u potpunosti rješava sve nijanse povezane s obradom transakcija u blockchainu. Nema više boli, samo postavite svoju funkciju povratnog poziva sa željenim opcijama i pričekajte nove transakcije za pokretanje vaših procesa. Na primjer, još jedan moj projekt VECRO potpuno izgrađen oko ove funkcije, možete jednostavno proučiti kako izravno radi u kodu projekta.

Volim open source, to je jedno od najvećih dostignuća čovječanstva. Budući da sam jedini programer i da sam dostigao stanje u kojem su sve moje potrebe riješene, pozivam vas da koristite i doprinesete WavesKit.

Izvor: www.habr.com

Dodajte komentar