AlexStokes@ralexstokes:
你可能已经听说了,@OpenEthereum客户端的一个错误导致了一些支撑以太坊网络的重要服务宕机。
我们来琢磨一下那笔造成事故的交易。
首先,我想感谢所有快速反应到事故并解决了问题的工程师:
https://twitter.com/OpenEthereumOrg/status/1382719444833726470?s=20…
另外,我没有自己跟踪所有的细节,下文中的重要事实都由用户eb在EthR&Ddiscord服务器里提出。
先从那笔触发了错误的交易开始:
https://etherscan.io/tx/0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247
过去24小时NFT平台Blur交易额近1400万美元,超过OpenSea:金色财经报道,据NFT交易数据显示,过去24小时新晋NFT平台Blur交易额达到1386万美元,涨幅达到339.84%,也是过去24小时交易额最高的NFT平台。相比之下OpenSea同期交易额为686万美元,下降2.81%,排名第二;X2Y2、Magic Eden和LooksRare分列三到五名,交易额分别为247万美元(上涨48.42%)、187万美元(下降9.38%)和137万美元(上涨111.27%)。[2022/12/11 21:36:57]
这是一笔合约调用交易,从KuCoin交易所发出,向许多地址分发ETH。对该笔交易的calldata的ABI编码错误,最终导致了链分裂。你可以在Etherscan上看看这笔交易的“InputData”。
数字投资平台Finhay完成2500万美元B轮融资,Openspace Ventures和VIG领投:6月23日消息,越南数字投资平台 Finhay 宣布完成 2500 万美元 B 轮融资,本轮融资由 Openspace Ventures 和 VIG 领投,Insignia、TVS、Headline、TNBAura、IVC.Investments 参投。Finhay 成立于 2017 年,是越南持牌经纪公司和在线投资平台,主要提供数字化金融服务,拥有超过 270 万用户,业务覆盖线上交易、金融科技、数字资产、区块链和支付等新兴垂直领域。[2022/6/23 1:26:16]
在合约中调用sendEths时,需要提供两个参数:一个是关于目标地址的不定长数组;一个是关于转账数额的不定长数组;两者相搭配才知道要转移多少钱给哪个地址。
The Doggies系列NFT24小时交易量超392万美元,OpenSea交易量排名第6:2月24日消息,据NFTGo.io数据显示,The Doggies系列NFT24小时交易量超392万美元,OpenSea交易量排名第6。该系列NFT将于明日reveal。此前报道,The Doggies系列NFT是美国说唱歌手Snoop Dogg在The Sandbox发售的1万个Avatar化身。该NFT可在The Sandbox中使用,访问Snoop Dogg在The Sandbox构建的元宇宙。[2022/2/24 10:12:25]
我们可以解析calldata来看看到底哪里出了错:第一行表示地址列表从字节64开始。第二行表示转移数额的列表从字节416开始。
?因此,大体上,我们是希望成对成对地、从上往下、向某个地址发送一定数量的ETH——看起来很直接嘛。
Cardano创始人Charles Hoskinson重回ETC Cooperative董事会:ETC Cooperative近日发推宣布Cardano创始人及IOHK首席执行官Charles Hoskinson重新成为其董事会新成员,并表示其一直是ETC的支持者,在该项目上有着独特的远见和经验。
据悉,早在2018年初,Charles就曾是ETC Cooperative最初顾问委员会的成员。现有六名董事会成员为Barry Silbert、Cody Burns、Elaine Ou、Roy Zou、Charles Hoskinson和Craig Salm。[2021/7/10 0:41:44]
然而,当我们开始遍历这个列表,我们先跳转到calldata的正确字节,而SolidityABI声明了数据的第一个字是整个不定长数组的长度。
这就是最终bug的根源:因为calldada中的值是“0x10”,但是calldata只给出了10个?地址-数值对。对这个calldata的正确ABI编码应该是“0xA”——不是“0x10”!
你可能已经猜到了那时候会发生什么事,我们可以通过执行情况跟踪器来看看:
https://etherscan.io/vmtrace?txhash=0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247&type=parity
合约成功地遍历了前10个地址。本来合约应该在此时停止执行,但根据calldata的声明,还有很多个地址!那就继续执行吧。
但是,根据calldata的结构,“第11个地址”是用于编码列表长度的0x10,所以合约就尝试发送0ETH到地址0x10。
此外,似乎,当合约尝试读取并不存在的calldata时,会返回0ETH——你可以想象成合约在这里跑出了一个错误,但它却继续发送0ETH到它从calldata中读取的另外6个“地址”。
此时,你可能会注意到,0x10有可能是我们所谓的“特殊地址”之一,它完全在EVM预编译合约的范围内。
而我们也并不期望预编译合约0x10能够返回ETH。如此,它就成了一个ETH黑洞。但是,这也并不必然造成任何问题。到底是什么导致了整个客户端崩溃?
原因在于,0x10实际上是一个由EIP-2537断言的预编译合约,是为BLS配对密码学程序而设的,但这个EIP还未部署到主网上。所以虽然你能够跟这个地址互动,但主网上的这个地址里没有任何合约,不会有任何进一步的动作。
此外,我们还需要一个事实来解释这次分裂,你可能也猜到了,就是“柏林”硬分叉:它改变了EVM中Gas消耗量的计量方法。
在EIP-2929实施后,如果你在一笔交易中对同一个存储槽多次执行状态存储操作,第一次执行会消耗更多Gas,后续执行的消耗会更少。这种重定价理论上能更准确地反映当前的客户端访问存储项的成本……
而且,要知道,在所有客户端的执行中,这些数据通常都换存在更便宜的硬件层中。
现在我们终于找到了OpenEthereum在区块#12244294处发生的Bug:该客户端包含了所有已实现的预编译,作为EIP-2929访问清单的一部分。
因为EIP-2537在大部分客户端中都已经实现就绪了,OpenEthereum对所有访问了0x10的交易都给了gas折扣。
但网络的绝大部分活跃客户端都不是这样实现EIP-2929的,它们只会给访问了已激活预编译合约的交易提供gas折扣——而EIP-2537属于还未激活的预编译合约!所以,OpenEthereum客户端对该交易消耗了多少Gas的计算与网络中其他客户端发生了分歧。
所幸,@mhswende很快找出了该bug,而@sorpaas出力修复了该bug:https://github.com/openethereum/openethereum/pull/364
还有很多东西可说,我也预期会有比我更能观察到全貌人来撰写更好的时候报告。
我能说的只是,这个bug彰显了硬分叉的内在风险,以及持续致力于建设更有弹性的基础设施的重要性。
依赖于OpenEthereum客户端的单客户端系统在今天停机了一段时间,因为客户端无法在问题区块出现后与网络保持同步。Etherscan自身也因此停机。
庆幸的是,这个bug没有严重到导致重大的链分叉,但这样的可能性并不是不存在。我们可以利用多客户端实现来提升抗性——多客户端本身就是我们以太坊生态的一大长处——并推动您的基础设施提供商也这样做。
我们已经看到,2021年的普及速度已经前所未有地快,而且前景非常光明。我们要从这个事故中吸取教训,一起打造更好的以太坊。
标签:ETHTHEOPENPENrETH2价格Hellbound Squid - The GameOPENXPENG价格
Cardano和波卡的质押份额已经提升,这两个网络继续在质押价值排名中占据主导地位。根据StakingRewards的数据,Cardano是目前区块链中质押价值最高的网络,大约有价值264亿美元的ADA被分配用于保障网络的安全.
1900/1/1 0:00:00Coinbase上市热度未退,加密货币市场周末却迎来一波猝不及防的暴跌。受访人士认为,市场杠杆率过高是加密货币市场剧烈波动的主要原因。此外,各国监管政策的不确定性也为加密市场带来风险.
1900/1/1 0:00:00据PANews统计,本周公布的区块链领域项目融资收购案共42起,涉及金额约3.15亿美元,投融资项目范围涉及开发、交易平台、矿业、协议、DeFi、NFT等领域.
1900/1/1 0:00:004月17-18日,“超算·融合,2021全球区块链算力大会”将在四川成都召开。本届大会由巴比特、链节点、币印联合主办,吴说区块链协办.
1900/1/1 0:00:00虎符、TokenPocket、PippiFinance达成三方合作上线SHIB-USDT流动性挖矿-PippiFinance开启SHIB/USDT矿池-TokenPocket作为全球最大的去中心化多链钱包.
1900/1/1 0:00:00Uniswap的去中心化交易在周二创造了新的周交易量记录,在持续的去中心化金融热潮中,累计交易量超过100亿美元.
1900/1/1 0:00:00