WavesKit - PHP-rammeverk for arbeid med Waves-blokkjeden

Jeg liker PHP for hastighet på utvikling og utmerket portabilitet. Det er veldig bra når du alltid har et verktøy i lomma, klar til å løse problemer.

Det var ganske synd når man ble kjent med den innenlandske blokkjeden Bølgeplattformen han hadde ikke en ferdig PHP SDK i arsenalet sitt. Vel, jeg måtte skrive det.

Først måtte jeg bruke noder å signere transaksjoner. Så for å administrere tre adresser var det nødvendig å starte tre noder... Det var et ynkelig syn, selv om det løste noen problemer. Inntil forståelsen kom at det å stole på noder var en blindvei. For det første på grunn av begrenset funksjonalitet API, for det andre på grunn av hastigheten (nodene var veldig trege på den tiden).

Jeg begynte i to parallelle jobber. Den ene er å lage en blokkjedeutforsker som vil være rask og helt uavhengig av node-API. Den andre er å samle alle funksjonene for å jobbe med Waves-plattformen på ett sted. Slik så prosjektene ut w8io и WavesKit.

Det første skrittet bak kulissene til Waves-blokkjeden var w8io nettleser. Det var ikke lett, men vi klarte likevel å skrive en uavhengig beregning av alle saldoer og til og med finne en feil i beregningene på de opprinnelige nodene (bug-bounty-program Det fungerer forresten for dem, de betaler for feilene som er funnet). Du kan lære mer om funksjonaliteten til w8io-nettleseren i dette emnet: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Mens jeg jobbet med w8io, hadde jeg allerede tvil, men da arbeidet kom til sin logiske slutt og jeg begynte å lage SDK, ble tvilen mine bekreftet. Jeg kunne ikke finne noen funksjoner hvor som helst, inkludert de viktigste, kryptografiske. Så begynte jeg med å lage mine egne klosser til grunnmuren. Slik ble de født: AB-kode å kode til base58 (faktisk for å kode et hvilket som helst alfabet til et hvilket som helst), Curve25519 for å opprette og verifisere kompatible signaturer (med alternativer på steroider), Blake2b å beregne en av hashen (som kun var tilgjengelig siden PHP 7.2), osv.

Det er her jeg må takke Inala Kardanova for noen verdifulle råd som pekte meg i retning komponist i stedet for inkludere filer som er kjent for meg, men utdaterte.

Etter et par måneder WavesKit ble utgitt, kom ut betaversjoner og er nå klar til å jobbe med all standardfunksjonaliteten til Waves-plattformen. Alt tilgjengelig i hovednettverket transaksjoner kan enkelt opprettes, signeres og sendes med bare én pakke, og kjører på alle 64-biters versjoner av PHP fra og med 5.6.

Vi kobler WavesKit til prosjektet vårt:

composer require deemru/waveskit

Vi bruker:

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 lager vi et WavesKit-objekt som kjører på "T"-testnettet. Vi installerer en frøfrase der nøklene og kontoadressen automatisk beregnes basert på den offentlige nøkkelen. Deretter oppretter vi en overføringstransaksjon 0.00000001 Bølger fra adressen beregnet automatisk ved hjelp av frøfrasen til aliasadressen "test", overfører den til signering med en privat nøkkel og sender den til nettverket. Etter dette sørger vi for at transaksjonen er vellykket bekreftet av nettverket.

Arbeidet med transaksjoner er konsentrert i funksjoner som starter med tx. For en bedre forståelse av arbeidet med transaksjoner, kan du studere WavesKit-dokumentasjon eller gå umiddelbart til illustrerende eksempler i kontinuerlige integrasjonstester.

Siden WavesKit er utviklet for bruk i den virkelige verden, har det allerede avanserte funksjoner. Den første morderfunksjonen er sikre funksjon, som kontrollerer oppnåelsen av det nødvendige nivået av tillit til at transaksjonen ikke gikk tapt, men tvert imot ble bekreftet og nådde det nødvendige antallet bekreftelser i nettverket.

En annen skuddsikker mekanisme er hvordan WavesKit kommuniserer med noder. Under drivhusforhold fungerer rammeverket bare med hovednoden, og opprettholder en konstant forbindelse med den, men i tilfelle feil kan den automatisk bytte til backup. Hvis du setter opp en rekke backup-noder, kan du kalle opp funksjonen setBestNode for å bestemme den beste noden som den viktigste basert på maksimalverdien for gjeldende høyde og responshastighet. Legg nå til en intern spørringsbuffer og føl deg ivaretatt av både brukere og nodeeiere.

En av de siste avanserte mekanismene er funksjonen txMonitor. Det dukket opp på grunn av behovet for å svare på innkommende transaksjoner i sanntid. Denne funksjonen løser fullstendig alle nyansene knyttet til behandling av transaksjoner i blokkjeden. Ingen mer smerte, bare sett opp tilbakeringingsfunksjonen med de ønskede alternativene og vent på nye transaksjoner for å starte prosessene dine. For eksempel et annet prosjekt av meg VECRO fullstendig bygget rundt denne funksjonen, kan du enkelt studere hvordan den fungerer direkte i prosjektkoden.

Jeg elsker åpen kildekode, det er en av menneskehetens største prestasjoner. Siden jeg er den eneste utvikleren og har nådd en tilstand der alle mine behov er løst, inviterer jeg deg til å bruke og bidra til WavesKit.

Kilde: www.habr.com

Legg til en kommentar