WavesKit — PHP-rammeværk til arbejde med blockchain Waves

Jeg kan godt lide PHP når det gælder udviklingshastighed og fremragende bærbarhed. Det er virkelig godt, når man altid har et værktøj klar til at løse opgaver.

Det var temmelig frustrerende, da jeg stødte på den indenlandske blockchain Waves Platform og der ikke var noget klart SDK til PHP tilgængeligt. Nå, men så måtte jeg skrive det selv.

I starten måtte jeg bruge noder til at signere transaktioner. Så, for at administrere tre adresser, måtte jeg starte tre noder... Det var et sørgeligt syn, men det løste nogle opgaver. Indtil jeg indså, at det var en blindgyde at stole på noder. For det første på grund af det begrænsede funktionalitet, API, og for det andet på grund af hastigheden (dengang var noderne meget langsomme).

Jeg begyndte to parallelle projekter. Det første var at lave en blockchain-udforsker, der ville være hurtig og helt uafhængig af API'erne fra noderne. Det andet var at samle alle funktioner til arbejde med Waves Platform ét sted. Sådanne projekter kom til live w8io og WavesKit.

Det første skridt bag kulisserne på Waves blockchain var udforskeren w8io. Det var ikke nemt, men jeg formåede alligevel at skrive en uafhængig beregning af alle saldi og endda finde en fejl i beregningerne på de originale noder (bug-bounty programmet , for øvrigt har de det, de betaler for fundne fejl). Du kan lære mere om funktionaliteten i w8io-udforskeren i dette emne: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Under arbejdet med w8io havde jeg allerede mine tvivl, men da arbejdet nåede den logiske konklusion, og jeg begyndte at skabe SDK'et, blev mine tvivl bekræftet. Jeg kunne ikke finde nogle funktioner, herunder de mest essentielle kryptografiske. Så jeg begyndte at skabe mine egne grundlæggende byggesten. Så blev følgende til: ABCode til kodning i base58 (faktisk til kodning af ethvert alfabet i hver som helst), Curve25519 til at skabe og verificere kompatible signaturer (med varianter på steroider), Blake2b til beregning af en af hashene (som kun var tilgængelig fra PHP 7.2) osv.

Her skylder jeg Inal Kardanov tak for flere værdifulde råd, der ledte mig mod composer i stedet for de for mig velkendte, men forældede, include-filer.

Efter et par måneder WavesKit så dagens lys, kom ud af af beta-versionen og er nu klar til at arbejde med al den standardfunktionalitet, der findes på Waves-platformen. Alt tilgængeligt i hovednetværket Transaktioner kan nemt oprettes, signeres og sendes af ét eneste paket, der kører på alle 64-bit versioner af PHP fra 5.6 og frem.

Tilslut WavesKit til dit projekt:

composer require deemru/waveskit

Brug:

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 det ovenstående eksempel opretter vi et WavesKit-objekt, der arbejder i testnetværket 'T'. Vi sætter seed-sætningen, hvorfra nøgler og kontoens adresse automatisk beregnes på baggrund af den offentlige nøgle. Derefter opretter vi en overførselstransaktion af 0.00000001 Waves fra den automatisk beregnede adresse baseret på seed-sætningen til alias-adressen 'test', vi sender den til signatur med den private nøgle og sender den til netværket. Herefter sikrer vi os, at transaktionen er blevet bekræftet af netværket.

Arbejdet med transaktioner er koncentreret i funktioner, der starter med tx. For bedre forståelse af arbejdet med transaktioner kan du studere WavesKit-dokumentationen eller straks se på de illustrative eksempler i kontinuerlige integrationstests.

Da WavesKit er blevet udviklet under reelle brugsforhold, har det allerede nogle avancerede funktioner. Den første killerfunktion er funktionen ensure, som kontrollerer opnåelsen af det ønskede sikkerhedsniveau, så transaktionen ikke går tabt, men tværtimod bliver bekræftet og når det nødvendige antal bekræftelser i netværket.

En anden kuglesikker mekanisme er, hvordan WavesKit kommunikerer med noderne. Under kontrollerede forhold arbejder rammeværket kun med hovednoden og opretholder en konstant forbindelse, men kan automatisk skifte til reserve noder ved fejl. Hvis du indstiller et array af reserve noder, kan du kalde funktionen setBestNode for at bestemme den bedste node som hovednoden baseret på den maksimaleværdi af den aktuelle højder og svartider. Nu skal du tilføje den interne forespørgselscache, og du vil opleve omsorg for både brugerne og node-ejerne.

En af de sidste avancerede mekanismer er funktionen txMonitor. Det opstod i forbindelse med behovet for at reagere på indgående transaktioner i realtid. Denne funktion løser fuldt ud alle nuancer relateret til behandling af transaktioner i blokchain. Ingen flere problemer, du skal bare indstille din callback-funktion med ønskede indstillinger og vente på nye transaktioner, der aktiverer dine processer. For eksempel, et andet af mine projekter VECRO er helt bygget omkring denne funktion, så du kan frit udforske, hvordan den fungerer direkte i projektets kode.

Jeg elsker open source, det er en af de største præstationer i menneskehedens historie. Eftersom jeg er den eneste udvikler og har opnået en tilstand, hvor alle mine behov er dækket, inviterer jeg dig til at bruge og bidrage til WavesKit.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster