Прослушиватели событий с TronWeb: отслеживание передач TRC-20 на TRON — TRON Wiki

Прослушиватели событий с TronWeb: отслеживание передач TRC-20 на TRON

10 мин чтения · ⌘K поиск

Биржи, платежные шлюзы и игровые платформы USDT позволяют в режиме реального времени обнаруживать депозиты на TRON. Вместо того, чтобы опрашивать balanceOf каждую секунду, производственные системы прослушивают события Transfer, отправляемые контрактом USDT, когда средства поступают на отслеживаемые адреса.

В этом руководстве рассматриваются механика событий, запросы TronGrid, шаблоны TronWeb и масштабируемая архитектура.

TRC-20 Событие передачи

Код
event Transfer(address indexed from, address indexed to, uint256 value);

Topic0 (хеш подписи события):

⟦Т1⟧

Индексированные from и to включают фильтрацию по получателю — критично для депозитных кошельков.

USDT контракт: TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t

TronGrid API событий

Шаблон (точный путь проверьте в последней документации TronGrid):

⟦Т2⟧

Отфильтруйте параметры на стороне клиента или через API для адреса to, соответствующего вашему депозитному кошельку.

Заголовки: TRON-PRO-API-KEY

Разбивка на страницы с помощью fingerprint для исторической синхронизации.

Пример работника опроса

⟦Т3⟧

TronWeb события контракта

⟦Т4⟧

Поддержка варьируется — TronGrid REST более надежен для производственных индексаторов.

Адреса депозитов для каждого пользователя

Два шаблона:

УзорПлюсыМинусы
Один горячий кошелек + сопоставление суммОдин слушательРиск столкновения
Уникальный адрес HD-кошелька для каждого пользователяЧистая атрибуцияДополнительные клавиши для управления

Фильтр событий в поле to лучше всего работает с уникальными адресами.

Полный поток платежей: API принятия платежей USDT.

Идемпотентность {#идемпотентность}

Ключ: transaction_id + event_index или индекс журнала.

Перед кредитованием:

  1. Проверьте БД на наличие существующего txid.
  2. Проверьте транзакцию SUCCESS
  3. Подтвердите, что контракт официальный USDT
  4. Кредитный пользователь

Масштабирование {#масштабирование}

Большой объем:

  • Запустите специальный индексатор, использующий TronGrid, или автономный плагин событий.
  • Ставить события в очередь в Kafka/RabbitMQ
  • Горизонтальные работники с разделением по диапазону адресов
  • Архивировать старые курсоры в Redis.

Ожидаемая задержка

TRON Время блока ~3 с → интервал опроса 3–5 с (разумно). Более быстрый UX показывает «подтверждение», пока N блоков не затвердеют.

Индексация событий масштабирования

При большом объеме запустите специальный индексатор, сохраняющий события в PostgreSQL, а не опрашивайте TronGrid из обработчиков запросов. Дедуп от transactionId + logIndex. Реорганизация цепочки управления — редкость на TRON, но индекс blockNumber для логики воспроизведения.

Ссылка на подпись события передачи

USDT Тема события передачи 0 (keccak256): ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. Фильтр topic2 для адреса получателя (дополняется до 32 байтов). Декодируйте поле data как сумму uint256. Неправильное заполнение приводит к пропущенным депозитам — используйте декодер TronWeb ABI, а не ручное шестнадцатеричное разделение, где это возможно.

Контрольный список устранения неполадок

Если что-то пойдет не так на TRON, отнеситесь к этому как к проблеме структурированной отладки: подтвердите точный txid в цепочке, проверьте адрес целевого контракта и только затем решите, можно ли устранить сбой. В TRON многие «загадочные» проблемы — это просто одна из следующих: неправильная сеть (основная сеть или тестовая сеть), неправильный контракт токена (поддельный USDT / токены с одинаковым названием), недостаточность ресурсов (OUT_OF_ENERGY / пропускная способность) или задержка пользовательского интерфейса/индексатора между кошельком и проводником.

Начните с этих цепочек проверок:

  • Всегда копируйте полный txid/хэш из своего кошелька или проводника.
  • Подтвердите статус результата передачи на TronScan (SUCCESS, REVERT, OUT_OF_ENERGY или все еще в ожидании).
  • Проверьте, соответствует ли адрес получателя/договора тому, что вы намеревались отправить.
  • Если это вызов контракта, убедитесь, что селектор функций и параметры соответствуют стандарту токена, который, по вашему мнению, вы используете (TRC-20 vs TRC-10 vs BEP-20 на BSC).

Затем примените путь исправления для вашей категории:

  • Подтвердите статус и параметры транзакции.
  • Проверка адресов (контракт токена, получатель, маршрутизатор/отправитель).
  • Добавляйте или делегируйте ресурсы (энергию/пропускную способность), если сбой связан с ресурсами.

Распространенные ошибки

Эти шаблоны вызывают большинство сбоев на уровне пользователя:

  • Использование адресов основной сети в тестовой сети (или наоборот).
  • Копирование символа токена вместо фактического адреса контракта TRC-20.
  • Подписание неправильного адреса одобрения/платежа, поскольку ссылка пользовательского интерфейса является вредоносной или устаревшей.
  • Повторная попытка без изменения ошибочного ввода (например, REVERT продолжает возвращаться до тех пор, пока вы не исправите параметр).

Если вы не уверены, не «просто отправьте еще раз». Внесите одно контролируемое изменение, проверьте на TronScan, затем продолжайте.

Часто задаваемые вопросы

Как узнать, действительно ли транзакция подтверждена?

Используйте TronScan и проверьте статус результата передачи. Ярлыки кошелька «ожидающие» могут отставать; Статус цепочки является источником истины. Скопируйте txid и проверьте SUCCESS/REVERT/OUT_OF_ENERGY, а не только текст пользовательского интерфейса.

Почему пользовательский интерфейс отличается от TronScan?Некоторые кошельки и децентрализованные приложения используют разные индексаторы или уровни кэша. Короткая задержка между трансляцией и индексированием является нормальной; сравните txid и подождите, пока цепочка стабилизируется, прежде чем сделать вывод об ошибке.

Что мне делать после REVERT?

Остановитесь и декодируйте неудачный вызов. Большинство ошибок REVERT вызваны недопустимыми параметрами, неправильным адресом контракта, отсутствием утверждений или несоответствием между стандартом токена и методом. Устраните причину и подпишите заново.

Безопасно ли подписывать неограниченное разрешение?

Неограниченное одобрение безопасно только для проверенных вами адресов доверенных отправителей (проверенный источник, правильный маршрутизатор и ожидаемый контракт токена). Для тестирования отдавайте предпочтение ограниченному утверждению и отзыву после завершения.

Какие ресурсы требуются TRON для контрактных вызовов?

Выполнение смарт-контракта в основном потребляет энергию, а байты транзакций потребляют пропускную способность. Если вы получили OUT_OF_ENERGY, добавьте/заморозьте/делегируйте Энергию. Если пропускная способность исчерпана, сосредоточьтесь на сохранении достаточного количества жидкости TRX для байтов и распределения ресурсов.

Как я могу уменьшить количество обращений в службу поддержки?

Покажите пользователям четкое сообщение «что произошло» на основе статуса цепочки и дайте прямую ссылку на соответствующее руководство (ожидание, сбой, отсутствие энергии или проверка). Сохраните txid, чтобы можно было быстро выполнить согласование.

Похожие руководства {#связанные}

Часто задаваемые вопросы

Какое событие генерирует USDT при передаче?

TRC-20 Transfer(индексированный адрес, индексированный адрес, значение uint256) — theme0 — это хеш подписи события keccak256.

Может ли TronWeb подписаться на Ethereum, как WebSocket?

Инструмент TRON обычно использует опрос конечных точек событий TronGrid или запуск собственного плагина событий — не идентично eth_subscribe.

Как далеко назад я могу запрашивать события?

TronGrid сохраняет проиндексированные события — используйте нумерацию страниц для полной синхронизации истории при новом развертывании.

Создают ли внутренние транзакции Transfer?

USDT transfer — стандартный вызов TRC-20 — появляется в журналах при успехе. Анализ логов родительской передачи.

Фейковые события USDT?

Строго фильтруйте contract_address — фишинговые токены генерируют события с одинаковыми именами из неправильных контрактов.