На связи @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
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
@sharker, @t3ran13, @archibald116, @oleg257, @zoss, @dabudi, @dr-boo, @asuleymanov
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Вы тоже можете стать Инвестором и поддержать проект!!!
@elixir-golos Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Ваш пост получил высшую оплату за один неделю
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
@elixir-golos, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующих категориях:
@elixir-golos Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Ваш пост получил высшую оплату за один день
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
@elixir-golos Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за общую выплату получил
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
Хе-хе, вот это сумма! Радует, что здесь честно и достойно оплачивается труд программистов, на которых здесь всё и завязано.
С нетерпением жду когда голос догонет стимит
Одно радует на голосе, что такие суммы зарабатывают программеры.
потому, что без "программеров" не было бы голоса)
40к! Офигеть. Учитесь писать посты ребята.
Здорово 🙌🏻)
мдааа,это походу не для моего ума.
@elixir-golos Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество полученных голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.