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) і т.д.

Тут я повинен подякувати Інала Карданова за кілька цінних порад, які направили мене убік композитор замість звичних для мене, але застарілих, включають файли.

Через пару місяців 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

Додати коментар або відгук