- A+
雍和比特币
柏林以太坊的晋级改变了用气量的计量方法,OpenEM客户端在过错买卖的用气量核算上与网络中其他客户端存在差异。
原题:浅显科普客户端晋级后犯错的全过程“柏林”作者:亚历克斯·斯托克斯翻译:阿健您或许现已传闻,@openem客户机中的一个过错导致了支撑以太坊网络的一些重要服务的停机。让咱们想想形成事端的原因。首要,我要感谢一切对事端反响敏捷、解决问题的工程师们。别的,我自己也没有追寻一切的细节。下面的重要现实都是由eth RD;discord server中的用户EB供给的。从引发过错的买卖开端。这是kucoin买卖所的一项合约买入买卖,用于将eth分配到多个地址。业务调用数据的ABI码过错,终究导致了链割裂。您能够在Etherscan上看到买卖的“输入数据”。当1/在合同中调用sendEths时,它需求供给两个参数:一个是关于方针地址的动态巨细数组;另一个是搬运金额的无限长数组(用Wei表明);这两个装备将知道要向哪个地址搬运多少钱。2/咱们能够剖析呼叫数据,看看哪里犯错了:榜首行(在Etherscan上用“[0]”符号)指示地址列表以字节64最初(第“[2]”行)。第二行显现转账金额列表,从字节416开端(第“[13]”行)。3/因而,一般来说,咱们期望将必定数量的eth成对地从上到下发送到一个地址-这好像十分直接。4/可是,当咱们开端遍历列表时,咱们跳转到调用数据的正确字节,并且实心ABI表明数据的榜首个字是整个不定长数组的长度。5/这是最终一个过错的根本原因:由于call dada中的值是“0x10”(留意,这是十六进制!)可是调用数据只给出10个地址-值对。此调用数据的正确ABI代码(填写第[2]和[13]行)应为“0xa”-而不是“0x10”!6/你或许现已猜到了那时会产生什么。咱们能够经过履行痕迹看到。7/contract成功地遍历了前10个地址。本来,这个时分合同应该中止了,可是依据通话数据的说法,还有许多地址!那就去吧。可是,依据呼叫数据的结构,“第11个地址”用于编码列表的长度。因而,契约测验将0 eth发送到地址0x10。8/此外,当合同企图读取不存在的呼叫数据时,它好像会回来0 eth—您能够幻想合同在这里犯错,但它会持续将0 eth发送到它从呼叫数据读取的其他六个“地址”。此刻,您或许会留意到0x10或许是咱们所谓的“特别地址”之一,它彻底在EVM预编译契约的范围内(所谓的“预编译契约”是一种特别契约,它在EVM之外有最好的完成,但它像大多数契约相同编译)。咱们不期望预编译的契约0x10回来eth。这样,它就变成了一个黑洞。可是,这并不必定会引起任何问题。是什么导致整个客户端溃散?原因是0x10实际上是eip-2537声明的预编译协议,它是为BLS配对加密程序设计的,但该eip没有布置到主网。因而,虽然您能够与此地址进行交互,但主网络上的此地址中没有契约,因而不会有进一步的操作。此外,咱们需求一个现实来解说这种割裂。正如你或许现已猜到的,这是柏林硬叉(这使问题浮出水面):它改变了测量方法的天然气耗费电动汽车。在eip-2929完成之后,如果在一个业务的同一个存储槽上履行多个状况存储操作,那么榜首次履即将耗费更多的gas,而后续履即将耗费更少的gas。理论上,这种从头定价能够更精确地反映客户拜访存储项的当时本钱此外,应该留意的是,在一切客户机的履行中,数据一般存储在较廉价的硬件层中。现在咱们总算在block#-12244294找到了openeim的bug:客户机包括一切预编译的完成,作为eip-2929拜访列表的一部分。(注:应为“eip-2930”)由于eip-2537现已在大多数客户机上完成了(并且它从前被提议包括在“Berlin”晋级中!)openem为一切拜访0x10的业务供给gas扣头。可是,网络中的大多数活动客户机并没有以这种方法完成eip-2929。它们只对拜访激活的预编译合同的业务供给gas扣头-eip-2537归于非激活的预编译合同!因而,openem客户端对业务耗费的气体量的核算与网络中其他客户端的核算不同。走运的是,@mhswende很快发现了这个bug,@sorpaas尽力修正它。还有许多话要说,我期望有一个更好的时刻写一份陈述,比我能够调查全景。我只能说,这个bug凸显了硬分叉的固有危险,以及持续构建更具弹性的基础设施的重要性。依赖于openem客户机的单客户机体系今日现已停机一段时刻了,由于出现问题块后,客户机无法跟上网络。以太扫描自身被封闭了。走运的是,这个过错并不严重到导致一个首要的链叉,但这种或许性并非不存在。咱们能够使用多客户机完成来增强阻力—多客户机是咱们以太坊生态体系的优势之一—并推进您的基础设施供给商也这样做。咱们看到,2021年普及率是史无前例的,远景十分光亮。咱们应该从这次事端中吸取教训,一起建造一个更好的以太坊。
- 我的微信
- 这是我的微信扫一扫
-
- 我的微信公众号
- 我的微信公众号扫一扫
-






2021年6月4日 上午5:53 沙发
将区块链技术应用在金融行业中,能够省去第三方中介环节,实现点对点的直接对接,从而在大大降低成本的同时,快速完成交易支付。