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

Релиз ExGolos v0.7: теперь с возможностью подписки на поток структурированных операций Golos


На связи @ontofractal. Цель этого релиза -- упростить и ускорить написание кода управления потоками блокчейн ивентов благодаря включению обработки кастомных json операций, экстракции значений из строк, добавлению метаданных и т.д. К примеру, вместо ивентов %CustomJson{} теперь можно получать ивенты %Reblog{} или %Follow{}

Продюсер структурированных операций соответствует спецификации GenStage, что позволяет подключиться к пайплайну ивентов на любом этапе: блоки, операции или структурированные операции.

Репозитории и документация

Changelog

  • добавлен модуль Steemex.Stage.StructuredOps.ProducerConsumer
  • Для подписки на структурированные операции используеся опция GenStage: subscribe_to: Steemex.Stage.StructuredOps.ProducerConsumer. Все продюсеры используют BroadcastDispatcher -- ивенты будут отправлены всем подписавшимся консюмерам
  • добавлены стракты для следующих структурированных операций: трансфер, комментарий, трансфер в вестинг, подписка, реблог, публикация фида
  • для каждого стракта добавлена функция трансформации и соответствующие тесты
  • форма ивентов структурированных операций имеет следующий вид: {op_data, op_metadata}
  • форма ивентов операций была изменена на {op_type, op_data, op_metadata}
  • строки переводов токены парсятся и экстрагируются в поля стракта
  • op_metadata = %{height: h, timestamp: t} дает доступ к информации о высоте и времени генерации блока
  • обновлен супервайзер для GenStage продюсеров
  • обновлен пример потребителя ивентов с использованием пэттерн метчинга для страктов структурированных операций
  • добавлена опция конфига activate_stage_sup запускающая продюсеры ивентов

Пример GenStage потребителя ивентов

defmodule Golos.Stage.StructuredOps.ExampleConsumer do
  use GenStage
  alias Golos.StructuredOps
  require Logger

  def start_link(args, options \\ []) do
    GenStage.start_link(__MODULE__, args, options)
  end

  def init(state) do
    Logger.info("Golos example consumer is initializing...")
    {:consumer, state, subscribe_to: state[:subscribe_to]}
  end

  def handle_events(events, _from, state) do
    for op <- events do
      process_event(op)
    end
    {:noreply, [], state}
  end

  def process_event({%StructuredOps.Reblog{} = op_data, %{height: h, timestamp: t} =  op_metadata}) do
      Logger.info """
      Новый реблог:
      #{inspect op_data} в блоке #{h}, время: #{t}
      """
  end

  def process_event({op_data, %{height: h, timestamp: t} =  op_metadata}) do
      Logger.info """
      Новая операция:
      #{inspect op_data} в блоке #{h}, время: #{t}
      """
  end

end

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

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

  • Улучшить документацию
  • Добавить оставшиеся стракты
  • Добавить возможность броадкаста транзакций

Больше об Elixir

Elixir -- функциональный язык программирования созданный на основе Erlang/OTP. Его основные преимущества: удобные примитивы параллелизации и одновременности(concurrency) вычислений, устойчивость к сбоям и относительно простое создание распределенных кластеров.

Elixir Crash Course
Elixir School

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

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