加载中 ...
首页 > 股票 > 区块链 > 正文

如何看待 Infura 服务崩溃及其造成的影响?

2020-11-13 08:45:45 来源:广东财经网

  事件经过

  北京时间 2020 年 11 月 11 日下午,以太坊社区知名的节点服务 Infura 被曝出 API 服务出错,并因此导致了多个依赖于 Infura 来构建的服务的崩溃,或者前端显示不正确。

  就 Infura 自身而言,可以把它理解为一个公开的以太坊节点,这个节点会接收请求并返回一定的服务,比如帮忙转发交易、比如检查某笔交易上链了没有,又或者某个账户的状态如何。实际上,只要自己部署一个以太坊节点,就能提供跟 Infura 同样的服务。但它的特殊性在于,Infura 的大部分服务都是免费的,因此很多服务(包括交易所)都选择了依赖 Infura 来向自身播报以太坊区块链的状态,免去了自己部署节点的麻烦。

  也正因此,Infura 出错,理论上波及面会很广,在事件发散的过程中,甚至还有人扬言 “以太坊会分叉(或者正在发生分叉)”。理由是两个不同的区块浏览器(Etherscan 和 Blockchair)上,对同一个块高显示了两个不同的区块(但是这两个区块之后的区块,两个浏览器的显示是一致的)。

  但很显然,以太坊根本没有分叉。从事实上来说,两个区块浏览器所显示的后续区块都是相同的,这表示出块的矿工(至少是大部分矿工)没有以两个不同的区块为父块来继续挖矿,也没有彼此拒绝对方的区块。从理论上来说,只有出块的节点彼此之间使用了不同的共识规则(因此会拒绝对方所出的块),且都占据了一定的算力,才有可能形成分叉。

  事实上,人们很快就发现了,这是因为 Infura 没有运行最新版本的 Geth 客户端,而某些特殊的交易触发了这个版本的客户端的 bug,使之宕机了。Blockchair 也是同理。所以很快就有人出来呼吁大家尽快升级 Geth 客户端。

  至北京时间 11 日 18 时,Blockchair 团队的 Nikita Zhavoronkov@nikzh 发表推特,解释事件的因果关系:

  以太坊开发者某一次对代码的更改导致了当日以太坊区块链的分裂,分裂自区块高度 11234873 开始;

  没有更新客户端的服务商,包括 Blockchair 和 Infura,就因此受害,被留在了一个少数人组成的链上(该链在 2 小时内出了 30 个块)

  从技术上来说,这意味着发生了一次 “未公开的硬分叉(unannounced hard fork)”

  修复措施是升级 geth 客户端并运行 debug.setHead(11234872)

  他还表示,这件事绝不该被低估,应该被认为是 The DAO 事件之后,以太坊区块链上最严重的一次事故。

  确实很奇怪,为什么会有某个错误仅仅导致软件在某个时间以前的历史版本崩溃而现有版本不崩溃?这岂非意味着,不同版本的 geth 客户端的共识规则实际上不一样,也就是某时某刻发生了一次不能向后兼容的共识规则改变(“硬分叉”)?此外,一个 Infura 的崩溃就导致了大面积的服务出错,这是否意味着 Infura 已经成了一个 “单点故障” 来源?

  缘由

  针对上面的两个问题,Geth 客户端团队的领导者 Péter Szilágyi@peter_szilagyi 都有回应。

  从技术上来说,的确可以说是发生了 “未公开的硬分叉”,但这只是因为开发人员修复了一个沉睡了两年多的 bug,而因为担心公开披露这个 bug 会导致以太坊遭到攻击,所以选择了静默修复。

  人们也不该鄙视 Infura 没有使用最新的 Geth 客户端。从运营者的角度,不紧跟软件的最新版本是理性的。而依赖于 Infura 的服务,是自己把这个权利交出去了,而不是别人禁止了你运行节点,所以也没什么可抱怨的。

  Peter 的回应也引起了不同的反应。一位门罗社区的人表示,在 2017 年,他们也曾因为同样的顾虑而选择了静默修复 bug。当然,也有人认为,选择静默修复是对的,但至少应该通知大型基础设施的提供者,只要联系了,就能大幅减少这一漏洞所造成的破坏。

  北京时间 12 日凌晨 5:34,Peter 发布了《Geth v1.9.17 客户端所造成破坏的事后报告》,定位了问题的来源:发布于 2019 年 11 月 7 日的 Geth v1.9.7 错误实现了 EIP-211;John Youngseok Yang 在 2020 年 7 月 15 日报告了该问题,于是 Geth 团队在 7 月 20 日更新的 v1.9.17 版本中修复了这个问题。该次修复使得 Geth 客户端在执行涉及相关规则的交易时能跟其他以太坊客户端(如 Besu、Nethermind)相一致,但却使 v1.9.17 版本与历史版本的 Geth 发生了不一致。

  如 Peter 所述,这个过程完全不是为了引入某个以太坊社区不知道或者不同意的共识规则,仅仅是因为写了 bug 所以必须修复 bug。除非你管写了 bug 也叫 “硬分叉”,否则就没有理由管修复 bug 叫 “硬分叉”(Nikita 显然不同意这一点,他表示这里就是发生了两次,而不是一次,硬分叉)。

  其次,到底怎么发布修复,实际上并不简单。以太坊的硬分叉协调也需要很长时间。如果公开一个带有严重危险性的 bug,在各节点升级的过程中难保不会有人尝试攻击。作为客户端开发者,他考虑的更多是以太坊网络的安全性,而不是某个服务的安全性。而且,他们也并不是对所有的 bug 都采取同样的静默修复措施,很多都是公开修复的。

  12 日上午 7:11,Optimism 团队的 Jing is hiring for Optimism@jinglanW 出来披露了更多信息:他们在 6 个月前复制了 Geth 客户端的代码库来研究和开发 Optimistic Virtual Machine,在该过程中,他们发现了一个神秘的 bug,也修复了该 bug,但一直无法定位其来源;他们一直以为,这个 bug 可能跟团队引入的定制化改进有关,但 11 号他们开始怀疑错误就存在于旧版的 geth 客户端中,而不是因为他们引入了一些改进。于是他们看了 ethernodes.org 显示的节点分布(并发现绝大多数节点已经升级)之后,就决定在主网上测试该 bug。因此有了后面的事情。

  所以,实际上,是 Optimism 团队发现了一个 bug,草率地决定在主网上测试该 bug 还存不存在,再加上 Geth 团队此前选择了静默修复该 bug,才使得某些没有及时升级的节点出错了。

  该如何理解和看待这件事情呢?

  就事情的本因来看,这是因为客户端团队选择了静默修复一个沉睡了许久的 bug。虽然很多人认为 geth 团队可以通过联系基础设施提供者来降低破坏,但我在这里还是认为,我们应该给客户端开发人员更多的信任和尊重。我相信 Geth 客户端团队这么做是有理由的,他们知道绝大部分节点都在使用自己的软件,也考虑了 bug 的沉睡时间,因此选择了静默修复。从事后诸葛亮的角度,当然提前通知了大的基础设施提供者会更好,破坏会更少。但是,这样吹毛求疵合理吗?为什么依赖于 Infura 的服务不假设 Infura 可能崩溃?

  我承认我在这里不太公正,但更公正的话,也有很多人已经说过了。我在此只想表达我对 geth 客户端团队的敬意。我愿意把印象分给他们,因为他们在过去提供了许许多多的工作量证明。他们值得大家的尊敬。

  在静默修复措施的执行上,当然存在提高的空间,也应该跟包括门罗和比特币社区学习经验。但如果只想着谴责 geth 团队,乃至以阴谋论来揣度他们,那才是更大的不公正。

  关于 “Infura 是否成为了单点故障的来源”,也分简单的回答和复杂的回答。简单的回答是,不是,因为就像 Peter 所说,从来没有人禁止你部署节点,只是很多提供商自己选择了外包。Infura 不是设计层面上必须经过的一个单点。只是因为各种各样的原因,它成了可能是最大的节点服务提供商。

  但复杂的回答是,以太坊节点的资源消耗比较大,确实是一个被低估的问题。以太坊协议的运行需要各节点完全执行区块中包含的交易,而执行交易必须从状态数据中取出数据、并且完成后也要将结果写入,这个过程会涉及大量的硬盘随机读写。而且,随着状态数据体量的扩大,读写的效率要求也会提高。前些年热议的 “状态膨胀” 问题,在当前的以太坊上还没有解决。运行节点的门槛高,节点的数量自然就少。从善意的角度看,如果以太坊节点的运行门槛降低,我相信会有更多人自建节点(毕竟更安全),而不是选择依赖于 Infura。

  但这个问题的解决,同样依赖于以太坊客户端开发者和研究人员的智慧。无状态性,可以说是解决状态膨胀问题的终极方案。而在终极方案变得可行之前,我们仍然需要客户端开发者,为我们贡献更高效率的客户端。

  所以,确实发生了一件事,也确实暴露出了一些问题、指出了我们学习和进步的方向。但解决这些问题,离不开我们对社区中不同团体的理解和尊重。远离阴谋论,远离恶意和自作聪明的嘲讽,弄清楚问题的根源,思考其实质和改进方案。我们做的事情,才决定了我们是谁。

“广东财经网”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服邮箱1098101642@qq.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。

  • 声音提醒
  • 60秒后自动更新
  • 【民政部回应何时恢复婚姻登记】民政部社会事务司二级巡视员杨宗涛表示,婚姻登记场所是人群聚集场所,部分地区暂停婚姻登记工作是对人民群众安全负责。未停止登记的地方推广用电话、网络、qq群预约登记,控制登记人数,分批分段登记,减少人员聚集和在登记机关停留时间。已停止婚姻登记地方将根据当地疫情控制情况逐渐恢复。

    15:54
  • 欧洲央行副行长金多斯:欧洲央行还没有达到逆转利率。宽松政策的副作用更明显了。

    15:54
  • 财经网站Forexlive分析师Justin Low评瑞士1月CPI月率:尽管通胀年率保持稳定,但核心通胀率有所下降,这一点令人更加担忧。这只是进一步巩固了瑞士央行维持现有货币政策不变,并可能在未来寻求更多宽松措施的观点。

    15:54
  • 【武汉两大批发市场商户开业率超过80%】商务部市场建设司司长朱小良10日称,目前武汉生活必需品供应基本正常,除冷鲜肉、鲜叶菜等少数品种存在结构性短缺外,大部分重要生活物资供应充足,未发生明显抢购或脱销断档情况。当地白沙洲和四季美两大批发市场正常营业,商户开业率超过80%,日交易量上升至3000吨以上。(国是直通车)

    15:53
  • 【日本2019年经常项目顺差增长4.4%】日本财务省10日发布的国际收支初步统计报告显示,主要受外国人入境游消费扩大影响,2019年日本经常项目顺差增长4.4%。报告显示,2019年日本经常项目顺差为20.06万亿日元(1美元约合109.8日元)。其中,商品贸易方面,由于液化天然气价格下跌等因素,进口下降5.6%至75.56万亿日元;由于汽车部件及钢铁等产品出口减少,出口下降6.3%至76.12万亿日元。货物贸易顺差减少53.8%,为5536亿日元。(新华社)

    15:53
  • 欧元兑美元EUR/USD短线波动不大,现报1.0952。

    15:53
  • 瑞士1月CPI年率:0.2%,前值:0.2%,预期:0.1%;瑞士1月CPI月率:-0.2%,前值:0%,预期:-0.2%。

    15:52
  • 英镑兑美元GBP/USD短线走低13点,现报1.2890。

    15:52
  • 【宁德时代“供电”国产特斯拉 有望拉低售价20%】全国乘联会秘书长崔东树分析认为,“随着特斯拉国产化率提升和产能爬坡,未来特斯拉国产车型的价格下探空间还是很大的。”他预计今年下半年,国产Model 3车型的售价就有望降至25万元,降幅接近20%。(新京报)

    15:51
  • 【内蒙古:对不裁员或少裁员企业返还上年度50%失业保险费】据内蒙古新型冠状病毒肺炎疫情防控工作指挥部消息,疫情期间,内蒙古对不裁员或少裁员的企业返还上年度实际缴纳失业保险费的50%,对面临暂时性经营困难的中小企业,返还标准提高到上年度6个月企业及其职工缴纳社会保险费的50%。

    15:51
  • 【商务部:2019年服务进出口总额54152.9亿元 同比增长2.8%】商务部新闻发言人表示,2019年,在服务贸易创新发展试点等政策的激励下,我国服务贸易总体保持平稳向上态势,逆差明显下降,结构显著优化,高质量发展成效初步显现。全年服务进出口总额54152.9亿元(人民币,下同),同比增长2.8%。其中,出口总额19564.0亿元,同比增长8.9%;进口总额34588.9亿元,同比减少0.4%。(第一财经)

    15:51
  • 【振华股份:疫情导致下游客户开工推迟 产品库存上升】振华化学公告,公司目前生产经营稳定,所有产能均正常开工,原材料采购能基本满足生产需要,由于疫情导致下游客户开工推迟,公司出货量减少,产品库存有所上升。公司将根据客户需求、疫情及市场变化,适度调整生产经营策略,尽可能保持生产经营的稳定。

    15:50
  • 环旭电子2月10日晚间公告,公司2020年1月合并营业收入为23.27亿元,较去年同期的合并营业收入减少27.83%,较2019年12月合并营业收入环比减少37.23%。

    15:49
  • 精测电子:与京东方集团签订了多份销售合同,合同累计金额达到6.96亿元。

    17:12
  • 华夏银行:银保监会同意本公司在全国银行间债券市场发行不超过100亿元人民币的金融债券,募集资金全部用于绿色信贷。

    17:03