区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > UNI > 正文

BLO:以太坊今日将完成柏林硬分叉升级 这些知识点你需要了解_blockchain钱包中文版

作者:

时间:

在北京时间4月15日下午18:00左右,以太坊的柏林硬分叉升级将会发生,这次升级将纳入4个新的EIP改进提案,而其中两个将会影响交易的gas成本计算。

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

注:文章篇幅较长,以下是其中的一些要点:

柏林硬分叉改变了一些opcode操作码的gas成本。如果你在dapp或智能合约中有一个硬编码的gas值,它们可能会停止工作。如果发生这种情况,并且智能合约是不可升级的,则用户将需要使用访问列表来启用它。

访问列表可用于稍稍降低gas成本,但在某些情况下,它们实际上会增加gas消耗总量。

geth包含了一个新的RPC方法来简化访问列表的创建。

柏林硬分叉前的gas成本

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

观点:以太坊上海升级不会显著影响ETH的价格:金色财经报道,科技公司Ether Capital首席执行官Brian Mosoff表示,以太坊即将到来的上海硬分叉可能不会显著影响ETH的价格。根据Mosoff的说法,该网络的升级可能会吸引一批新的投资者,Mosoff称:“我预计会看到更多的ETH被锁定在质押协议中,要么来自单独的质押者,要么你会再次看到更多的结构化产品进入市场,通过让新投资者能够从他们投入的ETH中赚取一些收益,你将开始看到传统金融开始更有信心地进入这个领域”。[2023/4/11 13:55:40]

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

柏林硬分叉之前的SLOAD

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

柏林硬分叉之前的SSTORE

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

如果slot的的值从0更改为1,则成本为20000;

如果slot的的值从1更改为2,则成本为5000;

Circle向以太坊网络新增发1,640万枚USDC:据DAppTotal稳定币专题页面数据显示:10月27日22时22分 ,USDC发行方Circle向以太坊网络新增发1笔价值1,640万美元的USDC,区块高度为:11139143,交易哈希值为:0x0afedb429e5b20a0728a91622e693ed82f0e888cb281f047df9ef221483d0216 。截至目前,Circle在以太坊网络上的ERC20 USDC总发行量已达2,809,626,518枚。[2020/10/28]

如果slot的的值从1更改为0,则成本也为5000,但在交易结束时你将获得gas退款。这篇文章中,我们不会详细讨论退款,因为它们不受柏林硬分叉的影响;

如果以前在同一事务中修改了该值,则所有后续sstore的成本为800;

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

实施EIP-2929之后的gas成本

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

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

以太坊未确认交易21754笔:金色财经报道,据Etherscan.io数据显示,以太坊未确认交易21754笔。当前挖矿难度2316.52TH,交易处理能力9.5TPS。截至目前以太坊全球均价为227.09美元,近24小时上涨2.51%。[2020/2/28]

这里需要注意的一点是,存储密钥位于某个地址的“内部”。正如EIP所解释的:

“执行事务时,维护一组accessed_addresses:Set和accessed_storage_keys:Set]”

也就是说,当我们说一个存储slot被访问时,我们实际上是说一对(address,storageKey)被访问了。

话虽如此,我们还是来谈谈新的gas成本吧。

柏林硬分叉之后的SLOAD

在柏林硬分叉之前,SLOAD的固定成本是800gas,现在,这取决于是否已访问了存储slot。如果未访问,则成本为2100gas,如果已访问,则成本为100gas。因此,如果slot在已访问的存储密钥列表中,则一次SLOAD的成本会降低2000gas。

柏林硬分叉之后的SSTORE

让我们在部署EIP-2929的环境下回顾一下之前的SSTORE示例:

如果slot的值从0更改为1,则成本为:22100,20000;

数据:比特币矿工1THash在三日内将价值约1.26亿美元BTC转入币安:金色财经报道,CryptoQuant 高级分析师 Julio Moreno 发推称,比特币矿工 1THash 将 5592 枚 BTC(约 1.26 亿美元)转入币安。1 月 17 日,1THash 将 2396 枚 BTC 中的 2256 枚转入 1BRuc4 开头地址后又将其转入以 1H96nj 和 1DD1vn 开头的两个地址,这两个地址又将 BTC 转入币安。1 月 19 日,1THash 又将 3336 枚 BTC 直接转入币安。目前,1THash 的 BTC UTXO 为 0。Julio Moreno 表示,1THash 哈希率最低,在过去 30 天内,仅挖矿打包 2 个区块,占总收入的 0.05%。[2023/1/21 11:24:47]

如果slot的值从1更改为2,则成本为:5000,2900;

如果slot的值从1更改为0,则成本与上一项相同,然后加上退款;

如果以前在同一交易中修改了该值,则所有后续SSTORE的成本为100;

如你所见,如果要修改的slot以前被访问过,那么第一次SSTORE的成本将降低2100gas。

下面的表总结了目前为止所有改变的值:

声音 | 以太坊开发人员:以太坊社区对于是否集成ProgPoW仍然存在疑问:据CryptoGlobe消息, 在3月15日举行的以太坊开发人员电话会议上,大多数人决定ProgPoW应该作为以太坊网络共识协议的一部分被激活,以太坊社区此前也决定启动ProgPoW。然而与此同时,也有人对此存有疑虑。以太坊项目开发人员和顾问Greg Colvin在会上表示,他确认以太坊区块链网络社区对于是否集成ProgPoW存在疑问。据Odaily星球日报此前消息,以太坊基金会社区关系经理Hudson Jameson指出,对ProgPow的审计尚未开始,对该提案进行两次单独审计的原始计划可能不会完全按计划进行。核心开发人员重申ProgPow仍是一个被批准的提案,或者在ETH伊斯坦布尔升级中加入,或者作为一个单独的硬分叉供用户升级。[2019/3/18]

请注意,在最后一行中,谈论是否访问了slot是没有意义的,因为如果它以前被写入过,则表明其也被访问过。

EIP-2930

我们在文章开头提到的另一个EIP就是EIP-2930,这个改进提案添加了一种新类型的事务,该事务可以在事务负载中包括访问列表。这意味着你可以在事务开始执行之前预先声明哪些地址和slot应被视为是已访问的。例如,一个未访问slot的SLOAD成本为2100,但是如果该slot包含在事务的访问列表中,则相同的操作码成本就为100。

但是,如果当地址或存储密钥已被访问时,gas成本变更低了,这是否意味着我们可以将所有内容添加到事务的访问列表中并降低gas成本呢?不完全是这样,因为你还需要为添加的每个地址和每个存储密钥支付gas。

让我们看一个例子,假设我们正在向合约A发送一笔交易,访问列表可能如下所示:

如果我们用这个访问列表发送了一笔交易,并且第一个使用0x0slot的操作码是SLOAD,则它将花费100gas,这就降低了2000gas的消耗量。但事务访问列表中包含的每个存储密钥的成本为1900gas,所以我们只省了100gas。

这是否意味着我们在使用带有访问列表的交易时总是能节省gas消耗?并非如此,因为我们还要为访问列表中的地址支付gas成本

已访问地址

以上,我们只讨论了SLOAD和SSTORE操作码,但这些并不是柏林硬分叉之后唯一改变的操作码。例如,原先调用操作码的固定成本为700gas。但是在实施EIP-2929之后,如果地址不在访问列表中,则开销就是2600gas,但如果是在已访问列表中,则开销就是100gas。而且,与已访问存储密钥一样,之前访问该地址的操作码并不重要。

这是如何受到访问列表交易的影响的?例如,如果我们将一笔交易发送至合约A,而该合约调用另一个合约B,那么我们可以包含如下访问列表:

我们必须支付2400gas的费用才能将这个访问列表包含在交易中,但是第一个使用B地址的操作码将花费100gas。所以我们这样做就节省了100gas,如果B以某种方式使用它的存储,并且我们知道它将使用哪些密钥,那么我们还可以将它们包括在访问列表中,并为每个密钥节省100/200的gas。

但我们为什么要谈另一个合约呢?我们调用的合约怎么了?我们为什么不这样做?

我们可以这样做,但这是不值得的,因为EIP-2929指定了被调用的合约地址总是包含在accessed_addresses列表中,因此这只会白白浪费2400gas。

让我们再次分析上一节的示例:

这实际上是浪费,除非我们包含多个存储密钥。如果我们假设一个SLOAD总是首先使用一个存储密钥,那么我们至少需要24个存储密钥才能实现收支平衡。

显然,分析并创建这样的一个访问列表是没有意义的。幸运的是,我们有更好的方法。

eth_createAccessListRPC方法

Geth包含了一个新的eth\ucreateAccessListRPC方法,其可以用来生成访问列表。它的用法类似于eth_estimateGas,但它不是用于估算gas,而是返回如下内容:

也就是说,它为你提供了该交易将使用的地址和存储密钥的列表,以及如果包含访问列表,则会消耗的gas。

我想,随着时间的推移,我们会发现执行此操作的正确方法是什么,而我的伪代码猜测是:

激活合约

必须要指出的是,访问列表的主要目的不是使用gas,正如EIP所解释的:

“EIP-2929所引入的是减轻合约破坏风险,因为交易可预先指定和支付交易计划访问的帐户和存储slot。因此,在实际执行中,SLOAD和EXT*操作码只需要100gas,这已经足够低了,它不仅可防止因该EIP而导致的破坏,还可以“激活”由于EIP1884而卡住的任何合约。”

这意味着,如果一个合约对执行某些操作的成本做出假设,那么gas成本的增加可能会导致它无法工作。例如,一个合约调用另一个合约因为它假设某个函数正好使用34500gas,那么它就会中断,但如果在事务中包含适当的访问列表,那么合约将再次工作。

如果你想自己测试这些EIP,你可以复制这个repo,它有几个可使用Hardhat和geth执行的示例。有关说明,请查看README文件。

相关资料:

1、EIP-2929?和EIP-2930?

2、EIP-2930依赖于柏林硬分叉的另一组成部分:EIP-2718?;

3、EIP-2929引用了大量EIP-2200?的内容,所以如果你想更深入地了解gas成本,你应该从EIP-2200开始;

4、有关比较gas使用量变化的更复杂示例?;

标签:GASTBLBLOLOCKUGAS-JUN21币TBL价格bloc币都在哪个平台可以交易blockchain钱包中文版

UNI热门资讯
比特币:从网传义乌公开信 谈为何今年冻卡加剧、解冻更难_区块链

吴说作者|火小律 本期编辑|ColinWu近日,一封署名为义乌市局刑事侦查大队、题为《致全国各地机关的一封信》疯传网络.

DYDX:dYdX全仓保证金永续合约全新 Layer2主网已上线_STARK

我们的全仓保证金永续合约的全新Layer2主网已经上线,向所有符合我们的使用条款的交易者开放。为了扩大交易量,dYdX和StarkWare在StarkEx可扩展性引擎和dYdX的Perpetua.

LAYER:罗斯柴尔德投资公司购买超过25万股灰度以太坊信托基金_STA

根据4月15日提交给美国证券交易委员会(SEC)的一份文件,总部位于芝加哥的金融机构罗斯柴尔德投资公司(RothschildInvestmentCorp)已购买265.

GAS:一文带你了解生成艺术(媒体)的过去、现在和未来_TBL

从很多方面来看,生成艺术是与数字艺术、NFT和数字财产相关的更大的趋势潮流。生成艺术是数字艺术的一个范畴,艺术家通过使用电脑有意地引入随机性的元素作为创作过程的一部分,从而产生预期和意料之外的结.

比特币:行情分析:本周将迎来大波动_GMT

狂人本着负责,专注,诚恳的态度用心写每一篇分析文章,特点鲜明,不做作,不浮夸!本内容中的信息及数据来源于公开可获得资料,力求准确可靠,但对信息的准确性及完整性不做任何保证,本内容不构成投资建议.

比特币:独家 | 以太坊智能合约安全解析:那些智能合约独有的风险属性_SBTC币

智能合约的概念最早由知名学者NickSzabo在上世纪90年代提出。他在公开发表的多篇文章中提到了智能合约的概念,将其定义为:“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执.