WavesKit - PHP фрэймворк для працы з блокчейном Waves

Мне падабаецца PHP за хуткасць распрацоўкі і выдатную пераноснасць. Гэта вельмі добра, калі ў кішэні заўсёды маецца гатовы да рашэння задач прылада.

Было даволі крыўдна, калі пры знаёмстве з айчынным блокчэйнам. Платформа Хвалі у яго арсенале не аказалася гатовага SDK на PHP. Што ж, прыйшлося яго напісаць.

Спачатку даводзілася выкарыстоўваць ноды для подпісы транзакцый. Так, для кіравання трыма адрасамі даводзілася запускаць тры ноды… Гэта было вартае жалю відовішча, хоць і вырашала некаторыя задачы. Датуль, пакуль не прыйшло разуменне, што спадзявацца на ноды - гэта тупік. Па-першае, з-за абмежаванага функцыяналу API, па-другое, з-за хуткасці (у тыя дні ноды былі вельмі павольнымі).

Я пачаў дзве паралельныя працы. Адна - зрабіць аглядальнік блокчейна, які будзе хуткі і цалкам незалежны ад API нод. Другая - сабраць усе функцыі для працы з Waves Platform у адным месцы. Так з'явіліся праекты w8io и WavesKit.

Першым крокам за кулісы блокчэйна Waves стаў аглядальнік w8io. Было не проста, але ўсё ж удалося напісаць незалежны разлік усіх балансаў і нават знайсці памылку ў разліках на арыгінальных нодах (праграма bug-bounty дарэчы ў іх працуе, за знойдзеныя памылкі плацяць). Вы можаце падрабязней вывучыць функцыянал аглядальніка w8io у гэтай тэме: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

У працэсе працы над w8io у мяне ўжо былі сумневы, але калі праца падышла да лагічнага канца і я прыступіў да стварэння SDK, сумневы пацвердзіліся. Я нідзе не змог знайсці некаторых функцый, у тым ліку і найважнейшых, крыптаграфічных. Тады я пачаў са стварэння сваёй цэглы для падмурка. Так нарадзіліся: ABCode для кадавання ў base58 (на самой справе для кадавання любога алфавіту ў любой), Curve25519 для стварэння і праверкі сумяшчальных подпісаў (з варыянтамі на пазіцыі, метадалагічнай), Блэйк2б для разліку аднаго з хэшаў (які быў даступны толькі пачынаючы з PHP 7.2) і г.д.

Тут я павінен падзякаваць Інала Карданава за некалькі каштоўных парадаў, якія накіравалі мяне ў бок складаць замест звыклых для мяне, але састарэлых, include файлаў.

Праз пару месяцаў WavesKit убачыў святло, выйшаў з бэта-версіі і зараз гатовы да працы з усім стандартным функцыяналам платформы Waves. Усе даступныя ў асноўнай сеткі транзакцыі могуць быць лёгка створаны, падпісаны і адпраўлены сіламі ўсяго аднаго пакета, які працуе на ўсіх 64-бітных версія PHP ад 5.6/XNUMX ўключна.

Падключаем WavesKit у свой праект:

composer require deemru/waveskit

Карыстаемся:

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

У прыкладзе вышэй мы ствараем аб'ект WavesKit, які працуе ў тэставай сетцы «T». Усталёўваны сід фразу, з якой аўтаматычна вылічаюцца ключы і адрас акаўнта на аснове адчыненага ключа. Далей мы ствараем транзакцыю трансферу 0.00000001 Waves з аўтаматычна вылічанага па сядзе фразе адраса на адрас аліяса «test», перадаем яе на подпіс зачыненым ключом і адпраўляем у сетку. Пасля гэтага пераконваемся, што транзакцыя паспяхова пацверджана сеткай.

Праца з транзакцыямі сканцэнтравана ў функцыях якія пачынаюцца з tx. Для лепшага разумення працы з транзакцыямі вы можаце вывучыць дакументацыю WavesKit ці адразу звярнуцца да наглядных прыкладаў у тэстах бесперапыннай інтэграцыі.

Бо WavesKit развіваўся ва ўмовах рэальнага выкарыстання, у яго ўжо з'явіліся прасунутыя фічы. Першая кілер фіча - гэта функцыя ensure, якая кантралюе дасягненне патрабаванага ўзроўню ўпэўненасці, што транзакцыя не згубілася, а наадварот, была пацверджана і дасягнула неабходнай колькасці пацверджанняў у сетцы.

Іншы куленепрабівальны механізм - як WavesKit мае зносіны з нодамі. У цяплічных умовах фрэймворк працуе толькі з асноўнай нодай, падтрымліваючы з ёй сталае злучэнне, але пры памылках можа аўтаматычна перамыкацца на рэзервовыя. Калі вы ўсталёўваеце масіў рэзервовых нод, то можаце выклікаць функцыю setBestNode для вызначэння лепшай ноды ў якасці асноўнай па максімальным значэнні бягучай вышыні і хуткасці адказу. Зараз дадайце да гэтага ўнутраны кэш запытаў і адчуйце клопат як аб карыстачах, так і ўладальніках нод.

Адзін з апошніх прасунутых механізмаў - функцыя txMonitor. Яна з'явілася ў сувязі з неабходнасцю рэагаваць на ўваходныя транзакцыі ў рэальным часе. Дадзеная функцыя цалкам вырашае ўсе нюансы злучаныя з апрацоўкай транзакцый у блокчейне. Больш ніякага болю, проста ўсталёўваеце сваю callback функцыю з жаданымі опцыямі і чакаеце новых транзакцый, якія запусцяць вашыя працэсы. Напрыклад, яшчэ адзін мой праект VECRO цалкам пабудаваны вакол гэтай функцыі, вы спакойна можаце вывучыць як яна працуе прама у кодзе праекта.

Мне падабаецца open source, гэта адно з найвялікшых дасягненняў чалавецтва. Так як я адзіны распрацоўшчык і дасягнуў стану, што ўсе мае патрэбы вырашаны, я запрашаю вас выкарыстоўваць і ўносіць ўклад у WavesKit.

Крыніца: habr.com

Дадаць каментар