Key takeaways
- TRON charges in two resources instead of a single fee: Bandwidth (transaction byte size) and Energy (smart-contract execution). You buy them by staking TRX, or you burn TRX on the spot when you run short.
- Stake 2.0 (live April 7, 2023) decoupled staking from delegation — freeze once, then lend resources to any number of recipients, change your mind without unstaking.
- Unstaking now takes a 14-day wait before you can withdraw, and that wait is visible on-chain as a two-step pattern.
- The standout signal for investigators: resource delegation. When address A pays for address B's transactions, that's a real, recurring economic tie — and exchanges never do it.
Most blockchains charge one native-token fee per transaction. TRON doesn’t. It meters two separate resources — Bandwidth and Energy — and you get them one of two ways: stake TRX to earn a daily allowance, or burn TRX on the spot when your allowance runs dry. The model looks odd until the economics click into place. The 2023 Stake 2.0 upgrade rewired how delegation, unstaking, and lock periods work, and the last section here connects all of it to what you can read off the chain.
Bandwidth and Energy: TRON’s two resources
What a transaction costs, and in which resource, depends on what it does.
Bandwidth pays for size. One byte of serialized transaction data costs one unit of Bandwidth, and every transaction on the network consumes some: TRX transfers, contract calls, staking operations, account activation. A bare TRX transfer is small and cheap; a contract call stuffed with parameters is larger and costs more.
Energy pays for computation. The moment a transaction runs code in the TRON Virtual Machine — a USDT transfer, a DeFi swap, any contract interaction — it burns Energy in proportion to how much work the code does. It’s TRON’s analogue to Ethereum gas, but scoped strictly to smart-contract execution. A plain TRX transfer touches no code, so it spends zero Energy.
Why two resources instead of one fungible “gas”? Because they behave differently. Bandwidth is cheap and predictable; Energy is variable, tied to computational load, and dominates total transaction cost because contract calls consume it in bulk — tens of thousands of units per call — even though its per-unit price is lower: Energy burns at 0.0001 TRX per unit, Bandwidth at 0.001. Splitting them lets a high-volume contract user stake purely for Energy without subsidizing byte-heavy traffic, and vice versa.
One baseline to keep in your head: every activated account gets 600 free Bandwidth units a day, no staking required — enough to cover the occasional simple transfer. Energy gets no such free allocation, so contract calls cost from the first unit.
Why stake TRX at all
Staking buys Bandwidth and Energy in bulk, by proportion: your share of the total network stake equals your share of the daily resource pool.
- Bandwidth pool: 43,200,000,000 units a day, split across everyone who staked for Bandwidth.
- Energy pool: 180,000,000,000 units a day, split across everyone who staked for Energy.
Both pools refill continuously over the 24 hours after you spend them, block by block rather than in one midnight reset.
Run out mid-transaction and TRON covers the shortfall by burning TRX automatically. For someone sending the odd transfer, the free 600 Bandwidth and a trivial burn handle everything. For an address pushing dozens or hundreds of USDT transfers a day, that burn adds up until staking stops being optional and becomes the cheaper way to operate. That cost structure is what makes delegation worth watching: an address that keeps another address’s operations funded is absorbing a real, recurring expense.
Stake 1.0 vs Stake 2.0
The original mechanism — call it Stake 1.0, built on FreezeBalanceContract — had a design knot: staking and resource type were welded together. Freezing TRX meant declaring up front whether you wanted Bandwidth or Energy. Switching meant unfreezing (a 3-day lock), then re-freezing for the other type. And delegation was all-or-nothing: you could hand a stake’s resources to one recipient, in full, with no partial amounts.
Stake 2.0 — FreezeBalanceV2Contract and UnfreezeBalanceV2Contract from TIP-467 — pulled those threads apart:
- Staking and delegation are independent. Freeze once, then delegate to as many recipients as you like, in any amounts, no re-staking.
- Partial unstaking works: unfreeze a specific amount and leave the rest staked.
- Delegation changes without unstaking — re-point resources to a different recipient with no unfreeze cycle.
- Voting power still comes from the stake. A
FreezeBalanceV2Contractstake grants TRON Power exactly as Stake 1.0 did — one TP per staked TRX — and casting those votes for an SR stays a separateVoteWitnessContractstep. Stake 2.0 reworked delegation, not the staking-to-voting-power link. The mechanics live in the field-book chapter Voting on TRON. - Unstaking now waits. After
UnfreezeBalanceV2Contract, the TRX sits in a 14-day window before a separateWithdrawExpireUnfreezeContractreleases it. - Up to 32 unstaking operations can run at once — flexibility Stake 1.0 never had.
A compatibility note for old wallets: the upgrade didn’t invalidate Stake 1.0 positions — resources and votes earned under 1.0 stayed valid past April 7, 2023. But the old delegation model, the one that needed re-staking to change recipients, couldn’t carry forward. Only Stake-2.0 TRX can be delegated under the new rules.
The four TIPs behind it
Stake 2.0 didn’t land in a single commit. It arrived as a sequence of proposals over eight months, each one adding a piece, and knowing which is which helps you date what you find on-chain.
TIP-467 — Stake 2.0 design (proposed September 28, 2022; Final). The core spec: the split between staking and delegation, partial unstaking, multi-recipient delegation, and the N-day unstaking window (N being a governance parameter). It also defined six new TVM opcodes — FREEZEBALANCEV2, UNFREEZEBALANCEV2, DELEGATERESOURCE, UNDELEGATERESOURCE, CANCELALLUNFREEZEV2, WITHDRAWEXPIREUNFREEZE — plus their HTTP APIs, letting smart contracts touch the staking system directly for the first time.
TIP-519 — Enable Stake 2.0 (Final). The on-chain governance proposal that flipped the switch on mainnet. It set two parameters at once: No. 59 (ALLOW_TVM_VOTE, to 1) enabling contract-level voting, and No. 70 (UNFREEZE_DELAY_DAYS, to 14) establishing the 14-day window. Created April 4, 2023; effective April 7, 2023 — the live date for Stake 2.0.
TIP-541 — Cancel unstaking (created May 5, 2023; Final). Added the wallet/cancelallunfreezev2 API, which cancels all in-progress unstaking during the 14-day wait. Before it, hitting unstake was a one-way door — change your mind and you waited out the full 14 days. Cancelling puts the TRX back to staked and resumes resource and vote accrual. It’s purely additive and touches nothing already in flight.
TIP-542 — Customizable delegation lock period (created May 12, 2023; Final). Added a lock_period parameter (in blocks) to wallet/delegateresource. Stake 2.0 had shipped with a boolean lock flag — set it and the delegation couldn’t be undelegated for a fixed 3 days; TIP-542 swapped that fixed term for a count the delegator sets at delegation time — which lets two parties write a resource-leasing agreement straight into the chain. Leave lock true and lock_period at 0 and you get the old 86,400-block (3-day) default.
Delegation: when A funds B’s resources
When A stakes TRX and delegates Energy or Bandwidth to B, B transacts as if it had staked itself — the consumption draws on A’s allowance, and the cost lands on A. B pays nothing and never needs to hold staked TRX. The mechanics are that simple, and they are where the model earns its keep for an investigator. A few constraints frame it:
- Only Stake-2.0 resources can be delegated; Stake 1.0 positions are ineligible.
- Only unused resources can be delegated — not the slice A is already spending on its own transactions.
- A can delegate to multiple recipients, in different amounts, independently.
- It shows up on-chain as
DelegateResourceContract; undelegation asUnDelegateResourceContract. Both are attributable to the delegating address.
Now consider who actually does this. Exchanges serve millions of users out of shared custody wallets, so per-user delegation is economically absurd at that scale — they don’t delegate Energy or Bandwidth to individual accounts. The addresses that do delegate have a specific reason to fund one particular wallet: a controller subsidizing a receiving address, a business covering a counterparty, an operator keeping a field wallet alive.
A steady delegation relationship — A delegating to B again and again, with B’s transactions spending that resource — is a durable economic tie. A carries B’s cost, and the act is attributable to A. Every re-delegation puts a fresh event on the record.
The 14-day unstaking window
Network parameter No. 70, UNFREEZE_DELAY_DAYS, sets the wait. It’s a governance value — Super Representatives could change it by proposal — but it has held at 14 since launch.
On-chain it starts when the staker broadcasts UnfreezeBalanceV2Contract with the amount and resource type; the TRX leaves the staked balance the moment that lands. Then it sits in limbo for 14 days, neither staked nor liquid, and that window is the only stretch where TIP-541’s cancel can reverse the whole thing. When the window closes, WithdrawExpireUnfreezeContract pulls the TRX back to the liquid balance — the on-chain proof the unstake finished.
The April 7, 2023 boundary matters when reading history. Before it, unstaking used UnfreezeBalanceContract (Stake 1.0) with a 3-day lock and no separate intermediate transaction; after it, the two-step pattern is standard. Across the upgrade, the contract types tell you which era you’re in. One Stake 1.0 quirk has no modern equivalent: unstaking under the old model revoked all of an account’s votes at once, whatever resource you pulled. Stake 2.0 removes only the votes backed by the specific TRX unstaked — keep that in mind when vote weight jumps in a wallet that lived through the transition.
What this means for investigators
Pull all of this back to the work of tracing a wallet and a few signals stand out.
Delegation is an ownership signal. A DelegateResourceContract is a deliberate act — the sender chose to fund a specific recipient’s transactions. A recurring delegation from the same source to the same target, especially Energy covering USDT calls, is among the strongest candidate-ownership indicators on TRON.
Fueling rounds out the picture. Some wallets skip delegation and fund others with small TRX transfers sized to cover the fallback burn. Spot the address that tops up a wallet just before its high-value USDT moves and you’re looking at the same thing — operational control. The dedicated treatment lives at Who Pays the Fees?.
Contract types also date the activity, and the completed ones say the most. FreezeBalanceContract puts activity before April 2023; FreezeBalanceV2Contract puts it after — which matters when you read delegation events and vote-weight changes across the boundary. A WithdrawExpireUnfreezeContract carries its own tell: someone kicked off an unstake and came back 14 days later to claim it, where a wallet abandoned or handed off mid-window rarely finishes the sequence cleanly. And a large unstake right before a big outbound transfer can mark deliberate liquidity staging — the unstake is the setup, and the 14-day gap sits right there in the record.
How to weigh these patterns together when judging who funded and likely owns a wallet is covered alongside the fueling write-up linked above.
Sources
Primary documentation and data sources used for the facts in this article:
- GitHub: tronprotocol/tips. “TIP-467: Stake 2.0 — A new TRON stake model” (tip-467.md) — Core Stake 2.0 specification: new contract types, TVM opcodes, delegation mechanics, N-day unstaking parameter. Proposed September 28, 2022; status: Final.
- GitHub: tronprotocol/tips. “TIP-467 issue thread” — Community discussion and clarifications on the Stake 2.0 design.
- GitHub: tronprotocol/tips. “TIP-519: Proposal to enable Stake 2.0” — On-chain activation proposal; sets network parameters No. 59 (
ALLOW_TVM_VOTE= 1) and No. 70 (UNFREEZE_DELAY_DAYS= 14). Created April 4, 2023; effective April 7, 2023. - GitHub: tronprotocol/tips. “TIP-541: Support canceling unstaking in Stake 2.0” (tip-541.md) —
wallet/cancelallunfreezev2API; created May 5, 2023; status: Final. - GitHub: tronprotocol/tips. “TIP-542: Resource delegating supports customizable lock period” (tip-542.md) —
lock_periodparameter forwallet/delegateresource; replaces fixed 3-day lock; created May 12, 2023; status: Final. - GitHub: tronprotocol/tips. “TIP-541 issue thread” — Cancel-unstaking discussion.
- GitHub: tronprotocol/tips. “TIP-542 issue thread” — Customizable lock period discussion.
- TRON Developer Hub. “Resource Model” — Bandwidth (1 byte = 1 unit; 600 free/day per account; 43.2 billion daily pool), Energy (180 billion daily pool), fallback TRX burn rates (0.001 TRX/Bandwidth unit; 0.0001 TRX/Energy unit), 24-hour regeneration.
- TRON Developer Hub. “Staking on the TRON Network” —
FreezeBalanceV2Contract/UnfreezeBalanceV2Contractcontract names, Stake 1.0 vs Stake 2.0 comparison, 32 concurrent unstaking operations limit, backward compatibility note. - TRON DAO Forum. “TRON Stake 2.0 Proposal” — Community discussion thread on Stake 2.0 design rationale.