带宽与能量
带宽用于计量交易字节大小,能量用于计量智能合约执行;两者都可通过质押或资源代理获取,并按 24 小时窗口恢复。
TRON 网络通过带宽和能量计量并结算资源成本。带宽(Bandwidth) 对应交易写入链上的字节大小,能量(Energy) 对应 TVM 执行智能合约的计算开销。带宽和能量都可以通过质押 TRX 获取,也可以由其他账户代理;两者都会在 24 小时滚动窗口内逐步恢复。
区别在于:带宽有按账户提供的免费额度,能量没有免费额度。当前 getFreeNetLimit 参数值为 600 Bandwidth,使用量按 24 小时滚动窗口恢复。普通 TRX 转账只消耗带宽;智能合约部署和调用同时消耗带宽和能量。
前置阅读
快速对比
| 维度 | 带宽 | 能量 |
|---|---|---|
| 用于支付 | 交易字节大小 | TVM 智能合约执行 |
| 当前用于质押分配的全网总量 | 43,200,000,000 Bandwidth | 180,000,000,000 Energy |
| 当前免费额度 | 每账户 600 Bandwidth | 无 |
| 获取方式 | 质押 TRX,或接收带宽代理 | 质押 TRX,或接收能量代理 |
| 恢复方式 | 随时间逐步恢复,24 小时内完全恢复 | 随时间逐步恢复,24 小时内完全恢复 |
| 不足时 | 主网当前:每 Bandwidth 燃烧 0.001 TRX | 主网当前:每 Energy 燃烧 0.0001 TRX,并受 fee_limit 约束 |
表中用于质押分配的 Bandwidth 和 Energy 总量、账户免费 Bandwidth 额度及资源单价均由链参数设置,分别对应 getTotalNetLimit、getTotalEnergyCurrentLimit、getFreeNetLimit、getTransactionFee 和 getEnergyFee。请通过 wallet/getchainparameters 查询实时值。
带宽
交易提交到链上时通常会消耗 Bandwidth,只读查询不消耗链上 Bandwidth。当前规则下,节点先清除交易对象的 ret 字段,再按 Protobuf 序列化后的 Transaction 大小计算基础 Bandwidth;如果合约类型不是 ShieldedTransferContract,另固定计入 64 Bandwidth。这里的 64 是执行结果的固定预留值,不是交易实际执行结果的长度。签名越多、合约参数越长,交易通常越大,消耗的 Bandwidth 也越多。
支付来源概览
交易所需的 Bandwidth 通常按以下顺序支付:
- 首先使用账户通过自身质押或接收代理获得的 Bandwidth。
- 再使用账户免费 Bandwidth。
- 最后通过燃烧 TRX 支付。
各类支付来源的适用条件、完整覆盖规则和燃烧费用,以及账户创建和 TRC-10 发行方赞助采用的特殊支付规则,参见资源支付与能量分摊。
按当前 getFreeNetLimit 参数,每个已激活的外部账户最多可以使用 600 Bandwidth 免费额度。使用免费 Bandwidth 时,账户的剩余免费额度和全网共享的免费 Bandwidth 额度都必须能够完整支付本次交易。
当前协议实现中,全网共享的免费 Bandwidth 上限 publicNetLimit 为 14,400,000,000 Bandwidth。账户和全网的免费 Bandwidth 可用额度都会随时间逐步恢复;如果没有新的消耗,24 小时后可以完全恢复。
账户还可以质押 TRX 获取 Bandwidth。当前用于质押分配的全网 Bandwidth 总量为 43,200,000,000,并按质押占比分配:
账户通过质押获得的 Bandwidth
= 账户用于 Bandwidth 的质押 TRX / 全网用于 Bandwidth 的质押 TRX
× 43_200_000_000账户接收其他账户代理的 Bandwidth 后,该部分额度也可以用于支付交易所需的 Bandwidth。
能量
智能合约部署和调用会消耗能量。每个 TVM opcode 都有对应能量成本,单次调用的总能量取决于实际执行路径。同一个合约方法在不同输入下可能消耗不同能量;热门合约还可能受到动态能量模型惩罚。
当前用于质押分配的全网 Energy 总量为 180,000,000,000,并按质押占比分配:
账户获得的 Energy
= 账户用于能量的质押 TRX / 全网用于能量的质押 TRX
× 180_000_000_000能量没有免费额度。调用方可通过以下方式承担自身的合约执行成本;合约部署方还可以按配置分摊部分成本:
- 自己质押 TRX 获取 Energy。
- 接收其他账户代理来的 Energy。
- 在执行时按当前能量单价燃烧 TRX;主网当前为每 Energy 0.0001 TRX。交易的
fee_limit会换算为调用方可承担的 Energy 预算,该预算同时覆盖通过质押或接收代理获得的 Energy,以及通过燃烧 TRX 支付的 Energy。
质押获取资源
账户通过 FreezeBalanceV2Contract 质押 TRX,并选择获取带宽或能量。HTTP API 为 wallet/freezebalancev2:
BASE_URL=https://api.shasta.trongrid.io
curl -X POST ${BASE_URL}/wallet/freezebalancev2 \
-H "Content-Type: application/json" \
-d '{
"owner_address": "TBRmnXKMEVfQ8XeQA2NroC9cGi77TvPbNb",
"frozen_balance": 1000000,
"resource": "BANDWIDTH",
"visible": true
}'关键字段:
owner_address:质押账户地址。visible: true表示使用 Base58Check 地址。frozen_balance:质押金额,单位为sun。1,000,000 sun = 1 TRX。resource:"BANDWIDTH"或"ENERGY"。
接口返回未签名交易。签名后通过 wallet/broadcasttransaction 广播。端到端流程参见质押与代理资源 recipe。
质押可以解除。解质押分两步:
- 提交
UnfreezeBalanceV2Contract,发起解质押并进入等待期。 - 等待期结束后,提交
WithdrawExpireUnfreezeContract,提取已解质押的 TRX。
当前主网 Stake 2.0 等待期由链参数 #70 getUnfreezeDelayDays 控制,主网当前值为 14 天。完整生命周期参见 TRON 网络质押。
资源代理
账户也可以把自己质押获得的带宽或能量代理给另一个账户。接收方无需自行质押,就能直接使用这部分资源。资源代理通过 DelegateResourceContract 发起,通过 UnDelegateResourceContract 撤销。
资源代理有几个重要边界:
- 代理金额至少为 1 TRX。
- 不能把资源代理给自己。
- 不能把资源代理给合约账户。
- 可选的
lock_period以区块数计,而不是秒;实际锁定时间约为lock_period × 3 秒。 - 如果重新代理已锁定资源,新锁定期不能短于原有剩余时间。
在 DApp 和交易所场景中,能量代理比带宽代理更常见:带宽有免费额度,能量没有免费额度,合约交互也更容易快速耗尽能量。
恢复周期
带宽和能量消耗后不会在固定整点重置,而是在 24 小时滚动窗口内线性恢复。如果账户一次性耗尽全部可用资源,理论上需要约 24 小时恢复到满额;如果期间继续消耗或发生资源代理撤销,恢复进度会与新的资源状态合并计算。
撤销资源代理时,网络还会按比例处理接收方尚未恢复的资源,避免接收方在资源份额减少后继续占用原代理份额对应的未恢复资源。具体公式参见撤销代理时的资源回收。
相关资源
- 资源模型 — 带宽、能量与 TRON Power 概览
- 资源支付与能量分摊 — TRX 燃烧费率、扣费顺序、部署方能量分摊与动态能量
- 撤销代理时的资源回收 — 撤销资源代理时未恢复资源如何结算
- TRON 网络质押 — 质押、解质押、提取和资源代理
wallet/getaccountresource— 查询账户带宽、能量和 TP
Updated 2 days ago
