WavesKit - PHP framework para sa pagtatrabaho sa Waves blockchain

МнС нравится PHP para sa bilis ng pag-unlad at mahusay na maaaring dalhin. Napakabuti kapag palagi kang may nakahanda na tool para sa paglutas ng mga problema sa iyong bulsa.

Ito ay lubos na isang kahihiyan kapag, kapag naging pamilyar sa domestic blockchain Waves Platform wala siyang ready-made PHP SDK sa kanyang arsenal. Well, kailangan kong isulat ito.

Noong una kailangan kong gumamit mga node upang pumirma ng mga transaksyon. Kaya, upang pamahalaan ang tatlong mga address, kailangan mong magpatakbo ng tatlong mga node ... Ito ay isang kaawa-awang tanawin, kahit na ito ay nalutas ang ilang mga problema. Hanggang sa dumating ang pagkaunawa na ang pag-asa sa mga node ay isang dead end. Una, dahil sa limitadong pag-andar API, pangalawa, dahil sa bilis (napakabagal ng mga node noong mga panahong iyon).

Nagsimula ako ng dalawang magkatulad na trabaho. Ang isa ay gumawa ng blockchain explorer na mabilis at ganap na independiyente sa node API. Ang pangalawa ay upang kolektahin ang lahat ng mga function para sa pagtatrabaho sa Waves Platform sa isang lugar. Ganito nangyari ang mga proyekto. w8io ΠΈ WavesKit.

Ang unang hakbang sa likod ng mga eksena ng Waves blockchain ay w8io browser. Hindi ito madali, ngunit nagawa pa ring magsulat ng isang independiyenteng pagkalkula ng lahat ng mga balanse at kahit na makahanap ng isang error sa mga kalkulasyon sa orihinal na mga node (programa ng bug bounty Sa pamamagitan ng paraan, ito ay gumagana para sa kanila, nagbabayad sila para sa mga error na natagpuan). Maaari kang matuto nang higit pa tungkol sa functionality ng w8io browser sa thread na ito: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Sa proseso ng pagtatrabaho sa w8io, nagkaroon na ako ng mga pagdududa, ngunit nang dumating sa lohikal na pagtatapos ang gawain at sinimulan kong likhain ang SDK, nakumpirma ang aking mga pagdududa. Wala akong mahanap na ilang function kahit saan, kabilang ang pinakamahalagang cryptographic. Pagkatapos ay nagsimula ako sa paggawa ng aking pundasyon na mga brick. Ganito sila ipinanganak: ABCode upang mag-encode sa base58 (talagang mag-encode ng anumang alpabeto sa alinman), Curve25519 upang lumikha at mag-verify ng mga katugmang lagda (na may mga opsyon sa mga steroid), Blake2b upang kalkulahin ang isa sa mga hash (na magagamit lamang mula noong PHP 7.2), atbp.

Dito ako dapat magpasalamat Inala Kardanova para sa ilang mahalagang payo na nagtulak sa akin sumulat sa halip na karaniwan para sa akin, ngunit luma na, isama ang mga file.

Pagkatapos ng ilang buwan Nakita ng WavesKit ang liwanag ng araw, lumabas mga bersyon ng beta at handa na ngayong magtrabaho kasama ang lahat ng karaniwang functionality ng Waves platform. Available lahat sa pangunahing network ang mga transaksyon ay madaling magawa, mapirmahan at maipadala gamit ang isang pakete lamang na tumatakbo sa lahat ng 64-bit na bersyon ng PHP mula sa 5.6 inclusive.

Ikinonekta namin ang WavesKit sa aming proyekto:

composer require deemru/waveskit

Ginagamit namin ang:

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

Sa halimbawa sa itaas, lumikha kami ng WavesKit object na tumatakbo sa testnet "T". Itinakda namin ang seed phrase, kung saan awtomatikong kinakalkula ang mga susi at address ng account batay sa pampublikong susi. Susunod, lumikha kami ng transaksyon sa paglilipat 0.00000001 Waves mula sa address na awtomatikong kinakalkula mula sa seed phrase patungo sa address ng "test" alias, ilipat ito para sa lagda gamit ang pribadong key at ipadala ito sa network. Pagkatapos nito, tinitiyak namin na matagumpay na nakumpirma ng network ang transaksyon.

Nakatuon ang mga transaksyon sa mga function na nagsisimula sa tx. Para sa isang mas mahusay na pag-unawa sa pagtatrabaho sa mga transaksyon, maaari kang mag-aral Dokumentasyon ng WavesKit o dumiretso sa naglalarawang mga halimbawa sa tuluy-tuloy na mga pagsubok sa pagsasama.

Dahil ang WavesKit ay binuo sa totoong paggamit, mayroon na itong mga advanced na tampok. Ang unang tampok na pumatay ay tiyakin ang paggana, na kumokontrol sa pagkamit ng kinakailangang antas ng kumpiyansa na ang transaksyon ay hindi nawala, ngunit, sa kabaligtaran, ay nakumpirma at naabot ang kinakailangang bilang ng mga kumpirmasyon sa network.

Ang isa pang mekanismong hindi tinatablan ng bala ay kung paano nakikipag-ugnayan ang WavesKit sa mga node. Sa mga kondisyon ng greenhouse, ang balangkas ay gumagana lamang sa pangunahing node, na pinapanatili ang isang pare-parehong koneksyon dito, ngunit sa kaso ng mga error maaari itong awtomatikong lumipat sa mga backup. Kung nagse-set up ka ng hanay ng mga standby node, maaari mong tawagan ang function setBestNode upang matukoy ang pinakamahusay na node bilang pangunahing node sa pamamagitan ng pinakamataas na halaga ng kasalukuyang taas at bilis ng pagtugon. Ngayon magdagdag ng isang panloob na cache ng query dito at madama ang pangangalaga ng parehong mga gumagamit at mga may-ari ng node.

Ang isa sa mga pinakabagong advanced na mekanismo ay ang pag-andar txMonitor. Lumitaw ito kaugnay ng pangangailangang tumugon sa mga papasok na transaksyon sa real time. Ang function na ito ay ganap na malulutas ang lahat ng mga nuances na nauugnay sa pagproseso ng mga transaksyon sa blockchain. Wala nang sakit, i-set up lang ang iyong callback function gamit ang mga opsyon na gusto mo at maghintay para sa mga bagong transaksyon upang simulan ang iyong mga proseso. Halimbawa, isa pa sa aking mga proyekto VeCRO ganap na binuo sa paligid ng function na ito, madali mong matutunan kung paano ito gumagana nang tama sa code ng proyekto.

Gustung-gusto ko ang open source, isa ito sa mga pinakadakilang tagumpay ng sangkatauhan. Dahil ako lang ang nag-develop at naabot ko na ang estado na nalutas na ang lahat ng aking pangangailangan, inaanyayahan ko kayong gamitin at mag-ambag WavesKit.

Pinagmulan: www.habr.com

Magdagdag ng komento