Alex Stokes@ralexstokes:
你可能已经听说了,@OpenEthereum 客户端的一个错误导致了一些支撑以太坊网络的重要服务宕机。
我们来琢磨一下那笔造成事故的交易。
首先,我想感谢所有快速反应到事故并解决了问题的工程师:
https://twitter.com/OpenEthereumOrg/status/1382719444833726470?s=20…
另外,我没有自己跟踪所有的细节,下文中的重要事实都由用户 eb 在 Eth R&D discord 服务器里提出。
先从那笔触发了错误的交易开始:
https://etherscan.io/tx/0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247
Catharsis by Dario Lanza系列NFT 24小时交易额居OpenSea首位:金色财经报道,OpenSea数据显示,Catharsis by Dario Lanza系列NFT 24小时交易额为451 ETH,位列OpenSea首位。[2022/9/11 13:22:25]
这是一笔合约调用交易,从 KuCoin 交易所发出,向许多地址分发 ETH。对该笔交易的 call data 的 ABI 编码错误,最终导致了链分裂。你可以在 Etherscan 上看看这笔交易的 “Input Data”。
在合约中调用 sendEths 时,需要提供两个参数:一个是关于目标地址的不定长数组(dynamically sized array);一个是关于转账数额(以 wei 为单位)的不定长数组;两者相搭配才知道要转移多少钱给哪个地址。
以V神为封面的《时代》杂志NFT已上线以太坊,并已上架OpenSea:3月24日消息,以V神为封面的《时代》杂志 NFT 已上线以太坊,在完成空投后,已上架 OpenSea。发行方表示,这是首个以 NFT 形式发行的去中心化杂志,NFT 持有者可通过交互阅读完整杂志。[2022/3/24 14:15:34]
我们可以解析 call data 来看看到底哪里出了错:第一行(在 Etherscan 上标记为 ?“”)表示地址列表从字节 64(行 “”)开始。第二行表示转移数额的列表从字节 416(行 “”)开始。
?因此,大体上,我们是希望成对成对地、从上往下、向某个地址发送一定数量的 ETH —— 看起来很直接嘛。
然而,当我们开始遍历这个列表,我们先跳转到 call data 的正确字节,而 Solidity ABI 声明了数据的第一个字是整个不定长数组的长度。
OpeaSea机器人可能会影响拍卖:OpenSea拍卖系统似乎正在被机器人利用。以太坊钱包似乎以惊人的速度取消订单,使用 OpenSea 合约的最后一千笔交易中有超过四分之一被取消。
行业研究员Mike Dudas表示,机器人在被接受但在执行之前取消竞价,把系列+版本的价格越来越低;然后在买涨后拉动相反的动作来引诱价格走高。据一位知名的Solidity开发人员称,机器人会观察是否有人会接受他们的出价,然后通过取消出价来提前运行,因此接受失败。(Bein Crypto)[2021/8/12 1:51:01]
这就是最终 bug 的根源:因为 call dada 中的值是 “0x10”(注意,这可是 16 进制!),但是 call data 只给出了 10 个 ?地址-数值对。对这个 call data 的正确 ABI 编码(填在行 和行 的)应该是 “0xA” —— 不是 “0x10”!
Open DeFi联盟公布首批新成员:Open DeFi联盟迎来首批新成员:Aave,Balancer,BlockScience,dydx,Ocean Protocol,Outlier Ventures,Quantstamp和SuperRare。该联盟目前已有16名成员,其中4个为锁定资产全球排名前20的DeFi项目。Open DeFi联盟初始成员包括红杉资本、Blockpower Capital、dForce、MCDEX、Antelope Holdings、DeBank、MoonSwap以及Conflux。
Aave创始人兼首席执行官Stani Kulechov感谢了Open DeFi联盟对DeFi“无国界精神”的支持,并表示,作为联盟一员,他为能够合作构建金融工具和基础设施而感到兴奋。
dYdX商务发展经理David Gogel看到了中国市场所带来的机会,认为:“中国市场在全球DeFi生态系统中发挥着重要作用,并且是促成全球DeFi生态系统成功的关键。中国庞大的用户群将为全球市场带来更多流动性、引入更多用户和更多创新,从而催生出全球DeFi生态系统的增长潜力。”[2020/11/10 12:14:15]
你可能已经猜到了那时候会发生什么事,我们可以通过执行情况跟踪器(execution trace)来看看:
动态 | 巴西企业Rocelo Lopes声称将成为Libra网络节点:据Cointelegraph报道,巴西企业Rocelo Lopes称已与Facebook谈判成为首批Libra官方合作伙伴,并将运营Libra的节点。Facebook目前并没有具体回应这条消息,仅表示正在与近200万用户谈论在巴西的网络节点,超过1.5十亿用户与全球主要的支付网络将参与进来。[2019/6/29]
https://etherscan.io/vmtrace?txhash=0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247&type=parity
合约成功地遍历了前 10 个地址。本来合约应该在此时停止执行,但根据 call data 的声明,还有很多个地址!那就继续执行吧。
但是,根据 call data 的结构,“第 11 个地址” 是用于编码列表长度的 0x10,所以合约就尝试发送 0 ETH 到地址 0x10。
此外,似乎,当合约尝试读取并不存在的 call data 时,会返回 0 ETH —— 你可以想象成合约在这里跑出了一个错误,但它却继续发送 0 ETH 到它从 call data 中读取的另外 6 个 “地址”。
此时,你可能会注意到,0x10 有可能是我们所谓的 “特殊地址” 之一,它完全在 EVM 预编译合约的范围内(所谓 “预编译合约”,就是一类特殊合约,在 EVM 之外有最优的实现,但是编译起来与大多数合约一样)。
而我们也并不期望预编译合约 0x10 能够返回 ETH 。如此,它就成了一个 ETH 黑洞。但是,这也并不必然造成任何问题。到底是什么导致了整个客户端崩溃?
原因在于,0x10 实际上是一个由 EIP-2537 断言的预编译合约,是为 BLS 配对密码学程序而设的,但这个 EIP 还未部署到主网上。所以虽然你能够跟这个地址互动,但主网上的这个地址里没有任何合约,不会有任何进一步的动作。
此外,我们还需要一个事实来解释这次分裂,你可能也猜到了,就是 “柏林” 硬分叉(也正是这次硬分叉使这个问题浮出水面):它改变了 EVM 中 Gas 消耗量的计量方法。
在 EIP-2929 实施后,如果你在一笔交易中对同一个存储槽多次执行状态存储操作,第一次执行会消耗更多 Gas,后续执行的消耗会更少。这种重定价理论上能更准确地反映当前的客户端访问存储项的成本 ……
而且,要知道,在所有客户端的执行中,这些数据通常都换存在更便宜的硬件层中。
现在我们终于找到了 OpenEthereum 在区块 #12244294 处发生的 Bug:该客户端包含了 所有 已实现的预编译,作为 EIP-2929 访问清单的一部分。(译者注:此处应为 “EIP-2930”)
因为 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 年的普及速度已经前所未有地快,而且前景非常光明。我们要从这个事故中吸取教训,一起打造更好的以太坊。
标签:ETHOPENPENTHEtogetherbnb可以推到的有谁opengaga币交易kunpengPepeTheGrove
本内容中的信息及数据来源于公开可获得资料,力求准确可靠,但对信息的准确性及完整性不做任何保证,本内容不构成投资建议,据此投资,责任自负.
1900/1/1 0:00:00金色周刊是金色财经推出的一档每周区块链行业总结栏目,内容涵盖一周重点新闻、矿业信息、项目动态、技术进展等行业动态。本文是其中的新闻周刊,带您一览本周区块链行业大事.
1900/1/1 0:00:00安永(EY)的区块链负责人Paul Brody表示,DeFi优雅地展示了如何使用开放协议来建立“共享”业务。过去,金融服务吸引了区块链领域里的绝大部分关注,但现在,一个新的时代即将到来.
1900/1/1 0:00:00在以太坊2.0还未上线的时候,是其他公链奋发图强的机会。这似乎已经成为其他公链的共识,所以在这一轮牛市里,很多公链都在努力扩张,不断和其余公链合作,以丰富生态.
1900/1/1 0:00:00我们看下比特币矿工收益长期走势与比特币现货价格走势之间的关系,研究可以发现,目前虽然价格已经远远超过2017年的牛市顶点2万美金,不过矿工收益目前还只是刚刚超过17年比特币2万美金的水平.
1900/1/1 0:00:00最近,建湖破获全国首例利用区块链合约技术开设案,共抓25人,查扣虚拟货币130万个,犯罪数额高达价值2600万元,在全国范围内引起关注.
1900/1/1 0:00:00