WavesKit - PHP-ramme til at arbejde med Waves blockchain

Jeg kan godt lide PHP for hurtig udvikling og fremragende bærbarhed. Det er meget godt, når du altid har et værktøj klar til at løse problemer i lommen.

Det var en skam, når man stiftede bekendtskab med den indenlandske blockchain Bølger platform han havde ikke en færdiglavet PHP SDK i sit arsenal. Nå, jeg var nødt til at skrive det.

Først skulle jeg bruge noder at underskrive transaktioner. Så for at administrere tre adresser, skulle du køre tre noder ... Det var et ynkeligt syn, selvom det løste nogle problemer. Indtil forståelsen kom, at stole på noder er en blindgyde. For det første på grund af begrænset funktionalitet API, for det andet på grund af hastigheden (knudepunkter var meget langsomme i de dage).

Jeg startede to parallelle jobs. Den ene er at lave en blockchain explorer, der er hurtig og fuldstændig uafhængig af node API. Den anden er at samle alle funktionerne til at arbejde med Waves Platform på ét sted. Sådan opstod projekterne. w8io и WavesKit.

Det første skridt bag kulisserne i Waves blockchain var w8io browser. Det var ikke let, men det lykkedes alligevel at skrive en uafhængig beregning af alle saldi og endda finde en fejl i beregningerne på de oprindelige noder (bug bounty program Det virker i øvrigt for dem, de betaler for de fundne fejl). Du kan lære mere om funktionaliteten af ​​w8io browseren i denne tråd: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

I processen med at arbejde på w8io var jeg allerede i tvivl, men da arbejdet kom til en logisk afslutning, og jeg begyndte at oprette SDK'en, blev mine tvivl bekræftet. Jeg kunne ikke finde nogle funktioner nogen steder, inklusive de vigtigste kryptografiske. Så startede jeg med at lave mine grundmursten. Sådan blev de født: AB-kode at kode i base58 (faktisk for at kode ethvert alfabet til et hvilket som helst), Curve25519 at oprette og verificere kompatible signaturer (med muligheder på steroider), Blake2b at beregne en af ​​hasherne (som kun har været tilgængelig siden PHP 7.2) osv.

Her må jeg takke Inala Kardanova for nogle værdifulde råd, der styrede mig hen imod komponere i stedet for det sædvanlige for mig, men forældet, inkludere filer.

Efter et par måneder WavesKit så dagens lys, kom ud beta versioner og er nu klar til at arbejde med al standardfunktionaliteten på Waves platformen. Alle tilgængelige i hovednetværk transaktioner kan nemt oprettes, underskrives og sendes med kun én pakke, der kører på alle 64-bit versioner af PHP fra 5.6 inklusive.

Vi forbinder WavesKit til vores projekt:

composer require deemru/waveskit

Vi bruger:

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

I eksemplet ovenfor opretter vi et WavesKit-objekt, der kører på testnet "T". Vi indstiller frøsætningen, hvorfra nøglerne og adressen på kontoen automatisk beregnes ud fra den offentlige nøgle. Dernæst opretter vi en overførselstransaktion 0.00000001 Waves fra adressen beregnet automatisk fra seed-sætningen til adressen på "test"-aliaset, overfører den til signatur med den private nøgle og sender den til netværket. Derefter sørger vi for, at transaktionen er bekræftet af netværket.

Der er fokus på transaktioner funktioner, der starter med tx. For en bedre forståelse af arbejdet med transaktioner kan du studere WavesKit dokumentation eller gå direkte til de illustrative eksempler i løbende integrationstest.

Da WavesKit er blevet udviklet i virkelig brug, har det allerede avancerede funktioner. Den første dræberfunktion er sikre funktion, som kontrollerer opnåelsen af ​​det krævede niveau af tillid til, at transaktionen ikke gik tabt, men tværtimod blev bekræftet og nåede det krævede antal bekræftelser i netværket.

En anden skudsikker mekanisme er, hvordan WavesKit kommunikerer med noder. Under drivhusforhold fungerer rammen kun med hovedknuden og opretholder en konstant forbindelse med den, men i tilfælde af fejl kan den automatisk skifte til backup. Hvis du opsætter en række standby-noder, kan du kalde funktionen setBestNode at bestemme den bedste node som hovedknude ved den maksimale værdi af den aktuelle højde og responshastighed. Tilføj nu en intern forespørgselscache til dette, og mærk omsorgen fra både brugere og nodeejere.

En af de seneste avancerede mekanismer er funktionen txMonitor. Det fremkom i forbindelse med behovet for at reagere på indgående transaktioner i realtid. Denne funktion løser fuldstændigt alle nuancer forbundet med behandlingen af ​​transaktioner i blockchain. Ikke mere smerte, bare opsæt din tilbagekaldsfunktion med de muligheder, du ønsker, og vent på, at nye transaktioner starter dine processer. For eksempel et andet af mine projekter VECRO fuldstændig bygget op omkring denne funktion, kan du nemt lære, hvordan den fungerer rigtigt i projektkoden.

Jeg elsker open source, det er en af ​​menneskehedens største bedrifter. Da jeg er den eneste udvikler og har nået den tilstand, at alle mine behov er løst, inviterer jeg dig til at bruge og bidrage til WavesKit.

Kilde: www.habr.com

Tilføj en kommentar