ENЛичный кабинет

Energy и Bandwidth в TRON: за что платит каждый ресурс

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

Два счётчика, два счёта

EnergyBandwidth
За что платитИсполнение кода смарт-контрактаРазмер транзакции в байтах
Кому нуженUSDT и любым другим переводам TRC-20, обменам, approveВсем транзакциям без исключения
Бесплатный лимитНет600 единиц на аккаунт в сутки
Курс сжигания при нехваткеЗадан getEnergyFee, ~0,0001 TRX за единицу0,001 TRX за единицу
Обычный перевод USDT~64 285, либо ~130 285 первому получателю~345
Как получитьЗастейкать TRX, арендовать либо позволить сети сжечь ваши TRXТе же три пути, но обычно хватает суточного лимита

Energy: плата за вычисления

Energy измеряет работу виртуальной машины TRON. У каждой операции, которую исполняет контракт, есть цена, и их сумма — это то, что расходует ваша транзакция.

Поэтому перевод USDT дорогой, а перевод TRX — нет. Перемещение TRX протокол выполняет сам как обновление баланса. Перемещение USDT означает просьбу к контракту обновить собственный реестр, и вы платите за каждый шаг этой работы.

  • Бесплатного лимита энергии не существует. У адреса, который никогда не стейкал и не арендовал, её ноль.
  • Энергия — это пул адреса, а не резерв под конкретную транзакцию. Всё, что вы подписываете, черпает из одного пула.
  • Застейканная и делегированная энергия восстанавливается примерно за 24 часа после расхода.

Bandwidth: плата за место

Bandwidth измеряет байты. Транзакция, сериализуемая в 345 байт, требует 345 Bandwidth независимо от того, что она делает: вызов контракта и обычный перевод тарифицируются по размеру одинаково.

Каждому аккаунту ежедневно даётся 600 бесплатных Bandwidth, лимит обновляется скользящим окном. Этого с запасом хватает на один перевод TRC-20 и совсем не хватает на два — поэтому неожиданностью обычно оказывается именно второй перевод за день.

В абсолютных числах Bandwidth дёшев: около 0,345 TRX за перевод, если приходится сжигать. Проблемы он создаёт не ценой, а тем, что кошельку с арендованной энергией и нулём TRX платить за него нечем.

Почему один не заменяет другой

Это отдельные счётчики с отдельным учётом, и сеть проверяет оба. Наличие 650 000 энергии не даёт ни одного байта Bandwidth, а полный суточный лимит Bandwidth не исполнит ни строчки кода контракта.

  • Энергии много, Bandwidth и TRX нет — транзакция отклоняется ещё до исполнения.
  • Bandwidth много, энергии и TRX нет — вызов контракта падает с OUT_OF_ENERGY, а комиссию всё равно списывают.
  • Не хватает обоих, но есть TRX — транзакция пройдёт, и вы заплатите по собственному курсу пересчёта сети за оба ресурса, а это самый дорогой способ совершать операции.

Примеры расчёта

ТранзакцияEnergyBandwidthПримечание
Отправить TRX0~270Покрывается бесплатным лимитом
Отправить USDT существующему держателю~64 285~345Первый перевод за сутки по Bandwidth бесплатен
Отправить USDT первому получателю~130 285~345Новая ячейка хранилища удваивает энергию
Разрешить контракту тратить USDT (approve)~15 000–30 000~350Зависит от контракта
Отправить на неактивированный адресКак выше~100Плюс 1 TRX за создание аккаунта

Как получить каждый из них

Три пути к энергии не одинаково применимы к Bandwidth, и эту асимметрию полезно знать до того, как строить на ней планы.

ПутьEnergyBandwidth
Ничего не делатьСеть сжигает TRX по курсу getEnergyFee600 бесплатных единиц в сутки, дальше сжигается TRX
Застейкать TRXНачисляет энергию пропорционально стейку, восстанавливается ежедневноНачисляет Bandwidth так же, но бесплатного лимита обычно достаточно
АрендоватьОбычный выбор: статья крупная, предсказуемая, её стоит оптимизироватьВозможно и осмысленно в основном при высокой частоте отправок

На практике почти все оптимизируют энергию и не думают о Bandwidth, потому что энергия — счёт на два порядка больше. Bandwidth становится интересен, только когда с одного адреса уходит много транзакций в день и бесплатного лимита перестаёт хватать.

Как посмотреть свои ресурсы

Оба счётчика видны в блокчейне, поэтому гадать, что есть на адресе, не нужно.

  1. В TronScan откройте адрес и посмотрите панель Resources. Она показывает Energy и Bandwidth в формате «доступно из всего» и отделяет собственные ресурсы от делегированных вам.
  2. Программно вызовите getaccountresource на любой ноде. Он вернёт EnergyLimit и EnergyUsed, а также freeNetLimit, freeNetUsed, NetLimit и NetUsed. Доступная энергия — это EnergyLimit минус EnergyUsed; доступный Bandwidth — бесплатный и застейканный лимиты за вычетом израсходованного.
  3. Перед партией платежей проверяйте оба числа, а не одно. Кошелёк, прошедший проверку по энергии и не прошедший по Bandwidth, встанет ровно так же.

Делегированные ресурсы отображаются в той же панели, что и собственные, поэтому за минуту до истечения аренды адрес выглядит обеспеченным, а через минуту — пустым. Если важен тайминг, читайте цифры непосредственно перед подписью.

Как рассчитать оба

  1. Энергию считайте от получателя, а не от суммы. Держит USDT — закладывайте около 65 000. Получатель неизвестен или получает впервые — около 131 000.
  2. По Bandwidth рассчитывайте на один бесплатный перевод в сутки. Дальше держите TRX из расчёта примерно 0,35 TRX за перевод.
  3. Держите рабочий запас 5–10 TRX на любом адресе, который регулярно отправляет. Он покрывает Bandwidth, активацию адреса и округления и убирает целый класс сбоев.
  4. Для всего автоматического симулируйте каждый вызов через triggerconstantcontract и считайте от возвращённого energy_used, а не от константы.

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