Формула
Итог = израсходованная Energy × цена энергии, плюс байты транзакции × цена Bandwidth, плюс комиссия за активацию, если адрес назначения ещё не существует в сети. Каждое слагаемое равно нулю, если соответствующего ресурса у вас достаточно.
| Плата | Параметр | Текущее значение |
|---|---|---|
| Energy | getEnergyFee | 100 сан = 0,0001 TRX за единицу |
| Bandwidth | getTransactionFee | 1 000 сан = 0,001 TRX за байт |
| Бесплатный Bandwidth | getFreeNetLimit | 600 единиц в сутки |
| Активация нового аккаунта | getCreateNewAccountFeeInSystemContract | 1 000 000 сан = 1 TRX |
Это параметры управления сетью, а не константы. Цену энергии, в частности, уже несколько раз понижали голосованием. Читайте их вживую, а не доверяйте таблице из статьи — как это сделать, в следующем разделе.
Как прочитать параметры самому
Все значения выше публичны. Вызовите getchainparameters на любой ноде TRON — и получите текущий набор пар «ключ — значение» в санах.
- Обратитесь к эндпоинту wallet/getchainparameters на публичной ноде.
- Найдите в ответе getEnergyFee. Разделите на 1 000 000, чтобы перевести саны в TRX за единицу энергии.
- То же самое для getTransactionFee — это ваша цена за байт Bandwidth.
- Если что-то из этого изменилось с прошлой проверки, изменились и все ваши расчёты, построенные на этих числах.
Слагаемое Energy
Энергия — основная статья и единственная, которая зависит от того, кому вы отправляете, а не что.
- Перевод на адрес, который уже держит USDT, расходует около 64 285 энергии — примерно 6,43 TRX по текущей цене.
- Перевод на адрес, который USDT никогда не держал, расходует около 130 285 — примерно 13 TRX, — потому что контракту нужно выделить новую ячейку хранилища.
- Сумма перевода не влияет ни на что. Десять долларов и сто тысяч стоят одинаково.
Чтобы получить точную цифру, а не оценку, симулируйте вызов. Запрос triggerconstantcontract к контракту USDT с вашими реальными отправителем и получателем возвращает energy_used и ничего не отправляет в сеть. Умножьте на цену энергии — и вот точная стоимость именно этого перевода.
Слагаемое Bandwidth
Bandwidth считается по сериализованному размеру транзакции. Перевод TRC-20 занимает около 345 байт, значит требует около 345 Bandwidth.
Каждому аккаунту ежедневно даётся 600 бесплатных Bandwidth. Их хватает на первый перевод и слишком мало на второй — поэтому дневная серия сбоев обычно начинается со второго перевода. Сверх лимита платите 0,001 TRX за байт, то есть около 0,345 TRX за перевод.
Слагаемое активации
TRON-адрес не существует в сети, пока на него что-нибудь не отправят. Создание стоит 1 TRX, списывается с отправителя и добавляется к Energy и Bandwidth самого перевода.
Это свойство адреса назначения, а не USDT. Списывается один раз за всю жизнь адреса и обычно застаёт врасплох при первом платеже на новый кошелёк.
Итоги по случаям
| Случай | Energy | Bandwidth | Активация | Итого |
|---|---|---|---|---|
| Постоянный получатель, первый перевод за сутки | ~6,43 TRX | бесплатно | — | ~6,43 TRX |
| Постоянный получатель, позже в тот же день | ~6,43 TRX | ~0,35 TRX | — | ~6,78 TRX |
| Получатель, впервые получающий USDT | ~13 TRX | бесплатно | — | ~13 TRX |
| Совсем новый, неактивированный адрес | ~13 TRX | бесплатно | 1 TRX | ~14 TRX |
| Любой из вариантов с арендованной энергией | цена аренды | бесплатно или ~0,35 TRX | как выше | заметно ниже сжигания |
Последняя строка и есть смысл аренды: энергия — крупное слагаемое и единственное, которое реально можно уменьшить.
Число, которое кошельки показывают, но которое не комиссия
Перед подписью вызова контракта кошелёк просит задать fee_limit. Это потолок того, что вы готовы потратить, а не списание: платите вы за то, что реально израсходовало исполнение.
Слишком низкий лимит приводит к остановке на середине исполнения: транзакция падает, а израсходованное всё равно списывается. Щедрый лимит при успешном вызове не стоит ничего — поэтому запас почти всегда правильный выбор.