Сколько TRX нужно кошельку, чтобы отправлять USDT
У кошелька, отправляющего USDT в TRON, есть два числа, которые нужно выставить правильно, и их легко принять одно за другое. Первое — комиссия: сколько перевод забирает со счёта. Второе — TRX, которые должны лежать на счёте, и лимит, который должна нести транзакция, чтобы перевод вообще прошёл. Если на кошельке есть энергия, TRX нужны только на байты: ни одного на первый перевод суток и около 0.345 TRX на каждый следующий. Без энергии нужно 6.5 TRX на каждый перевод получателю с USDT и 13.1 TRX получателю без него, плюс те же байты. И в том и в другом случае fee_limit транзакции должен дотягивать до полного сжигания. Кошелёк, пополненный до размера комиссии и не добравший второго числа, терпит отказ, который всё равно стоит TRX.
Нода берёт меньший из двух лимитов
Отправка USDT — это вызов смарт-контракта, и перед запуском вызова нода решает, сколько энергии он вправе потратить. Она считает две цифры и берёт меньшую. Первая — сколько может оплатить счёт: энергия, которая на нём уже есть, плюс столько единиц, сколько купили бы его TRX по протокольной ставке 100 sun за каждую. Вторая — сколько разрешает транзакция: её fee_limit, делённый на те же 100 sun.
Отсюда два правила. TRX на счёте должны покрывать всю энергию, которую перевод сожжёт, потому что баланс, которого на сжигание не хватает, ограничивает вызов меньшим, чем ему нужно. И fee_limit должен это сжигание разрешать, потому что низкий лимит ограничивает вызов так же жёстко, сколько бы TRX ни стояло за ним. Не хватит любого из двух — вызов остановится на середине с OUT_OF_ENERGY, а TRX, сожжённые по дороге, останутся сожжёнными (что означает этот результат).
Вторая цифра ловит кошельки, которые арендуют энергию или стейкают. Энергию, которая уже есть на счёте, нода тоже засчитывает в fee_limit — так же, как TRX, которые сожгла бы. Транзакция, подписанная без fee_limit, несёт лимит ноль, а нулевой лимит не позволяет вызову потратить вообще никакой энергии — ни делегированной, ни сожжённой. Что бы ни говорило предупреждение самого кошелька, нода считает именно так: собственной энергии счёта на вызов не хватит, нода сожжёт TRX на остальное, и перевод пройдёт, лишь если баланс и лимит оба до этого дотянутся.
Три попытки одного кошелька в основной сети
Сторону правила про fee_limit можно наблюдать в основной сети. 6 октября 2026 года, просматривая публичную запись контракта USDT, мы наткнулись на одного отправителя, который трижды меньше чем за сорок минут пытался выполнить один и тот же перевод. Переводу требовалось 130,285 единиц энергии — цифра для получателя без USDT, — а собственной энергии на счёте не было, так что каждую единицу приходилось покупать сжиганием TRX. Каждая строка — собственная запись этой транзакции.
| Попытка, 6 октября 2026 года | fee_limit | Результат | Потрачено энергии | Взято TRX |
|---|---|---|---|---|
| Первая | 1.1 TRX | OUT_OF_ENERGY | 11,000 единиц | 1.1 TRX |
| Вторая | нет | OUT_OF_ENERGY | 0 единиц | 0.339 TRX |
| Третья | 13.046 TRX | SUCCESS | 130,285 единиц | 13.3735 TRX |
Первая попытка остановилась ровно на 11,000 единиц — это её fee_limit, делённый на 100 sun. Счёт мог оплатить и больше: на третьей попытке он оплатил всё сжигание целиком, а по его записи видно, что TRX между попытками не приходили. Вторая попытка не несла fee_limit, и её квитанция показывает нулевой лимит уже на первой инструкции контракта. Она не потратила энергии, не сдвинула USDT и всё равно оплатила свои байты. Третья была подписана с fee_limit чуть выше сжигания и прошла.
Этот отправитель был исключением. Из 12,000 подряд идущих вызовов USDT, которые мы насчитали во второй половине того же дня, каждый нёс fee_limit.
Какой fee_limit ставить
fee_limit ограничивает энергию, которую вызов вправе использовать, — и имеющуюся, и сожжённую, — а сам по себе ничего не стоит. Перевод, энергия которого уже лежит на кошельке, не сжигает из неё ничего, поэтому щедрый лимит на кошельке с энергией бесплатен. Значение, которое никогда не обрывает перевод на полпути, — большее сжигание, 13.1 TRX. Лимита в 6.5 TRX хватает, только пока у получателя USDT есть и в тот момент, когда перевод дойдёт, а получатель с пустым балансом стоит большую цифру независимо от того, держал ли он вообще когда-нибудь USDT (откуда берутся эти две цифры). Лимит ниже того, что нужно переводу, останавливает вызов даже на кошельке, где есть вся нужная энергия, потому что нода засчитывает эту энергию в лимит.
Когда мы отправляем в сеть подписанный вами перевод, в mode B, мы проверяем его по этому правилу ещё до покупки энергии. fee_limit, которого не хватает на энергию перевода по текущей цене сети, отклоняется ответом 400 invalid_request с details.reason, равным fee_limit_too_low. Оценка этого одного перевода возвращает его сжигание как burn_cost_trx, и лимит не ниже этого значения проходит всегда.
Лимит важнее всего на переводе, у которого цена меняется после того, как его оценили. Получатель, у которого USDT был, когда вы его проверяли, и который опустошил баланс к моменту, когда перевод дойдёт, стоит большую цифру. Если на кошельке энергия под меньшую цифру, нода сжигает разницу из TRX. Баланс должен покрыть эту разницу, а fee_limit — всю большую цифру целиком, потому что энергия, лежавшая на кошельке, засчитывается в него тоже. Не хватит любого из двух — перевод остановится с OUT_OF_ENERGY, а сожжённое по дороге останется сожжённым.
Когда на кошельке есть энергия, остаётся пропускная способность
Энергия оплачивает вызов контракта и больше ничего. Байты транзакции меряются отдельно — как пропускная способность (два счётчика рядом). Каждый счёт каждые сутки получает 600 байт пропускной способности бесплатно, чего хватает примерно на один перевод USDT. Сверх этого сеть сжигает TRX за всю пропускную способность, выставленную каждой транзакции, по ставке вдесятеро выше энергетической: один байт стоит столько же, сколько десять единиц энергии.
Переводу USDT выставляется несколько сотен байт пропускной способности. Тот, что мы отправили и замерили 2 сентября 2026 года, получил 345, а три попытки выше — от 339 до 345. Поэтому, когда бесплатная норма уходит на первый перевод суток, каждый следующий перевод платит за свои байты в TRX — независимо от того, арендована его энергия, застейкана или сожжена. Кошелёк, на котором вообще нет TRX, всё же может отправить первый перевод суток на делегированной энергии: байты оплатит бесплатная норма; для второго TRX на счёте уже нужны (отправка без TRX на кошельке).
Платежи вне самого перевода
Кошелёк-отправитель должен существовать в сети, прежде чем на него можно делегировать энергию (что такое активация), а перевод TRX на адрес, которого сеть никогда не видела, как раз и создаёт для него счёт. Цену создания счёта задают два параметра сети. Мы не активировали адрес, чтобы посмотреть, платит ли один такой перевод только первый из них или оба, поэтому таблица перечисляет оба, а их сумма — то, что нужно держать на это. Ещё два параметра задают цену мемо в транзакции и транзакции, подписанной по разрешению с мультиподписью. В отличие от активации, оба взимаются с каждой транзакции, которая несёт мемо или разрешение с мультиподписью, поэтому горячий кошелёк, подписывающий так, добавляет этот параметр к каждому переводу из таблицы ниже. Ни того ни другого мы не отправляли, и эти строки дают параметр и ничего замеренного.
| Параметр сети, прочитан 3 сентября 2026 года | Цена чего | Значение |
|---|---|---|
getEnergyFee | Одна единица энергии, сожжённая | 100 sun |
getFreeNetLimit | Бесплатная пропускная способность счёта в сутки | 600 байт |
getTransactionFee | Один байт пропускной способности сверх бесплатной нормы | 1,000 sun |
getCreateNewAccountFeeInSystemContract | Создание нового счёта в системном контракте | 1 TRX |
getCreateAccountFee | Создание счёта | 0.1 TRX |
getMemoFee | Мемо в транзакции | 1 TRX |
getMultiSignFee | Транзакция с мультиподписью | 1 TRX |
Запас на день переводов
Если сложить всё вместе, TRX, которые кошелёк-отправитель расходует за сутки, зависят от того, откуда у него энергия, а когда он сжигает — от того, какому получателю платит. Таблица ниже исходит из 345 байт пропускной способности на перевод, бесплатной нормы, потраченной на первый перевод суток, и параметров выше. Кошелёк, который сжигает, платит 6.5 TRX или 13.1 TRX энергии на каждый перевод и свои байты начиная со второго. Кошелёк с энергией платит только байты.
| Переводов в сутки | Энергия на кошельке, арендованная или застейканная | Энергии нет, у получателей есть USDT | Энергии нет, у получателей нет USDT |
|---|---|---|---|
| 1 перевод | 0 TRX | 6.5 TRX | 13.1 TRX |
| 10 переводов | 3.105 TRX | 68.105 TRX | 134.105 TRX |
| 100 переводов | 34.155 TRX | 684.155 TRX | 1344.155 TRX |
| Сверху — на одного получателя, который опустошает свой USDT после оценки | 6.6 TRX | 6.6 TRX | 0 TRX |
Арендованная энергия оплачивается с вашего баланса у нас, а её цена за перевод — на странице цен. Застейканная энергия стоит TRX, заблокированных ради её получения, а это вне таблицы (стейкинг против аренды). Суточная цифра — то, что пополнение раз в сутки должно оставить на кошельке. Перед любым отдельным переводом нижняя граница меньше: сжигание этого перевода, если он сжигает, и его байты.
Последняя строка — запас на случай энергии, купленной под меньшую цифру. Auto-refill после переводов кошелька доводит его обратно примерно до 131,000 единиц, а этого хватает получателю любого вида, поэтому на таком кошельке получатель, которому окажется нужна большая цифра, покрыт энергией, и запас падает до нуля (как работает Auto-refill). Каким бы ни был источник энергии, fee_limit всё равно должен покрывать всю энергию перевода — это 13.1 TRX для получателя, у которого USDT может не оказаться в тот момент, когда перевод дойдёт.
Мы не замеряли, как быстро бесплатная норма возвращается в течение суток; таблица предполагает, что на ней едет только первый перевод суток, поэтому для кошелька, который растягивает переводы, цифры пропускной способности — верхняя граница.
Лимит каждого перевода отмеряйте по сжиганию, с которым его сверит нода: POST /v1/estimate и его burn_cost_trx в справочнике API →