本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力 ,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)
执行气体
气体是 "内在气体 "和 "执行气体 "的总和。 在这里,我们将重点讨论如何计算 "执行气体"。
备注
执行气体相关硬分叉更改可在本页底部找到。 转到 Hardfork Changes。
概述
在三种不同的情况下,执行合同时会收取执行费。 有时,某些政策可能会被省略。
- 第一种也是最常见的一种是 "constantGas"。 这是计算操作的固有费用。
- 其次,气体可被扣除,以形成从属报文调用或合同创建的付款;这构成 "CREATE"、"CALL "和 "CALLCODE "付款的一部分。
- 最后,由于内存使用量增加,可能会收取气体费用。
在一个账户的执行过程中,应支付的内存使用费总额与 32 字节的最小倍数成正比,而 32 字节的最小倍数是包括所有内存索引(无论是读取还是写入)的范围。 这笔费用是按时支付的;因此,如果引用的内存区域至少比先前索引的内存区域大 32 字节,就会产生额外的内存使用费。 由于这笔费用,地址超过 32 位界限的可能性很小。 尽管如此,实施方案必须能够管理这种可能发生的情况。
存储费的行为略有细微差别。 为了鼓励最大限度地减少存储空间的使用(这与所有节点上都有一个更大的状态数据库直接对应),从存储空间中清除条目的操作的执行费用不仅可以免除,而且还可以获得合格的退款;事实上,这种退款实际上是提前支付的,因为初始使用存储位置的成本要比正常使用高得多。
操作码气体时间表
费用表 G
是由 37 个标量值组成的元组,这些标量值与交易可能产生的若干抽象操作的相对费用(以瓦斯为单位)相对应。 此外,还有气体项目,用于计算由 CALL_*
操作码调用的预编译合约的气体。
代表操作码 "常数气体 "的标量值
名称 | 价值 | 代码中的名称 | 操作码 |
---|---|---|---|
G_base | 2 | GasQuickStep | ADDRESS , ORIGIN , CALLER , CALLVALUE , CALLDATASIZE , CODESIZE , GASPRICE , COINBASE , TIMESTAMP , NUMBER , PREVRANDAO (originally it was DIFFICULTY ), GASLIMIT , RETURNDATASIZE , POP , PC , MSIZE , GAS , CHAINID , BASEFEE , PUSH0 , BLOBBASEFEE |
G_verylow | 3 | GasFastestStep | ADD , SUB , LT , GT , SLT , SGT , EQ , ISZERO , AND , OR , XOR , NOT , BYTE , CALLDATALOAD , MLOAD , MSTORE , MSTORE8 , PUSH , DUP , SWAP , BLOBHASH , MCOPY |
G_low | 5 | GasFastStep | MUL , DIV , SDIV , MOD , SMOD , SIGNEXTEND , SELFBALANCE |
G_mid | 8 | GasMidStep | ADDMOD , MULMOD , JUMP |
G_high | 10 | GasSlowStep | JUMPI |
G_selfdestruct | 5000 | SelfdestructGas | SELFDESTRUCT |
G_warmStorageReadCost | 100 | WarmStorageReadCostEIP2929 | EXTCODECOPY , EXTCODESIZE , EXTCODEHASH , BALANCE , CALL , CALLCODE , STATICCALL , DELEGATECALL , TSTORE , TLOAD |
G_blockhash | 20 | GasExtStep | BLOCKHASH |
G_jumpdest | 1 | JumpdestGas | JUMPDEST |
G_sha3 | 30 | Sha3Gas | SHA3 |
G_create | 32000 | CreateGas | CREATE , CREATE2 |