ExGolos

Scroll down for English version of this readme.

ExGolos -- это Elixir библиотека для взаимодействия с нодами GOLOS с использованием JSONRPC протокола по вебсокетам.

Установка :ex_golos

  1. Добавьте :ex_golos в список зависимостей в mix.exs:
```elixir
def deps do
  [{:ex_golos, "~> 0.5.0"}]
end
```
  1. Добавьте ':golos' в список applications в mix.exs:
    def application do
     [applications: [:logger, :golos]]
    end

Конфигурация

Сначала пропишите вебсокет урл для ноды Голоса в конфиг. Если ожидаете высокие нагрузки используйте собственную ноду, в ином случае подойдет публичная нода Голоса 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 для каждого типа операции. Каждая операция на блокчейне обрабатывается и превращается в соостветсвующий struct с известными ключами (которые можно посмотреть в документации).

Пример использования

Главная функция в модуле: Golos.call. Вызов функции блокирует процесс до возврата success tuple с результатом или ошибкой, полученными в результате обработки JSONRPC вызов нодой. Id для JSONRPC вызовов задавать не надо, модуль их назначает и обрабатывает автоматически.

Golos.call("database_api", "get_dynamic_global_properties", [])

Такие функции API как get_dynamic_global_properties также блокируют процесс и возвращают success tuple. Информация о поддерживаемых функциях API находится в документации.

Пример использования модуля для обработки стрима операций

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

Дорожная карта

ExGolos находится в активной разработке.

Golos

Elixir websockets client for interaction with GOLOS nodes. Provides an interface to Golos JSONRPC protocol. Golos is a supervised application, so don't forget to add it to applications in mix.exs.

Installation

  1. Add golos to your list of dependencies in mix.exs:
```elixir
def deps do
  [{:ex_golos, "~> 0.1.0"}]
end
```
  1. Add 'golos' to applications in mix.exs:
    def application do
     [applications: [:logger, :golos]]
    end

Example

First, configure a websockets url for the golosd instance, for example, http://127.0.0.1:8090 to the config.

config :golos,
  url: "GOLOS_URL"

The most imporant module function is Golos.call. It will block the calling process and return a success tuple with a "result" data from the JSONRPC call response. JSONRPC call ids are handled automatically.

Roadmap

Golos is under active development.