Этот гайд показывает, как интегрировать The Graph Substreams с сетью TRON, чтобы в реальном времени захватывать ончейн-активность, преобразовывать данные и передавать их в операционные системы. Мы поднимаем стек (Substreams + PostgreSQL), стримим отфильтрованные события USDT, сохраняем их в таблицы. Тот же поток можно использовать для ончейн-свипов или для отправки сообщений в Kafka.
Почему Substreams для TRON?
Substreams обеспечивает высокую пропускную способность и удобную композицию модулей для извлечения и трансформации данных блокчейна. Для TRON это особенно полезно в сценариях: платёжные потоки (депозиты/свипы USDT TRC-20), аналитика DeFi, и операционные и мониторинговые дашборды.
Обзор архитектуры
- Конечные точки Substreams (StreamingFast): mainnet.tron.streamingfast.io:443 (нативные данные TRON), mainnet-evm.tron.streamingfast.io:443 (данные, совместимые с EVM).
- Пакет Substreams (SPKG): tron-foundational@v0.1.2 с такими модулями, как map_transactions и filtered_transactions.
- Скрипты для обработки данных: потребители на Node.js, которые анализируют файлы в формате JSONL и записывают данные в таблицы PostgreSQL.
- База данных и API: PostgreSQL + PostGraphile для выполнения запросов через GraphQL после загрузки данных.
- Дальнейшие действия: вы можете вызывать смарт-контракты (для перевода средств), публиковать данные в Kafka или запускать оповещения.
Структура проекта (пакет Substreams)
Предварительные условия
- Установлены Node.js и Yarn.
- Docker запущен (для PostgreSQL).
Однократная настройка
Клонируйте и перейдите в каталог пакета Substreams
git clone https://github.com/simbadMarino/scaffold-tron
cd scaffold-tron/packages/substreams
Установите Substreams CLI
MacOS
brew install streamingfast/tap/substreams
Linux
git clone https://github.com/streamingfast/substreams
cd substreams
go install -v ./cmd/substreams
Примечание: Для получения более подробной информации, пожалуйста, обратитесь к официальной документации по substreams.
Аутентификация с помощью StreamingFast
Вставьте и запустите следующие строки в консоли:
export STREAMINGFAST_KEY=”YOUR_STREAMINGFAST_API_KEY”
function sftoken {
export SUBSTREAMS_API_TOKEN=$(curl https://auth.streamingfast.io/v1/auth/issue-s — data-binary ‘{“api_key”:”’$STREAMINGFAST_KEY’”}’ | jq -r .token)
echo “Token set in SUBSTREAMS_API_TOKEN”
}
sftoken
Запустите PostgreSQL + PostGraphile
Перейдите в каталог packages/substreams и выполните следующее:
docker-compose up -d (legacy)
docker compose up -d
docker ps # expected: substreams-postgres-1, substreams-postgraphile-1
Загрузите базовый пакет TRON (один раз)
mkdir -p bin
substreams pack tron-foundational@v0.1.2 -o bin/tron-foundational-v0.1.2.spkg
substreams info bin/tron-foundational-v0.1.2.spkg
Быстрая демонстрация «Это работает»
Вспомогательные функции Yarn (быстрый путь)
yarn substreams:cleandb # optional
yarn substreams:demo # small range
yarn substreams:streamdb # fuller stream
Исходная команда CLI → Скрипт Node.js (явный)
substreams run ./bin/tron-foundational-v0.1.2.spkg map_transactions -emainnet.tron.streamingfast.io:443 -s 55000200 -t +100 | node scripts/stream-direct-to-db.js
Проверьте, что данные были успешно получены
docker exec -it substreams-postgres-1 psql -U tron_user -d tron_transactions -c “SELECT COUNT(*) FROM tron_transactions;”
Таргетированный захват данных по USDT (TRC-20)
Используйте серверные фильтры, чтобы ограничить поток только нужными вам событиями. Ниже приведены два примерных запроса, использованных в этом проекте — один для отправителя (from), второй для получателя (to). Просто подставьте свои адреса в поля from и to по необходимости.
Фильтр по отправителю — записываем списания (debits) в filtered_usdt_transactions
substreams run ./bin/tron-foundational-v0.1.2.spkg filtered_transactions -emainnet.tron.streamingfast.io:443 -s -1 -p ‘filtered_transactions=contract_type:TriggerSmartContract && contract_address:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t && from:TLj5jNLzaoR94c5WUH9uxpQAY3RZT6gh2y’ -o jsonl | node — max-old-space-size=8192 — expose-gc scripts/store-filtered-to-table.js
Фильтр по получателю — записываем поступления (credits) в filtered_usdt_to
substreams run -emainnet-evm.tron.streamingfast.io:443 ethereum-common@v0.3.3 filtered_events -s -1 -p
‘filtered_events=evt_addr:0xa614f803b6fd780986a42c78ec9c7f77e6ded13c &&
evt_sig:0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef’ -o jsonl | node — max-old-space-size=8192 — expose-gc scripts/store-filtered-to-table-credit.js TDqSquXBgUCLYvYC4XZgrprLK589dkhSCf
Обе команды передают данные в формате JSONL скриптам Node.js, которые анализируют выходные данные Substreams и вставляют строки в таблицы PostgreSQL. Репозиторий содержит два скрипта: scripts/store-filtered-to-table.js и scripts/store-filtered-to-table-credit.js.
Запрос к вашим данным
Примеры SQL-запросов
- docker exec -it substreams-postgres-1 psql -U tron_user -d tron_transactions -c “SELECT tx_hash,from_address,to_address,amount FROM filtered_usdt_transactions;”
- docker exec -it substreams-postgres-1 psql -U tron_user -d tron_transactions -c “SELECT * FROM filtered_usdt_to;”
- docker exec -it substreams-postgres-1 psql -U tron_user -d tron_transactions -c “SELECT COUNT(*) FROM tron_transactions;”
За пределами таблиц: действия в потоке данных
- Ончейн-свип: после того как зафиксирован нужный депозит, вызываем смарт-контракт, который свипает средства на омнибусный кошелёк.
- Kafka: публикуем каждое событие в Kafka-топик для антифрода, сверки (reconciliation) или сервисов алертинга.
- Алерты: шлём уведомления в Slack/по e-mail при срабатывании порогов или появлении аномалий.
В рамках этого проекта мы приводим конкретный пример сохранения отфильтрованных событий в таблицах PostgreSQL, но тот же поток данных может использоваться для выполнения действий как в блокчейне, так и вне его, в зависимости от ваших потребностей.
Операционные аспекты
- Идемпотентность: Substreams могут повторно отдавать блоки при реоргах или бэкфилле — используйте UPSERT и стабильные ключи.
- Бэкфиллы: обрабатывайте исторические окна с чекпойнтами.
- Пропускная способность: увеличивайте память Node.js(` — max-old-space-size`) и используйте пакетные вставки (batch inserts).
- Безопасность: храните API-ключи и доступы к БД как секреты; ограничивайте роли и права в базе.
- Ресурсы TRON: любой ончейн-свип или выплата потребляет энергию/пропускную способность — заранее планируйте спонсорство или стейкинг ресурсов.
Устранение неполадок
- Unauthorized: обновите токен с помощью `sftoken` перед запуском `substreams run`.
- Нет данных: ослабьте фильтры — для начала оставьте только `contract_address`.
- Проблемы с БД: используйте готовый docker-compose; для полного ресета выполните `docker-compose down -v && docker-compose up -d`.
- Неверный endpoint: проверьте, что используете правильный endpoint — нативный TRON или TRON EVM, в зависимости от кейса.
Заключение
С The Graph Substreams в сети TRON вы получаете реальный-тайм, масштабируемый доступ к ончейн-данным и понятный путь интеграции с продуктивными системами. Будь то телеметрия платежей, автоматические свипы или комплаенс-пайплайны — один и тот же поток данных может: сохраняться в базы, отправлять алерты командам, подпитывать аналитические системы, или запускать ончейн-действия. Единый стрим — множество боевых сценариев.