На связи @ontofractal. В этом релизе внедрен стриминг модуль Golos.Streamer
: новые операции блокчейна Голоса парсятся, обрабатываются, преобразуются в стракты и отправляются сообщениями в указанный при запуске стримера процесс.
Новая версия библиотеки опубликована в репозитории на github вместе с github release, на hex.pm, а документация на hexdocs.
Changelog
В текущей версии добавлен стриминг модуль Golos.Streamer
, пример модуля для обработки входящих операций Golos.OpsHandlerExample
, а также structs для всех типов операций.
Конфигурация
Сначала пропишите вебсокет урл для ноды Голоса в конфиг. Если ожидаете высокие нагрузки используйте собственную ноду, в ином случае подойдет публичная нода Голоса wss://ws.golos.io
. Для удобства можно использовать ENV переменные, например, GOLOS_URL.
config :golos,
url: System.get_env("GOLOS_URL"),
stream_to: YourOpHandlerModule
Внимание: GenServer стриминга транзакций запускается при старте модуля ExGolos только в том случае, если в настройках конфинга добавлен ключ stream_to
. Процесс должен существовать, а имя процесса YourOpHandlerModule
должно быть зарегистрированым.
Альтернативой может быть запуск стримера вручную с помощью Golos.Streamer.start_link(%{stream_to: YourOpHandlerModule})
Каждая операция на блокчейне обрабатывается и превращается в соостветсвующий struct с известными ключами (которые можно посмотреть в документации).
Пример использования модуля для обработки стрима операций
defmodule Golos.OpsHandlerExample do
use GenServer
require Logger
@doc"""
Starts the handler module
"""
def start_link do
GenServer.start_link(__MODULE__, %{}, name: __MODULE__)
end
def init(config \\ %{}) do
{:ok, config}
end
def handle_info({:comment, data}, state) do
Logger.info("Новый пост или комментарий: #{inspect(data)}" )
{:noreply, state}
end
def handle_info({:vote, data}, state) do
Logger.info("Новый голос: #{inspect(data)}" )
{:noreply, state}
end
def handle_info({op_type, op_data}, state) do
Logger.info("Новая операция #{op_type}: #{inspect(op_data)}" )
{:noreply, state}
end
end
Документация и тесты
Тесты и документация присутствуют для каждой функции JSONRPC API. В readme находятся примеры использования библиотеки.
Дорожная карта
ExGolos находится в активной разработке.
- Исследовать использование GenStage
- Добавить функции для всех типов вызвовов
- Улучшить документацию
- Добавить оставшиеся стракты
- Добавить возможность броадкаста транзакций
Больше об Elixir
Elixir -- функциональный язык программирования созданный на основе Erlang/OTP. Его основные преимущества: удобные примитивы параллелизации и одновременности(concurrency) вычислений, устойчивость к сбоям и относительно простое создание распределенных кластеров.