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

我的网站

当前位置: 主页 > 比特币 > 比特币资讯

以太坊今日将完成柏林硬分叉升级,这些知识点你需要了解

时间:2021-04-15 13:16来源:未知 作者:admin 点击:
在北京时间4月15日下午18:00左右(具体是以太坊网络区块高度达到#12244000时),以太坊的柏林(Berlin)硬分叉升级将会发生,这次升级将纳入4个新的EIP改进提案,而其中两个(EIP-2929和

在北京时间4月15日下午18:00左右(具体是以太坊网络区块高度达到#12244000时),以太坊的柏林(Berlin)硬分叉升级将会发生,这次升级将纳入4个新的EIP改进提案,而其中两个(EIP-2929和EIP-2930)将会影响交易的gas成本计算。

本文解释了在这次硬分叉升级前后的gas成本计算,这将如何随EIP-2929而发生改变,以及如何使用EIP-2930引入的访问列表功能,原文作者是Nomic Labs软件开发者Franco Victorio。

柏林硬分叉改变了一些opcode操作码的gas成本。如果你在dapp或智能合约中有一个硬编码的gas值,它们可能会停止工作。如果发生这种情况,并且智能合约是不可升级的,则用户将需要使用访问列表(EIP-2930)来启用它。访问列表可用于稍稍降低gas成本,但在某些情况下,它们实际上会增加gas消耗总量。geth包含了一个新的RPC方法(ethu createAccessList)来简化访问列表的创建。

柏林硬分叉前的gas成本

EVM执行的每个opcode操作码都有一个相关的gas成本。对于大多数操作码而言,这个成本是固定的:PUSH1总是消耗3个单位的gas,MUL则消耗5个单位的gas,等等。而对于其他操作码来说,它是可变的:例如,SHA3操作码的成本取决于其输入的大小。

我们将重点讨论SLOAD和SSTORE操作码,因为它们是受柏林硬分叉影响最大的操作码。我们稍后将讨论那些以地址为目标的操作码,就像所有的 EXT*和CALL*操作码,因为它们的gas成本也会发生变化。

柏林硬分叉之前的SLOAD

如果没有EIP-2929,SLOAD的成本很简单:它总是会消耗800 gas。

柏林硬分叉之前的SSTORE

就gas而言,SSTORE可能是最复杂的操作码,因为它的成本取决于存储slot的当前值、新值以及它是否以前被修改过。我们将只分析一些场景以获得基本的理解。如果你想了解更多,请阅读本文末尾链接的eip。

如果slot的的值从0更改为1(或任何非零值),则成本为20000;如果slot的的值从1更改为2(或任何其他非零值),则成本为5000;如果slot的的值从1(或任何非零值)更改为0,则成本也为5000,但在交易结束时你将获得gas退款。这篇文章中,我们不会详细讨论退款,因为它们不受柏林硬分叉的影响;如果以前在同一事务中修改了该值,则所有后续sstore的成本为800;

这里的细节有些枯燥,重要的一点是,SSTORE是非常昂贵的,其成本取决于几个因素。

实施EIP-2929之后的gas成本

EIP-2929改变了所有这些值,但在此之前,我们需要先谈谈这个EIP引入的一个重要概念:已访问地址和已访问存储密钥。

如果地址或存储密钥以前在交易期间被“使用”,则该地址或存储密钥就被视为已访问。例如,当你调用另一个合约时,该合约的地址会被标记为已访问。类似地,当你SLOAD或SSTORE某些slot时,它将被视为在交易的其余部分已被访问。不管是哪个操作码做的:如果一个SLOAD读取了一个slot,那么它将被认为对接下来的SLOAD以及SSTORE都是已访问的。 (责任编辑:admin)

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