WavesKit – PHP sistema, skirta darbui su „Waves blockchain“.

Man patinka PHP dėl kūrimo greičio ir puikaus nešiojamumo. Labai gerai, kai kišenėje visada turi įrankį, pasiruošusį spręsti problemas.

Buvo labai gaila, kai susipažinome su vietine blokų grandine Waves platforma jis savo arsenale neturėjo paruošto PHP SDK. Na, aš turėjau tai parašyti.

Iš pradžių turėjau naudoti mazgai sandoriams pasirašyti. Taigi, norint valdyti tris adresus, reikėjo paleisti tris mazgus... Apgailėtinas vaizdas, nors ir išsprendė kai kurias problemas. Kol atėjo supratimas, kad pasikliauti mazgais yra aklavietė. Pirma, dėl riboto funkcionalumo API, antra, dėl greičio (tais laikais mazgai buvo labai lėti).

Pradėjau dirbti du lygiagrečius darbus. Vienas iš jų yra sukurti blokų grandinės naršyklę, kuri būtų greita ir visiškai nepriklausoma nuo mazgo API. Antrasis – į vieną vietą surinkti visas darbo su „Waves Platform“ funkcijas. Taip atsirado projektai w8io и WavesKit.

Pirmasis žingsnis „Waves“ blokų grandinės užkulisiuose buvo w8io naršyklė. Tai nebuvo lengva, bet vis tiek sugebėjome parašyti nepriklausomą visų likučių skaičiavimą ir netgi rasti klaidą skaičiavimuose pradiniuose mazguose („Bug Bounty“ programa Beje, jiems tai veikia, jie moka už rastas klaidas). Daugiau apie w8io naršyklės funkcionalumą galite sužinoti šioje temoje: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Dirbdamas su w8io jau turėjau abejonių, bet kai darbas atėjo logiškai į pabaigą ir pradėjau kurti SDK, mano abejonės pasitvirtino. Kai kurių funkcijų niekur neradau, tarp jų ir svarbiausių, kriptografinių. Tada pradėjau nuo to, kad pamatau savo plytas. Štai kaip jie gimė: ABkodas koduoti į base58 (iš tikrųjų koduoti bet kurią abėcėlę į bet kurią), Curve25519 sukurti ir patikrinti suderinamus parašus (su parinktimis ant steroidų), Blake2b apskaičiuoti vieną iš maišų (kuri buvo prieinama tik nuo PHP 7.2) ir kt.

Štai čia turiu padėkoti Inala Kardanova už kai kuriuos vertingus patarimus, kurie nurodė man kryptį sukomponuoti vietoj įtraukti failų, kurie man žinomi, bet pasenę.

Po poros mėnesių WavesKit buvo išleistas, išėjo beta versijos ir dabar yra pasirengęs dirbti su visomis standartinėmis Waves platformos funkcijomis. Viskas prieinama pagrindinis tinklas operacijas galima lengvai sukurti, pasirašyti ir išsiųsti naudojant tik vieną paketą, veikiantį visose 64 bitų PHP versijose nuo 5.6 imtinai.

Mes prijungiame WavesKit prie mūsų projekto:

composer require deemru/waveskit

Mes naudojame:

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

Aukščiau pateiktame pavyzdyje sukuriame WavesKit objektą, kuris veikia "T" testų tinkle. Įdiegiame pradinę frazę, iš kurios pagal viešąjį raktą automatiškai apskaičiuojami raktai ir sąskaitos adresas. Toliau sukuriame perdavimo operaciją 0.00000001 Waves iš adreso, automatiškai apskaičiuoto naudojant pradinę frazę į slapyvardį „testas“, perkeliame jį pasirašyti privačiu raktu ir išsiunčiame į tinklą. Po to įsitikiname, kad sandorį sėkmingai patvirtina tinklas.

Sutelktas darbas su sandoriais funkcijos prasidedančios raide tx. Norėdami geriau suprasti darbą su sandoriais, galite mokytis WavesKit dokumentacija arba nedelsdami kreipkitės į iliustruojančius pavyzdžius nuolatiniai integravimo testai.

Kadangi „WavesKit“ buvo sukurtas naudojant realiai, jame jau yra pažangių funkcijų. Pirmoji žudiko savybė yra užtikrinti funkciją, kuri kontroliuoja reikiamo pasitikėjimo lygio pasiekimą, kad sandoris nebuvo prarastas, o, priešingai, buvo patvirtintas ir pasiekė reikiamą patvirtinimų skaičių tinkle.

Kitas neperšaunamas mechanizmas yra tai, kaip „WavesKit“ bendrauja su mazgais. Šiltnamio sąlygomis karkasas dirba tik su pagrindiniu mazgu, palaikydamas nuolatinį ryšį su juo, tačiau klaidų atveju gali automatiškai persijungti į atsarginius. Jei nustatote atsarginių mazgų masyvą, galite iškviesti funkciją setBestNode nustatyti geriausią mazgą kaip pagrindinį pagal didžiausią esamo aukščio ir reakcijos greičio vertę. Dabar pridėkite prie šios vidinės užklausos talpyklos ir jauskitės rūpindamiesi tiek vartotojais, tiek mazgų savininkais.

Vienas iš naujausių pažangių mechanizmų yra funkcija txMonitor. Tai atsirado dėl būtinybės reaguoti į gaunamas operacijas realiu laiku. Ši funkcija visiškai išsprendžia visus niuansus, susijusius su operacijų apdorojimu blokų grandinėje. Daugiau jokio skausmo, tiesiog nustatykite atgalinio ryšio funkciją su norimomis parinktimis ir palaukite, kol bus pradėtos naujos operacijos. Pavyzdžiui, kitas mano projektas VECRO visiškai pagrįsta šia funkcija, galite lengvai ištirti, kaip ji veikia tiesiogiai projekto kode.

Man patinka atvirasis kodas, tai vienas didžiausių žmonijos laimėjimų. Kadangi esu vienintelis kūrėjas ir pasiekęs būseną, kai išspręsti visi mano poreikiai, kviečiu pasinaudoti ir prisidėti prie WavesKit.

Šaltinis: www.habr.com

Добавить комментарий