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 7 months ago

能量成本计算


Suggested Edits are limited on API Reference Pages

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