Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
elixir-golos
7 лет назад

Релиз 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^)⊃━☆゜.*

0
4826.436 GOLOS
На Golos с February 2017
Комментарии (0)
Сортировать по:
Сначала старые