能量消耗机制
TRON网络能量消耗机制
基本能量消耗规则
在执行合约交易时,系统会逐条指令计算并扣除所需能量,账户能量的使用遵循以下优先级原则:
- 优先使用账户可用能量(通过质押或租赁获得)
- 若能量不足,不足的能量,按固定费率(0.0001 TRX / 能量)燃烧账户内的 TRX
合约能量分摊机制
对于合约调用,为降低调用者的成本,TRON支持合约部署者分担部分能量消耗,具体细节请参考 合约能量分摊机制 章节。
能量扣除规则:
合约部署者承担部分:
- 直接从部署者账户的可用能量中扣除,不会燃烧部署者的TRX
合约调用者承担部分:
- 优先使用账户中的可用能量
- 不足部分,按固定费率燃烧账户余额中的 TRX
TRON 能量分摊机制
为丰富智能合约的应用场景,TRON网络创新性地推出了合约能量分摊机制。该机制允许合约部署者分担部分执行能耗,具体规则如下:
1. 核心参数设置
参数名称 | 说明 | 取值范围 |
|---|---|---|
consume_user_resource_percent | 调用者应承担的能量百分比(如设为60表示调用者承担60%) | 0-100 |
origin_energy_limit | 部署者为单笔交易承担的能量上限 |
|
注意:该功能自 Java-Tron Odyssey 3.2 版本起正式支持。部署新的智能合约时,必须显式设置 origin_energy_limit 参数,且其值需为大于 0 的整数。对于 Odyssey 3.2 之前已部署在主网的合约,虽然该参数存储值为 0,但系统执行时会将其视为 10,000,000。
2. 分摊计算逻辑
当合约执行需消耗X单位能量时: ① 理论分摊:
- 调用者支付 = X × consume_user_resource_percent%
- 部署者支付 = X × (100 - consume_user_resource_percent)%
② 实际支付:
-
部署者实付
部署者实付 = min( X × (100 - consume_user_resource_percent)%, origin_energy_limit, 部署者账户可用能量 ) -
调用者实付 = X - 部署者实付
部署者实付为:理论分摊值、合约设置的 origin_energy_limit 及部署者账户当前可用能量 三者中的最小值,确保支付不超过实际可支配资源。调用者实付则补足剩余部分(总能耗减去部署者实际支付部分),形成完整的成本覆盖。下面以示例进行说明:
示例
假设某次合约调用,总共需支付80单位能量,若部署者仅有10能量可用 ,并且合约参数设置为:
- consume_user_resource_percent = 60
- origin_energy_limit = 40
→ 理论分摊:用户48,部署者32。 → 实际分摊:部署者支付10(受限于部署者的可用能量:10,及origin_energy_limit:40);用户支付70(80-10)。
3. 参数调整
| 参数 | 修改接口 | 影响范围 |
|---|---|---|
| consume_user_resource_percent | wallet/updatesetting | 合约级别 |
| origin_energy_limit | wallet/updateenergylimit | 合约级别 |
注意:以上两个参数的调整将影响该合约的所有非查询交易,请谨慎操作。
在TRON网络中,除了合约层级的能量分摊配置,合约交易还引入了交易级别参数 FeeLimit,用于限制调用者可承担的能量支出上限,从而提供更灵活的成本控制手段。具体请参考 Feelimit章节。
Updated 7 months ago