Хабрахабр

WavesKit — PHP фреймворк для работы с блокчейном Waves

Это очень хорошо, когда в кармане всегда имеется готовый к решению задач инструмент. Мне нравится PHP за скорость разработки и отличную переносимость.

Что ж, пришлось его написать. Было довольно обидно, когда при знакомстве с отечественным блокчейном Waves Platform в его арсенале не оказалось готового SDK на PHP.

Так, для управления тремя адресами приходилось запускать три ноды… Это было жалкое зрелище, хотя и решало некоторые задачи. Поначалу приходилось использовать ноды для подписи транзакций. Во-первых, из-за ограниченного функционала API, во-вторых, из-за скорости (в те дни ноды были очень медленными). До тех пор, пока не пришло понимание, что полагаться на ноды — это тупик.

Одна — сделать обозреватель блокчейна, который будет быстрый и полностью независимый от API нод. Я начал две параллельные работы. Так появились проекты w8io и WavesKit. Вторая — собрать все функции для работы с Waves Platform в одном месте.

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

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

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

Все доступные в основной сети транзакции могут быть легко созданы, подписаны и отправлены силами всего одного пакета, работающего на всех 64-битных версия PHP от 5. Спустя пару месяцев WavesKit увидел свет, вышел из бета-версии и теперь готов к работе со всем стандартным функционалом платформы Waves. 6 включительно.

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

composer require deemru/waveskit

Пользуемся:

use deemru\WavesKit;
$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". 00000001 Waves с автоматически вычисленного по сид фразе адреса на адрес алиаса "test", передаём её на подпись закрытым ключом и отправляем в сеть. Далее мы создаём транзакцию трансфера 0. После этого убеждаемся, что транзакция успешно подтверждена сетью.

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

Первая киллер фича — это функция ensure, которая контролирует достижение требуемого уровня уверенности, что транзакция не потерялась, а напротив, была подтверждена и достигла необходимого количества подтверждений в сети. Так как WavesKit развивался в условиях реального использования, у него уже появились продвинутые фичи.

В тепличных условиях фреймворк работает только с основной нодой, поддерживая с ней постоянное соединение, но при ошибках может автоматически переключаться на резервные. Другой пуленепробиваемый механизм — как WavesKit общается с нодами. Теперь добавьте к этому внутренний кэш запросов и почувствуйте заботу как о пользователях, так и владельцах нод. Если вы устанавливаете массив резервных нод, то можете вызывать функцию setBestNode для определения лучшей ноды в качестве основной по максимальному значению текущей высоты и скорости ответа.

Она появилась в связи с необходимостью реагировать на входящие транзакции в реальном времени. Один из последних продвинутых механизмов — функция txMonitor. Больше никакой боли, просто устанавливаете свою callback функцию с желаемыми опциями и ждёте новых транзакций, которые запустят ваши процессы. Данная функция полностью решает все нюансы связанные с обработкой транзакций в блокчейне. Например, ещё один мой проект VECRO полностью построен вокруг этой функции, вы спокойно можете изучить как она работает прямо в коде проекта.

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

Теги
Показать больше

Похожие статьи

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть