Кто платит за вызов контракта в TRON: распределение ресурсов
Как виртуальная машина TRON решает, кто платит энергию за вызов контракта: consume_user_resource_percent, origin_energy_limit и доля вызывающего.
Опубликовано · Обновлено
В блокчейне TRON плата за исполнение смарт-контракта не обязательно ложится только на вызывающего. В отличие от EVM-сетей, где газ всегда платит аккаунт, инициировавший транзакцию, виртуальная машина TRON (TVM) использует модель с двумя плательщиками, которой управляют две настройки на уровне контракта: consume_user_resource_percent и origin_energy_limit.
Эти два параметра объясняют, почему отправитель USDT TRC20 в итоге платит всю энергию, тогда как некоторые децентрализованные приложения (DApp) и контракты в тестовой сети могут оплачивать исполнение за своих пользователей.
TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t) задаёт consume_user_resource_percent равным 30 и origin_energy_limit равным 10 000 000[3]: на бумаге его создатель покрывает 70% каждого вызова. На аккаунте создателя было 9 330 энергии, и на момент нашей проверки 03.10.2026 она была израсходована полностью[4], поэтому отправитель платит все 64 285 или 130 285 энергии.Порядок распределения ресурсов в TVM
Когда транзакция вызывает метод смарт-контракта в TRON, TVM определяет, с кого списывать ресурсы, в следующем порядке:
Contract Execution Request
|
v
Check `consume_user_resource_percent` (0 - 100%)
|
+---------+---------+
| |
Caller Portion Deployer Portion (100 - X%)
| |
| v
| Check deployer `origin_energy_limit` & balance
| |
| +---------+---------+
| | |
| Sufficient Exhausted
| | |
v v v
Caller Deployer Fallback:
Energy Energy Billed to Caller
- Доля создателя (
consume_user_resource_percent):- При значении
100всю энергию платит вызывающий. - При значении
0создатель контракта платит 100% энергии, если у него есть доступные ресурсы. - При значении от
1до99энергия на исполнение делится пропорционально между вызывающим и создателем.
- При значении
- Потолок энергии создателя (
origin_energy_limit):- Максимум энергии, который создатель вносит в один вызов. Сверх него остаток платит вызывающий.
- Переход оплаты на вызывающего:
- Если застейканная энергия создателя закончилась или превышен
origin_energy_limit, TVM списывает недостающее с вызывающего. Если у вызывающего тоже нет ни энергии, ни TRX, транзакция откатывается с ошибкой OUT_OF_ENERGY.
- Если застейканная энергия создателя закончилась или превышен
Что это значит для разработчиков
- USDT: доля создателя задана (70%), но не обеспечена энергией, поэтому отправители платят всё сами: им нужна энергия или TRX.
- Подключение пользователей без газа: разработчики DApp могут застейкать TRX на адресе создателя контракта и задать
consume_user_resource_percent = 0, чтобы оплачивать энергию вызывающих, но не болееorigin_energy_limitза вызов (bandwidth вызывающие по-прежнему платят сами).
Чтобы проверить распределение ресурсов контракта, протестируйте вызовы в Nile по нашему руководству о тестировании энергии контракта в Nile.
Источники
- Спецификация виртуальной машины TRON: настройки ресурсов контракта ↩
- Параметры сети TRON (getEnergyFee), данные на 02.10.2026 ↩
- Настройки контракта USDT (consume_user_resource_percent, origin_energy_limit, origin_address), TronGrid getcontract, данные на 03.10.2026 ↩
- Энергия создателя контракта USDT THPvaUhoh2Qn2y9THCZML3H815hhFhn5YC, TronGrid getaccountresource, данные на 03.10.2026 ↩
Вопросы и ответы
Всегда ли за исполнение смарт-контракта в TRON платит вызывающий?
По умолчанию да. Но TRON позволяет создателю контракта частично оплачивать энергию вызывающих через параметры consume_user_resource_percent и origin_energy_limit.
Что такое consume_user_resource_percent в TRON?
Это параметр настройки смарт-контракта (от 0 до 100), который определяет, какой процент энергии на исполнение списывается с вызывающего, а какой — с создателя контракта.
Кто платит за переводы USDT TRC20?
На практике отправитель. В контракте USDT consume_user_resource_percent равен 30, то есть создатель покрывал бы 70% каждого вызова, но не более 10 000 000 энергии. Однако на аккаунте создателя было 9 330 энергии, и на 03.10.2026 она была израсходована полностью, поэтому вся стоимость ложится на отправителя.
Что происходит, когда энергия создателя контракта закончилась?
Остаток платит вызывающий: сначала из своей энергии, затем сжиганием TRX.