🛡️ What is the Fee Limit System?
The Fee Limit System in TRON is a critical safety mechanism that protects users from excessive transaction fees. It defines the maximum amount of TRX you are willing to burn for a single transaction if you lack sufficient Energy or Bandwidth.
When you send a transaction, you specify a feeLimit value (in SUN). If the actual fee required to execute the transaction exceeds this limit, the transaction will fail (revert) instead of burning more TRX than you intended. This prevents unexpected high fees due to network congestion, complex contract logic, or errors.
Without a fee limit, a smart contract bug or sudden network congestion could burn an unexpectedly large amount of TRX from your wallet. The fee limit acts as a financial safety net, ensuring you never pay more than you're willing to.
⚙️ How Fee Limit Works
The fee limit system operates on a simple principle: compare actual fee vs. fee limit.
if (actualFee <= feeLimit) {
// Transaction executes successfully
burnTRX(actualFee);
} else {
// Transaction fails (reverts)
revert("Fee limit exceeded");
// No TRX is burned
}
The actual fee is calculated based on the Energy and Bandwidth consumed by the transaction, converted to TRX at the current network price. If you have sufficient staked Energy or Bandwidth, the actual fee is zero — and your fee limit doesn't matter (as long as it's ≥ 0).
Fee limit is a cap, not the actual fee. If your transaction requires 5 TRX and your fee limit is 15 TRX, you pay 5 TRX — not 15. The limit only matters if the actual fee would exceed it.
⚙️ How to Set a Fee Limit
You can set a fee limit when sending transactions through various TRON interfaces:
1. Using TronWeb (JavaScript)
const tx = await contract.transfer(to, amount).send({
feeLimit: 15_000_000 // 15 TRX in SUN
});
2. Using TronLink (Wallet)
In TronLink, when you confirm a transaction, you can adjust the Fee Limit slider or input field in the transaction confirmation dialog. The wallet typically suggests a default value based on the transaction type.
3. Using TronScan (Explorer)
When interacting with contracts via TronScan's "Contract" tab, you can specify the fee limit in the transaction parameters before triggering the contract call.
| Transaction Type | Recommended Fee Limit (TRX) | Recommended Fee Limit (SUN) |
|---|---|---|
| USDT TRC20 transfer (activated wallet) | 15 | 15,000,000 |
| USDT TRC20 transfer (new wallet) | 20 | 20,000,000 |
| Simple TRX transfer | 1 | 1,000,000 |
| Contract deployment | 200-500 | 200,000,000 - 500,000,000 |
| Complex DeFi interaction | 50-100 | 50,000,000 - 100,000,000 |
| With sufficient Energy | 0 (or 1) | 0 (or 1,000,000) |
🔄 Setting Fee Limit to 0
You can set feeLimit: 0 for a transaction. This means you are not willing to burn any TRX — the transaction will only succeed if you have sufficient Energy and Bandwidth to cover the entire cost.
Setting fee limit to 0 is useful when:
- You have staked TRX for Energy and want to force the use of staked resources without burning TRX.
- You want to test whether you have enough resources before executing a transaction.
- You want to avoid any TRX burn for cost-sensitive operations.
If you set fee limit to 0 and don't have enough Energy or Bandwidth, your transaction will fail with a "fee limit exceeded" error. No TRX will be burned, but the transaction won't go through.
⚠️ Common Fee Limit Issues & Solutions
| Issue | Cause | Solution |
|---|---|---|
| "Fee limit exceeded" error | Actual fee > feeLimit | Increase feeLimit and retry, or stake for Energy |
| Transaction keeps failing | Fee limit too low for contract complexity | Check contract gas usage and increase limit accordingly |
| Unexpected high fee | Fee limit set too high, contract consumed more than expected | Set a reasonable fee limit based on transaction type |
| Fee limit 0 fails | Insufficient Energy/Bandwidth | Stake for Energy, buy/rent Energy, or increase fee limit |
| Wallet suggests too low limit | Default estimate may be inaccurate | Manually adjust to a safe value (e.g., 15 TRX for USDT) |
🏆 Fee Limit Best Practices
- Know your transaction type — USDT transfers need ~15 TRX, simple TRX transfers need ~1 TRX, complex DeFi may need 50-100 TRX.
- Always set a fee limit — never leave it unbounded. Even if you have Energy, set a reasonable fallback limit.
- Check your Energy balance first — if you have enough Energy, you can set a low fee limit (like 1 TRX) as a safety net.
- Use 15 TRX for USDT transfers — this covers the typical burn range of 13-15 TRX. For new wallets, use 20 TRX.
- Monitor actual fees — after successful transactions, check how much TRX was actually burned to refine your fee limit estimates.
- Consider staking — if you make frequent transactions, staking for Energy is more cost-effective than paying fees.
- Use fee limit 0 for testing — when testing contract interactions, set fee limit to 0 to verify you have enough Energy without risking TRX burn.
For USDT TRC20 transfers, start with feeLimit: 15_000_000 (15 TRX). If you get a "fee limit exceeded" error, increase to 20,000,000 and try again. Once you know the exact fee, you can fine-tune the limit for future transactions.
⚖️ Fee Limit vs. Gas Limit (Ethereum)
TRON's fee limit system is similar to Ethereum's gas limit, but there are important differences:
| Feature | TRON Fee Limit | Ethereum Gas Limit |
|---|---|---|
| Unit | SUN (TRX) | Gas units |
| What it caps | TRX burned if no resources | Total gas used |
| Free transactions | Yes (with staked Energy) | No |
| Resource model | Dual (Energy + Bandwidth) | Single (gas) |
| Fallback behavior | Burns TRX if resources insufficient | Always burns ETH |
The key advantage of TRON's system is that you can avoid fees entirely by staking TRX for Energy, while still having a fee limit as a safety net.