Who pays for a contract call in TRON: resource allocation
How the TRON Virtual Machine decides who pays for contract energy. Learn consume_user_resource_percent, origin_energy_limit, and caller gas priority.
Published · Updated
On the TRON blockchain, smart contract execution fees are not inherently restricted to the caller. Unlike EVM networks where the initiating transaction account always pays gas, the TRON Virtual Machine (TVM) incorporates a dual-payer resource model governed by two contract-level settings: consume_user_resource_percent and origin_energy_limit.
Understanding these two parameters explains why a USDT TRC-20 sender ends up paying all of the energy, while certain decentralized applications (DApps) and testnet contracts can sponsor execution gas for their users.
TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t) sets consume_user_resource_percent to 30 and origin_energy_limit to 10,000,000[3]: on paper its creator covers 70% of each call. The creator’s account had 9,330 energy and had spent all of it when we read it on 2026-10-03[4], so the sender pays the full 64,285 or 130,285 energy.The TVM resource allocation hierarchy
When a transaction triggers a smart contract method on TRON, the TVM evaluates resource billing in the following sequence:
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
- Deployer sponsorship ratio (
consume_user_resource_percent):- If set to
100, the caller pays all energy. - If set to
0, the contract creator pays 100% of the energy, provided the creator has available resources. - If set between
1and99, execution energy is split proportionally between caller and creator.
- If set to
- Deployer energy ceiling (
origin_energy_limit):- The most energy the creator contributes to a single call. Above it, the caller pays the rest.
- Fallback to caller:
- If the deployer’s staked energy pool is exhausted or exceeds
origin_energy_limit, the TVM bills the remaining deficit to the caller. If the caller also lacks energy and liquid TRX, the transaction reverts with OUT_OF_ENERGY.
- If the deployer’s staked energy pool is exhausted or exceeds
Practical implications for developers
- USDT: the creator’s share is set (70%) but not funded, so senders pay all of it: they need energy or TRX.
- Gasless user onboarding: DApp builders can stake TRX on their deployer address and set
consume_user_resource_percent = 0to cover their callers’ energy, up toorigin_energy_limitper call (callers still pay bandwidth).
To simulate contract resource splits, test your calls on Nile using our guide on testing contract energy on Nile.
Sources
- TRON Virtual Machine specification: Contract resource configuration ↩
- TRON chain parameters (getEnergyFee), read 2026-10-02 ↩
- USDT contract settings (consume_user_resource_percent, origin_energy_limit, origin_address), TronGrid getcontract, read 2026-10-03 ↩
- Energy of the USDT contract creator THPvaUhoh2Qn2y9THCZML3H815hhFhn5YC, TronGrid getaccountresource, read 2026-10-03 ↩
FAQ
Does the caller always pay for smart contract execution in TRON?
By default, yes. However, TRON allows contract creators to subsidize caller energy by setting consume_user_resource_percent and origin_energy_limit parameters.
What is consume_user_resource_percent in TRON?
It is a smart contract configuration parameter (0 to 100) determining what percentage of execution energy is billed to the caller versus the contract creator.
Who pays for USDT TRC-20 transfers?
In practice the sender. The USDT contract sets consume_user_resource_percent to 30, so the creator would cover 70% of each call up to 10,000,000 energy, but the creator's account had 9,330 energy and had used all of it when read on 2026-10-03, so the whole cost falls back on the sender.
What happens when a contract creator's energy is exhausted?
The caller pays the rest: from its own energy first, then by burning TRX.