WavesKit — PHP фреймуърк за работа с блокчейна Waves

Харесва ми PHP за скоростта на разработката и отличната преносимост. Много добре е, когато в джоба винаги имаш готов инструмент за решаване на задачи.

Беше доста неприятно, когато, запознайки се с местния блокчейн Waves Platform в арсенала му нямаше готов 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 за създаване и проверка на съвместими подписи (с вариантите на стероиди), Blake2b за изчисляване на един от хешовете (който беше наличен само от PHP 7.2 нагоре) и т.н.

Тук трябва да благодаря на Инал Карданов за няколко ценни съвета, които ме насочиха към composer вместо познатите ми, но остарели include файлове.

След няколко месеца WavesKit видя светлината, излезе от бета-версии и сега е готов за работа с цялата стандартна функционалност на платформата Waves. Всичко налично в основната мрежа Транзакциите могат лесно да се създават, подписват и изпращат от един пакет, работещ на всички 64-битови версии на PHP от 5.6 включително.

Свържете 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster