Приём USDT TRC20 в боте или сервисе: адреса, комиссии, ошибки

Как принимать USDT TRC-20 в Telegram-боте, магазине или сервисе: схема с адресом на клиента, проверка платежа, подтверждения, сбор средств с депозитных адресов и сколько энергии на это уходит.

Overtron Editorial

Коротко: приём USDT TRC20 в боте или сервисе сам по себе ничего не стоит — за входящий перевод платит отправитель. Деньги уходят позже: когда вы собираете USDT с депозитных адресов на основной кошелёк, каждый такой перевод расходует около 64 500–65 000 энергии (если на основном кошельке уже есть USDT), а без энергии сеть сжигает около 6,5 TRX. Ниже — как выбрать схему адресов, как надёжно засчитывать платёж и где сервисы чаще всего теряют деньги.

Стеклянный платёжный терминал с ботом сверху, в который сходятся изумрудные потоки монет из нескольких кошельков
Приём USDT TRC20: платежи приходят на разные адреса и собираются в один кошелёк

Как устроен приём USDT TRC20: что видит сеть

USDT в сети TRON — это токен стандарта TRC-20, то есть смарт-контракт. Когда клиент платит вашему боту, он вызывает у контракта функцию transfer: «перевести столько-то USDT на такой-то адрес». Контракт меняет балансы и записывает в блокчейн событие Transfer с адресом отправителя, адресом получателя и суммой.

Для приёма платежей из этого следуют три вещи. Первая: у перевода USDT нет поля «номер заказа», на которое можно надёжно опереться, — сервис узнаёт, кто заплатил, только по адресу получателя или по сумме. Вторая: сумма хранится в минимальных единицах, у USDT TRC-20 их шесть знаков после запятой, поэтому 1 USDT в данных события — это 1 000 000. Третья: факт оплаты — это именно событие Transfer у официального контракта USDT, а не что-то другое в истории адреса.

Две схемы: адрес на каждого клиента или один общий адрес

Адрес на клиента или на счёт

Сервис выдаёт каждому пользователю (или каждому счёту) свой депозитный адрес. Всё, что пришло на этот адрес, засчитывается его владельцу.

  • Плюс: платёж однозначно привязан к клиенту, сумма может быть любой, ошибки с «чужой» оплатой почти исключены.
  • Минус: средства разбросаны по множеству адресов, и их нужно собирать на основной кошелёк. Каждый сбор — отдельная транзакция со своей комиссией.
  • Минус: адресов становится много, и на каждом, с которого вы отправляете, нужны энергия или TRX.

Один адрес и уникальная сумма

Все платят на один кошелёк, а сервис отличает платежи по сумме: к счёту на 100 USDT добавляется «хвост» вроде 100,0137. Сбор средств не нужен — деньги сразу лежат в одном месте.

  • Плюс: нет расходов на сбор с депозитных адресов.
  • Минус: клиент обязан перевести сумму точно. Биржи и некоторые кошельки удерживают свою комиссию при выводе, и на адрес приходит меньше — платёж не находится автоматически.
  • Минус: два счёта с одинаковой суммой в одно время дают путаницу, поэтому у суммы должен быть срок жизни.

Для бота с регулярными пополнениями обычно выбирают адрес на клиента: он устойчивее к ошибкам пользователей. Схема с суммой подходит для разовых счетов и небольших объёмов.

Как засчитывать платёж и не попасть на подделку

Главная ошибка самописных интеграций — верить первому, что пришло в историю адреса. Правильная проверка платежа выглядит так:

  • Контракт. Событие должно прийти от официального контракта USDT в TRON — TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t (сверяется на Tronscan). Токен с названием «USDT» и тем же значком, но с другим контрактом, — это не оплата.
  • Тип события — Transfer. Approve (разрешение на списание) не переводит деньги, даже если в нём огромная сумма. Его нельзя засчитывать как депозит.
  • Получатель — ваш адрес, сумма — в минимальных единицах с учётом шести знаков.
  • Статус транзакции — успешный. Неудачная транзакция тоже попадает в блокчейн, но баланс не меняет.
  • Блок необратим. Засчитывайте платёж, когда блок стал solidified (подтверждён валидаторами), а не сразу после появления транзакции.
  • Идемпотентность. Ключ платежа — хэш транзакции плюс номер события в ней. Повторная обработка того же события не должна зачислять деньги второй раз.

Отдельная тема — «флэш» и поддельные USDT, которыми пытаются оплатить сервисы: как они выглядят и как их отличить, разобрано в статье flash USDT TRC20 и поддельный USDT.

Подтверждения и скорость зачисления

Блок в TRON выходит раз в 3 секунды, поэтому транзакция видна в сети почти сразу. Но «видна» и «необратима» — разные состояния. Для небольших сумм многие сервисы зачисляют после первого появления в блоке, для крупных — только после того, как блок стал необратимым. У публичных API TRON для этого есть отдельные методы чтения подтверждённых данных (walletsolidity).

Как часто опрашивать сеть, зависит от выбранного API. Бесплатные тарифы публичных нод ограничивают число запросов в секунду, и сервис, который раз в секунду опрашивает тысячи адресов, быстро упирается в лимит. Надёжнее подписаться на события контракта USDT или читать новые блоки целиком и фильтровать переводы на свои адреса, чем опрашивать каждый адрес по отдельности.

Сколько стоит приём USDT TRC20 на самом деле

Входящий перевод для вас бесплатен: энергию и TRX за него тратит отправитель. Расходы появляются, когда деньги нужно сдвинуть с места.

  • Сбор с депозитного адреса на основной кошелёк, где уже есть USDT: около 64 500–65 000 энергии на перевод, без энергии — около 6,5 TRX.
  • Перевод на пустой адрес (например, новый холодный кошелёк): энергии нужно примерно вдвое больше, около 131 000, без энергии — около 13 TRX.
  • Bandwidth: простой перевод занимает около 345–360 bandwidth. Каждому активированному адресу сеть даёт 600 бесплатных bandwidth в сутки, поэтому одного-двух переводов в день с адреса обычно хватает без доплаты.
  • Выплаты клиентам и возвраты — обычные исходящие переводы по тем же правилам.

Стоимость перевода не зависит от суммы. Сбор 5 USDT с адреса стоит столько же, сколько сбор 5 000. Поэтому при схеме «адрес на клиента» мелкие депозиты могут обходиться дороже, чем приносят, если собирать их по одному.

Комиссия берётся за транзакцию, а не за сумму. Экономика приёма платежей — это экономика сборов: реже, крупнее и с энергией.

Как собирать USDT с депозитных адресов дешевле

  • Порог сбора. Не собирайте каждый депозит сразу — дождитесь, пока на адресе накопится сумма, ради которой стоит тратить энергию.
  • Основной кошелёк никогда не обнуляйте. Пока на нём есть USDT, каждый сбор идёт по обычному тарифу, а не вдвое дороже.
  • Энергия вместо сжигания TRX. Перед серией сборов делегируйте энергию на депозитные адреса — так не нужно держать TRX на каждом из них.
  • Bandwidth в запасе. Если с одного адреса уходит больше пары транзакций в сутки, бесплатного лимита может не хватить, и сеть сожжёт немного TRX за bandwidth.
  • Расписание. Сборы удобно делать пачкой в одно время, а не реагировать на каждый входящий платёж.

Если сборов и выплат много, энергию можно заказывать прямо из кода сервиса — как это устроено, разобрано в статье аренда энергии TRON по API. Для ручного режима подойдёт аренда энергии трон на сайте: энергию делегируют на нужный адрес на выбранный срок, приватные ключи никому не передаются. Цена зависит от рынка и срока.

Логика порядка переводов при консолидации — с какого адреса начинать и почему не стоит обнулять получателя — подробно описана в статье перевод USDT между своими кошельками.

Типичные ошибки сервисов при приёме платежей USDT

  • Засчитали approve или перевод поддельного токена как оплату.
  • Засчитали платёж до того, как блок стал необратимым, и выдали товар по транзакции, которой потом не оказалось в цепочке.
  • Нет идемпотентности: при перезапуске обработчика один и тот же перевод зачислился дважды.
  • Клиент отправил USDT в другой сети (ERC-20, BEP-20) на адрес «похожего вида». Предупреждайте в интерфейсе: принимаем только TRC-20.
  • Недоплата из-за комиссии биржи при схеме с уникальной суммой — нужен ручной разбор или допуск по сумме.
  • Депозитные адреса без энергии и TRX: деньги пришли, а собрать их нечем.
  • Ключи всех депозитных адресов лежат на том же сервере, что и бот. Утечка сервера означает потерю всех средств. Держите ключи отдельно от публичной части сервиса и собирайте средства на кошелёк, ключи которого на сервере не хранятся.

AML и заморозка: о чём помнить при приёме USDT

Tether может заморозить USDT на конкретном адресе. Если на ваш депозитный адрес пришли средства, связанные с мошенничеством, риск ложится уже на вас: адрес могут заблокировать, а биржа — отказаться принимать такие USDT. Сервисы с заметным оборотом проверяют входящие платежи AML-сервисами и держат правила на случай «грязного» депозита: удержание, возврат отправителю, ручная проверка.

Как проверить адрес и средства на риск заморозки, рассказано в статье как проверить USDT TRC-20 на чистоту.

Чек-лист запуска приёма USDT TRC20 в боте

  • Выбрана схема: адрес на клиента или общий адрес с уникальной суммой.
  • Платёж засчитывается только по событию Transfer официального контракта USDT, с успешным статусом и на ваш адрес.
  • Есть правило подтверждений: когда зачислять мелкие и крупные суммы.
  • Ключ платежа — хэш транзакции и номер события; повторное зачисление невозможно.
  • Есть порог и расписание сбора с депозитных адресов; основной кошелёк не обнуляется.
  • Есть источник энергии для сборов и выплат — свой стейк TRX или аренда.
  • Ключи депозитных адресов хранятся отдельно от бота.
  • В интерфейсе явно написано: только сеть TRC-20.

Если ваш бот или сервис уже принимает USDT и регулярно собирает средства, энергию на сборы и выплаты удобно брать в Telegram-боте @overtronbot: энергия делегируется на нужные адреса, ключи остаются у вас.

Читайте также

FAQ

Как принимать USDT в боте Telegram?

Бот выдаёт клиенту адрес TRON (свой на каждого клиента или общий с уникальной суммой), следит за событиями Transfer контракта USDT на этих адресах и зачисляет баланс после подтверждения транзакции.

Платит ли сервис комиссию за входящий USDT TRC20?

Нет. За входящий перевод платит отправитель. Сервис тратит энергию или TRX, когда сам отправляет USDT: собирает средства с депозитных адресов, делает выплаты или возвраты.

Можно ли принимать USDT на один адрес от всех клиентов?

Можно, если отличать платежи по уникальной сумме. Но клиенты, выводящие с биржи, часто присылают меньше из-за комиссии биржи, поэтому такой схеме нужен ручной разбор недоплат.

Сколько энергии уходит на сбор USDT с депозитного адреса?

Около 64 500–65 000 энергии, если на кошельке-получателе уже есть USDT, и примерно вдвое больше, около 131 000, если он пустой. Без энергии сеть сжигает около 6,5 и 13 TRX соответственно.

Через сколько можно засчитывать платёж USDT TRC20?

Транзакция появляется в блоке за секунды — блок TRON выходит раз в 3 секунды. Надёжнее засчитывать, когда блок стал необратимым (solidified); крупные суммы — только так.

Как отличить настоящий USDT от поддельного токена?

Смотрите на адрес контракта, а не на название и значок. Официальный USDT в TRON — контракт TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t. Любой другой токен с именем USDT оплатой не является.

Почему нельзя засчитывать approve как платёж?

Approve только разрешает адресу списывать токены в будущем, деньги при этом не переводятся. Засчитывать нужно лишь успешное событие Transfer на ваш адрес.

Нужен ли TRX на каждом депозитном адресе?

Чтобы отправить USDT с адреса, на нём нужна энергия или TRX на сжигание. Вместо хранения TRX на каждом адресе можно делегировать энергию перед сбором.