You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
简而言之,Gas 是以太坊的"燃料",使整个网络能够安全、有序地运行。EVM 会追踪每个交易的总 Gas 消耗,确保不超过用户设置的 Gas 限制。如果交易执行过程中 Gas 用尽,交易将回滚(所有更改都会撤销),但已使用的 Gas 仍会被收取。
30
+
31
+
## 如何估算 Gas
32
+
33
+
通常来说 Gas 数量是能够预估的(模糊预估,一个大概值),而 Gas 价格是不能预估的。为什么呢?因为以太坊虚拟机(EVM)对每一条指令(如 ADD、SSTORE、CALL)都预先定义了固定的 Gas 消耗值。而 Gas 价格不能预估主要是因为价格由市场供需、网络拥堵、矿工选择和 EIP-1559 动态费用机制共同决定的,无法精准预测,这里不详细说了。
34
+
35
+
在预估 Gas 数量之前,我们先来看一下一些常见的 Gas 操作消耗的 Gas 数量:
36
+
37
+
**存储操作**:
38
+
39
+
* SLOAD(读取存储): ~2100 Gas (冷访问)/ 100 Gas(热访问)-- 第一次访问是冷访问,后续都是热访问
40
+
* SSTORE(首次写入): ~20000 Gas
41
+
* SSTORE(修改现有值): ~5000 Gas
42
+
* SSTORE(清零): 可获得退款(但受EIP-3529限制)
43
+
44
+
**计算操作**:
45
+
46
+
* ADD/SUB: 3 Gas
47
+
* MUL/DIV: 5 Gas
48
+
* 比较运算: 3 Gas
49
+
* OR: 3 Gas
50
+
51
+
**调用操作**:
52
+
53
+
* CALL(普通调用): 基础700 Gas + 变动成本
54
+
* DELEGATECALL: 基础700 Gas + 变动成本
55
+
* CREATE(合约创建): 32,000 Gas + 代码成本
56
+
57
+
**不同类型交易的基础费用**:
58
+
59
+
* 普通 ETH 转账:21000 Gas (这是以太坊协议规定的基础交易成本,用于支付交易签名验证和状态变更)
60
+
* 合约调用:21000 Gas + 函数执行费用
61
+
* 合约创建:21000 Gas + 32000 Gas + 代码存储费用
62
+
63
+
了解了一些常见操作消耗的 Gas 数量后,我们再来看看下面的示例。
64
+
65
+
### 示例:简单的代币转账函数
66
+
67
+
假设我们有一个 ERC-20 代币转账函数:
68
+
69
+
```ts
70
+
function transfer(addressrecipient, uint256amount) external override returns (bool) {
0 commit comments