织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 竞争币 > 以太坊

柏林硬分叉如何影响以太坊交易的 Gas 费开销?(3)

时间:2021-04-18 13:01来源:未知 作者:admin 点击:
操作码 | “柏林” 前 | “柏林” 后 | ---|---|---|--- | | 未访问过 | 访问过 SLOAD| 800| 2100| 100 SSTORE from 0 to 1| 20000| 22100| 20000 SSTORE from 1 to 2| 5000| 5000| 2900 SLOAD

操作码 | “柏林” 前 | “柏林” 后 |
---|---|---|---

|
| 未访问过 | 访问过
SLOAD| 800| 2100| 100
SSTORE from 0 to 1| 20000| 22100| 20000
SSTORE from 1 to 2| 5000| 5000| 2900
SLOAD + SSTORE| 5800| 5000| 3000
SSTORE
+ SLOAD| 5800| 5100| 3000
SSTORE 一个已经被写过的槽 | 800| 100| 100
*从一个非零值改为另一个非零值,就像第三行所示的那样 |
|
|

注意看最后一行:此时已不再需要区分它到底有没有被访问过,因为,如果此前已写入,则必定已被访问过。

EIP-2930:可选 「访问清单」的事务类型

另一个 “柏林” 升级包含的 EIP 是 2930。该 EIP 加入了一种新的类型的事务,可以在事务的负载中包含一个 “访问清单”,意思是,你可以在事务执行前就声明哪些地址和存储槽应被认为是 “访问过的”。举个例子,对一个未访问过的槽执行 SLOAD 需要耗费 2100 gas,但如果该存储槽被包含在了事务的 “访问清单” 中,则操作的消耗量机会降为 100 gas。

但如果只要地址和槽被当成 “已访问过的” 就可以降低操作的 Gas 消耗量;而访问清单可以把地址和槽标记为 “已访问过的”;那岂不是说我们可以把这些东西都放在访问清单中,来获得 Gas 消耗量的减免?真棒,天赐 Gas!

额,并不完全如此,因为你每添加一个地址或存储项键,都要支付额外的 Gas。

举个例子。假如我们要向合约 A 发送了一条事务。我们编写了一条这样的访问清单:

(责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容