TRON Developer Hub CN

TRON开发者中心

欢迎来到TRON开发者中心。您将找到全面的指南和文档,以帮助您尽快开始使用TRON Developer Hub,并在遇到困难时提供支持。让我们跳进去吧!

Get Started    

能量成本计算

在编写,测试和调试智能合约的过程中,应注意不同 OpCode 调用成本。 本文介绍能量消耗的计算细节,并提供相关参考链接。

关于能量成本及价格计算,可以参考 Tron Station

OpCode 消耗

不同 OpCode 的能量消耗分为不同级别,成本等级分类及对应能量消耗如下:

public enum Tier {
    ZeroTier(0),
    BaseTier(2),
    VeryLowTier(3),
    LowTier(5),
    MidTier(8),
    HighTier(10),
    ExtTier(20),
    SpecialTier(1),
    InvalidTier(0);
  }

不同 OpCode 对应的消耗可以参考 OpCode.java

虚拟机存在 memory 和 storage 的概念,对应这两类操作的 OpCode 消耗能量需要额外计算。

例如对于 memory 类别的 OpCode 而言,操作的 memory 大小会影响具体的消耗,例如 MLOAD, MSTORE OpCode, 此时的消耗与所操作内存的字长相关。

对于 storage 类别的 SSTORE OpCode 而言,消耗能量不止与操作字长有关,还需要区分操作是重置,新增,还是删除。

val 当前值

操作

能量消耗

操作类别

为空,即 val == 0x0

sstore(val, n)
n != 0
即 val = n

20000

SET / 设置

非空, val != 0x0

sstore(val, n)
n != 0
即 val = n

5000

RESET / 重置

非空, val != 0x0

sstore(val, 0)
即 val = 0

5000

CLEAR

其他较高消耗操作

当通过合约给未激活账户转账 TRX 或 TRC10 创建账户时,会多消耗 25000 能量,此时没有 0.1 TRX 的账户创建费用。

当使用 CALL, DELEGATECALL 等操作调用其他合约时,且附加转账操作时,多消耗 9000 能量。

当使用 CREATE, CREATE2 在合约中动态创建合约时,消耗 32000 能量。

当使用预编译合约 (precompiled contracts) 时,不同调用操作消耗不同,请参考 PrecompiledContracts.java

部署合约的能量消耗

部署合约时,合约代码每字节消耗 200 能量。

📘

提示

部署合约时所提供的字节码一般分为两部分,一部分叫部署代码(creation code),一部分是合约的运行时代码(runtime code)。部署代码一般用于执行合约构造函数逻辑,并返回真正的合约运行时代码。计算部署合约时能量消耗,需要使用运行时代码长度。一般是部署代码字节码第二个 60606080 为起始。

Updated 13 days ago

能量成本计算


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.