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

Релиз ExGolos v0.8: улучшенный пайплайн ивентов


На связи @ontofractal. GenStage продюсеры теперь создают ивенты с следующей формой: %Golos.Event{data: ..., metadata: ...}` где данные соответствуют стракту нового блока или операции, а метаданные включают информацию о времени, блоке, источнике, блокчейне, была ли операция обработана и т.д.

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

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

Changelog

В этом релизе много обратно несовместимых изменений.

  • форма ивентов изменена с tuple на map с ключами data и metadata
  • во всех ответах API ключи изменены на атомы вместо строк
  • добавлен стракт %Golos.Block{}
  • добавлен стракт %Golos.Event{}
  • Golos.Stages.Ops.ProducerConsumer -> Golos.Stages.RawOps
  • Golos.Stages.StructuredOps.ProducerConsumer -> Golos.Stages.MungedOps
  • строки timestamp теперь парсятся в NaiveDateTime
  • обновлен пример для новой формы ивентов

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

defmodule Golos.Stage.MungedOps.ExampleConsumer do
  use GenStage
  alias Golos.MungedOps
  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(%{data: %MungedOps.Reblog{} = op_data, metadata: op_metadata = %{block_height: h, timestamp: t}}) do
      Logger.info """
      Новый реблог:
      #{inspect op_data} в блоке #{h}, время: #{t}
      """
  end

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

end

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

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

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

Больше об Elixir

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

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

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