Найти в Дзене
TRON DAO Russian

Демонстрация подписки на мероприятия TRON в режиме реального времени

Эта статья показывает, как в реальном времени стримить события ноды блокчейна — например, появление новых блоков и транзакций — из TRON Java-tron FullNode через встроенный механизм подписки на события по очереди сообщений ZeroMQ. В репозитории есть небольшие Node.js-скрипты, которые подписываются на нужные топики событий и выводят полученные сообщения в консоль. Эта настройка полезна, если вам нужна собственная инфраструктура для отслеживания входящих переводов, построения индексаторов или запуска бэкенд-процессов без зависимости от стороннего hosted-провайдера. Для быстрого теста лучше сначала начать с событий по блокам. А логи контрактов имеет смысл включать уже после того, как ваша нода синхронизируется почти до актуальной высоты сети. Демонстрационное репозиторий выглядит следующим образом: tron-event-subscription-demo/ block-watcher.js transaction-watcher.js package.json package-lock.json node_modules/ Репозиторий на GitHub: https://github.com/aziz1975/tron-event-subscription-demo
Оглавление

Обзор

Эта статья показывает, как в реальном времени стримить события ноды блокчейна — например, появление новых блоков и транзакций — из TRON Java-tron FullNode через встроенный механизм подписки на события по очереди сообщений ZeroMQ. В репозитории есть небольшие Node.js-скрипты, которые подписываются на нужные топики событий и выводят полученные сообщения в консоль.

Что получится в итоге:

  • запущенный Nile FullNode с публикацией событий в ZeroMQ по адресу tcp://127.0.0.1:5555
  • подписчик на новые блоки, который ловит и печатает триггеры новых блоков
  • подписчик на транзакции, который ловит и печатает триггеры транзакций

Когда это полезно

Эта настройка полезна, если вам нужна собственная инфраструктура для отслеживания входящих переводов, построения индексаторов или запуска бэкенд-процессов без зависимости от стороннего hosted-провайдера. Для быстрого теста лучше сначала начать с событий по блокам. А логи контрактов имеет смысл включать уже после того, как ваша нода синхронизируется почти до актуальной высоты сети.

Структура проекта

Демонстрационное репозиторий выглядит следующим образом:

tron-event-subscription-demo/

block-watcher.js

transaction-watcher.js

package.json

package-lock.json

node_modules/

Репозиторий на GitHub: https://github.com/aziz1975/tron-event-subscription-demo

Как это работает (простое объяснение)

  • Java-tron может публиковать триггеры (события) во встроенный ZeroMQ-паблишер, если на ноде включена подписка на события.
  • Ваш Node.js-скрипт в этой схеме работает как ZeroMQ-подписчик (SUB socket).
  • Вы подписываетесь на нужный топик — например, block или transaction.
  • Каждый раз, когда нода публикует сообщение в этом топике, ваш скрипт получает его и выводит в консоль.

Два важных правила: (1) ноду должен быть запущен с флагом — es и (2) название топика вашего подписчика должно соответствовать теме, настроенной в config-nile.conf.

Предпосылки

  • Рабочая сборка java-tron FullNode (FullNode.jar) и конфигурационный файл Nile.
  • Node.js 22+
  • npm dependencies: zeromq

Ваши зависимости от package.json:

{

“dependencies”: {

“zeromq”: “⁶.5.0”

}

}

Шаг 1: Настройте подписку на события Nile FullNode

Отредактируйте свой конфигурационный файл Nile (пример пути):

nano /data/tron/config/config-nile.conf

В файле config-nile.conf убедитесь, что блок event.subscribe присутствует и в нем включена нативная очередь:

event.subscribe = {

native = {

useNativeQueue = true

bindport = 5555

sendqueuelength = 1000

}

contractParse = true,

topics = [

{ triggerName = “block”, enable = true, topic = “block” },

{ triggerName = “transaction”, enable = true, topic = “transaction” },

{ triggerName = “contractevent”, enable = false, topic = “contractevent” },

{ triggerName = “contractlog”, enable = false, topic = “contractlog” },

{ triggerName = “soliditylog”, enable = false, topic = “soliditylog” } ]

filter = {

fromblock = “”

toblock = “latest”

contractAddress = [ “” ]

contractTopic = [ “” ]

}
}

Начните только с блоков и транзакций. Как только вы подтвердите, что конвейер работает, включите contractlog или soliditylog для переводов TRC20.

Шаг 2: Запустите FullNode с включенной подпиской на события

Из вашего каталога сборки java-tron запустите:

java -Xmx8g -jar build/libs/FullNode.jar \

-c /data/tron/config/config-nile.conf \

— es

Флаг --es обязателен. Без него нода будет работать в обычном режиме, но не будет публиковать события в ZeroMQ.

Шаг 3: Установка и запуск вотчеров на Node.js

Установите зависимости в демонстрационном репозитории:

npm install

Запустите вотчер блоков:

node block-watcher.js

Press enter or click to view image in full size

-2

Запустите вотчер транзакций:

node transaction-watcher.js

Press enter or click to view image in full size

-3

Полезные команды для диагностики и операционных задач

Проверьте процесс ноды и убедитесь, что она запущена с флагом --es:

ps -ef | grep FullNode.jar | grep -v grep

Убедитесь, что порт ZeroMQ прослушивает (должен отображаться java на 5555):

linux:

ss -ltnp | grep 5555

macOS:

netstat -anp tcp | grep 555

Проверьте высоту локального блока (ваш FullNode):

curl -s -X POST http://127.0.0.1:8090/wallet/getnowblock | jq ‘.block_header.raw_data.number’

Проверьте текущую высоту блока в публичной сети Nile (для сверки):

curl -s -X POST https://nile.trongrid.io/wallet/getnowblock | jq ‘.block_header.raw_data.number’

Найдите транзакцию в вашей локальной базе данных по txid:

TXID=”…”

curl -s -X POST http://127.0.0.1:8090/wallet/gettransactionbyid \

-H ‘content-type: application/json’ \

-d “{\”value\”:\”$TXID\”}” | jq ‘.raw_data.contract[0].type’

Если в ответ приходит null, значит ваша нода ещё не знает об этой транзакции. Для Nile это обычно признак того, что нода сильно отстала от сети и её лучше поднять из snapshot, чтобы быстрее догнать актуальную высоту.

Диагностика и устранение проблем

Триггеры новых блоков работают, а триггеры транзакций не приходят:

  • Убедитесь, что топик транзакций включён в config-nile.conf.
  • После любых изменений в конфиге обязательно перезапустите ноду и ещё раз убедитесь, что запуск идёт с флагом --es.
  • Если нода сильно отстаёт от сети, вы можете получать меньше транзакционных событий, чем рассчитывали.

Никаких событий вообще

  • Проверьте, что команда запуска ноды действительно содержит флаг --es.
  • Проверьте, что 5555 порт действительно слушается (ss -ltnp | grep 5555).
  • Проверьте версию клиента: ваш ZeroMQ subscriber должен работать на zeromq v5. В этом репо используется zeromq@5.3.1.

Заключение

Теперь у вас есть рабочая база для подписки на события TRON с использованием Java-tron и ZeroMQ. Начните с триггеров блоков и транзакций, затем включите другие топики. Те же принципы и рекомендации применимы к основной сети TRON при условии, что используются соответствующие конечные точки сети.

Полезные ссылки

Nile portal: https://nileex.io/