专栏首页区块链大本营科普 | ETH2 Staking 指南 :客户端多样性为何如此重要

科普 | ETH2 Staking 指南 :客户端多样性为何如此重要

作者 | Carl Beekhuizen

翻译&校对 | 闵敏 & 阿剑

来源 | 以太坊爱好者

免责声明:本文没有贬低任何一个客户端。每个客户端,甚至是规范,可能都存在不足和漏洞。ETH 2.0 是一个复杂的协议,实现这个协议的人也都是肉体凡胎。本文旨在强调如何以及为何要降低风险。

随着 Medalla 测试网上线,官方团队鼓励人们对不同的客户端进行实验。从创世的那一刻起,这么做的重要性便凸显出来:Nimbus 和 Lodestar 节点因无法处理测试网的负载量而卡住 [0] [1]。结果,Medalla 在上线半个小时内无法敲定区块。

在北京时间 8 月 15 日,由于 Prysm 客户端用来作为参照的时钟服务器突然出现偏差,Prysm 节点的时钟提前了 4 小时。因此,这些节点一直在为超前的 slot 创建区块和见证消息。等这些节点的时钟恢复正常后,那些禁用了默认罚没保护机制的验证者发现自己遭到了罚没。

若想了解更详细的情况,我强烈推荐你阅读 Raul Jordan 的《ETH2 Medalla 测试网事故》一文(编者注:见文末超链接)。

时钟故障——情况恶化

出现时钟偏差时,Prysm 节点占全网节点的 62% 左右。这就意味着,网络无法达到敲定区块所需的最低参与率(> 2/3)。更糟糕的是,这些节点找不到它们所预期的区块链顶端(历史记录中有长达 4 小时的 “空白”,而且所有 Prysm 节点的时钟之间都存在细微偏差),因此这些节点都在猜测 “缺失” 数据,创建了很多短的分叉链,造成网络拥堵。

-目前,在 Medalla 测试网的所有节点中,Prysm 节点占比高达 82% ?!(ethernodes.org)-

这时,网络上充斥着成千上万个关于区块链顶端的猜测,而且还在不断增加之中,为了辨别哪个分叉是正确的,所有客户端都开始不堪重负。这就导致节点出现停滞不前、无法同步和内存不足等问题,以至于情况进一步恶化。

塞翁失马,焉知非福。经过这次事故,我们不仅可以修复时钟的根本问题,还能在大规模节点故障和网络负载过重的情况下对客户端进行压力测试。尽管如此,这次事故本来不会造成这么极端的后果,根本原因在于 Prysm 节点占比过大。

去中心化有利于 ETH 2.0

正如我此前所讨论的那样,就异步拜占庭容错算法而言,1/3 是安全阈值。如果超过 1/3 的验证者离线,网络就无法实现终局性。虽然 ETH 2.0 区块链在不断增长,但是验证者却不敢保证哪个区块、哪个状态一定不会被颠覆。

去中心化有利于验证者

从根本上来说,我们希望经济激励机制足以让验证者做对整个网络都好的事,而不用我们相信他们是好人。

如果有超过 1/3 的验证者节点离线,离线节点所遭受的惩罚就会加重。这就是所谓的不作为惩罚(inactivity penalty)。

也就是说,作为一名验证者,你会希望自己在因为某种原因被迫离线的同时,不会有很多其它节点因为同样的原因离线。

罚没也是如此。 虽然你的验证者节点有可能因为规范或软件故障/漏洞而遭到罚没,但是个体罚没只会损失 1 ETH 。

然而,如果有许多验证者和你同时遭到罚没(达到 1/3 的安全阈值),罚金就会高达 32 ETH 。(预知详情,可参见这篇文章。)

上述两种情况分别称为活性反相关机制 (liveness anti-correlation)和安全性反相关机制(safety anti-correlation),是 ETH 2.0 中精心设计的部分。反相关机制将个体惩罚与每个验证者对网络的影响联系在一起,以此激励验证者做出对网络最有利的决策。

一些数据

ETH 2.0 由多个独立团队实现。每个团队都根据 ETH 2.0 研究团队编写的规范开发独立的客户端。这样可以确保有多个信标链节点和验证者客户端实现。在构建 ETH 2.0 客户端时,每个客户端团队在技术、语言、优化和权衡关系方面会做出不同的决定。这样一来,即使 ETH 2.0 系统的任意一层出现漏洞,只会影响运行特定客户端的节点,不会波及全网节点。

以 Medalla 测试网上 Prysm 节点的时钟偏移为例。如果只有 20% 的 ETH 2.0 节点运行 Prysm 客户端,且 85% 的验证者在线,则 Prysm 节点就不会遭受不作为惩罚。开发团队只需熬几个通宵就可以解决这个问题,惩罚力度也能控制在最小范围内。

事实上,由于太多验证者都集中在同一个客户端上(而且很多验证者都禁用了罚没保护机制),短时间内遭到罚没的验证者人数在 3500 至 5000 之间。* 如此高的相关性意味着,这些验证者的损失约为 16 ETH ,就因为他们运行的是热门客户端。

  • 至本文截稿时,罚没金额还在大幅增加,尚未得到最终数据。

不妨来试试其它客户端

现在正是尝试不同客户端的时候。不妨来体验一下小众客户端。(点击此处,查看验证者的分布情况。)目前,Lighthouse、Teku、Nimbus 和 Prysm 都比较稳定,Lodestar 正在迎头赶上。

最重要的是,一定要尝试新的客户端!我们可以在 Medalla 上让不同客户端的验证者分布合理化,以便迎接 ETH 2.0 主网上线。

(完)


原文链接:

https://blog.ethereum.org/2020/08/21/validated-why-client-diversity-matters/

本文分享自微信公众号 - 区块链大本营(blockchain_camp)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 技术分析!什么是以太坊无状态客户端?

    现在有一个协议转换现象,从理论上来说,它可以转换成很多其他不同的协议,从数学上来看,它就像如下情况。假设我们使用状态转移,STF(S, B) -> S’,其中S...

    区块链大本营
  • 通证经济系统设计的一个优秀范例——般若链

    区块链大本营
  • 漫话 | 比特币百年战争史

    区块链大本营
  • 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较。

    达达前端
  • 菜菜从零学习WCF五(生成客户端)

      --通常,可以通过使用ServiceModel Metadata Utility Tool(Svcutil.exe)完成此操作

    aehyok
  • Apache IoTDB 系列教程-6:性能优化(0.8-0.10)

    今天的内容包括建模优化、读写性能优化,会涉及一些简单的原理介绍。主要面向 0.8 - 0.10 版本。

    Apache IoTDB
  • strncmp函数——比较特定长度的字符串

    strncmp函数用于比较特定长度的字符串。 头文件:string.h。 语法  int strncmp(const char *string1, const ...

    Angel_Kitty
  • Python 中的字符串操作

    又有好久不总结知识点了,大三不仅专业课程变多了,其他事情也多了。最近各种熬夜、码码。。。唉,说好的大学生活好呢? 好了,不扯淡了,最近研究了一下 Pytho...

    指点
  • 在线远程办公,企业选择哪个平台适合

    一场突如其来的疫情,让所有人生活与工作的节奏发生了改变。为了防控疫情,多地相继发布了延迟开学、复工的通知。

    用户3865428
  • 为什么 HTTPS 是安全的?你知道吗?

    都知道 HTTPS 安全,可是为什么安全呢?看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,HTTP有可能被中间人攻击和拦截,下面就是详细的 HTT...

    程序员白楠楠

扫码关注云+社区

领取腾讯云代金券