Релиз ExGolos v0.5: опен сорс JSONRPC клиент для Голоса на Elixir/Erlang


На связи @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) вычислений, устойчивость к сбоям и относительно простое создание распределенных кластеров.

(∩^o^)⊃━☆゜.*

открытый-кодголосблокчейнпрограммированиеelixir
25%
0
97
4155.402 GOLOS
0
В избранное
elixir-golos
На Golos с 2017 M02
97
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (0)
Сортировать по:
Сначала старые