Understanding The Diversity Of Clients | Cardano Explorer (cexplorer.io)
Nethermind 客户端中的一个错误导致以太坊网络中 8% 的验证器瘫痪。 这应该被视为对所有由单一客户端主导的区块链网络的警告。 包括卡尔达诺在内的许多网络都面临着网络中断的风险。 如果该错误导致客户端致命崩溃,网络可能无法再生成区块。 这种风险可以通过客户的多样性来预防。 去中心化不仅涉及区块的生产或链上治理,还涉及建立替代客户的团队的多样性。 让我们解释一下这个经常被忽视的话题。
一个团队,一个客户
区块链网络是由交付软件的团队(即所谓的客户端)构建的,该团队实现协议的规则。 该团队最了解协议的设计,并定义了货币政策和奖励机制等关键功能。
志愿者(操作员)在其节点上安装此客户端。 网络逐渐变得更加分布式和去中心化。 网络中的客户端节点越多,网络对一个节点故障的恢复能力就越强。
这是一种常见且预期的情况。 结果是一个分布式网络,其中所有操作员都拥有来自同一团队的相同客户端。
产生新区块的节点比不产生区块的用户节点更重要。 因此,重要的不仅是网络中的节点数量,还有去中心化程度。 去中心化是对于网络重要的节点(并代表单点故障)的决定性因素。
在卡尔达诺(以及比特币)的背景下,这意味着网络拥有的池越多,它的弹性就越大。 稍后我们将解释客户端在其中扮演什么角色。
在卡尔达诺网络中,有随机抽取的老虎机领导者来铸造区块。 如果偶然由于节点或互联网连接问题,抽中的槽领导者没有铸造区块,那也没有太大关系。 在下一轮中,将抽出一位不同的时隙领导者,他可能会成功铸造一个新区块。
该网络似乎对单个节点故障具有弹性。
然而,这样的网络并不能免受客户端源代码中严重错误的影响。 错误可能会导致所有客户端几乎同时崩溃。 在这种情况下,新区块的铸造可能会完全停止。 用户将无法提交新交易,因为网络中可能没有任何节点能够处理它们(将它们暂时存储在内存池中)。
在图中,您可以看到网络中的所有节点都发生故障且不可用。 新区块不会被铸造。 用户无法相互交互。
如果网络的运行依赖于单个客户端实现,则失败的风险相对较高。
客户端实施可以是高质量的,从而降低了风险。 IOG 团队在客户端开发中使用正式方法,这是个好消息。 不幸的是,失败的风险仍然存在。
为什么客户多元化很重要?
防止网络故障的一项预防措施是客户端多样性。 必须有更多的客户端将由其他团队实现(可能使用不同的编程语言)。
不同的客户端必须相互兼容。 这意味着它们在通信协议和网络规则方面将完全相同。 客户的外部行为必须相同,但内部的功能可能不同。
原始团队(在卡尔达诺的例子中是 IOG)必须提供协议的正式规范。
其他团队必须知道如何实现客户端。 对于团队来说,基于网络通信或从免费公开给每个人的原始实现的源代码来观察客户端的功能相对困难。 手头有一份正式的规范总是更好。
正式规范至关重要,因为它们提供了协议应如何运作的明确描述。 这包括有关协议行为、预期输入和输出以及应执行的操作顺序的详细信息。
拥有正式的规范对于实现客户端的团队来说是有益的。 它提供了一个参考点,可以指导开发过程并帮助确保客户端正确实现。
在下图中,您可以看到原始团队除了客户端实现之外,还发布了正式的协议规范。 另外三个团队,分别标记为 A、B 和 C,发布了三个客户端 A、B 和 C。
不仅替代客户端实现的存在很重要,而且运营商(节点运营商)对它们的采用也很重要。
理想情况下,网络中各个客户端的代表应尽可能成比例。 因此,在我们的示例中,每个客户端在网络中拥有 25% 的代表权。
在下图中,您可以看到一个没有客户端具有支配地位的网络。 运营商使用客户端的 4 个实现(版本),每个在网络中占有 25% 的份额。 该网络对于特定客户端的致命故障的恢复能力显着增强。
如果一个客户端实现发生致命故障并且节点无法恢复其活动,则网络中只有 25% 的节点会受到影响。 具有不同客户端版本的其余节点(即网络中 75% 的节点)将继续工作。 区块的生产会变慢,但并没有停止。
下图中,你可以看到客户端A执行失败的情况。 由于其他客户端实现,网络可以继续铸造区块。
不同的团队不太可能在实施中犯同样的错误并引入可能导致整个节点瘫痪的错误。 多个客户端实现可以防止源代码中出现相同的错误。
错误可能会在代码中存在很长一段时间,而没有人注意到它,也不会出现。 网络中的一些异常情况可能会导致错误出现。 例如,可能会出现异常交易,导致节点在验证期间由于错误而崩溃。
我们可以说,利用多个独立共识和执行客户端的网络可确保大多数节点有效、安全且不间断地运行。 即使客户端的多个版本之一发生致命故障,也会达到这种状态(前提是该版本不具有主导地位)。 这有助于消除运行相同客户端软件的过多节点造成的单点故障,从而形成弹性网络。
当来自世界不同地区的更多团队为不同的客户工作时,就会降低单点故障的风险。 我指的是一支球队的失败。 这是因为每个团队可能都有其独特的解决问题的方法,这增加了网络的稳健性。
客户的多样性,也许对某些人来说有点令人惊讶,增加了网络的去中心化。
关于如何分散团队管理(例如IOG团队)经常存在争论。 在这场争论中被遗忘的是,IOG团队的影响力是基于他们的Cardano客户端实现在Cardano网络中占据主导地位这一事实。
拥有多个团队可确保没有任何一个团队对网络的发展或方向产生不当影响。 这符合去中心化原则,旨在防止任何单一实体拥有过多控制权。
如果只有一个团队控制着网络中处于主导地位的客户端的发展,这就是某种形式的中心化。 团队是单点故障,同时(通常)是控制协议方向和属性的未经选举的实体。
拥有多个团队会带来很多问题。 例如,谁应该资助另类客户的开发? 团队应该由谁以及如何相互协调? 如何激励运营商使用替代客户端而不是来自最古老(原始)团队的原始客户端?
节点运营商倾向于使用启动网络的团队的客户端,因为该团队最了解协议并且客户端经过了最长时间的考验。 这是合乎逻辑的行为,但它会导致中心化和上述风险。
更多卡尔达诺客户即将出现
在卡尔达诺生态系统中,多个团队计划构建替代卡尔达诺客户端。 这些团队在很大程度上依赖于 Catalyst 的资金。
构建 TypeScript 实现的团队可能是走得最远的。 他们的版本还远未成为成熟的客户端,但它可以处理基本操作,例如获取块和同步链。
也许卡尔达诺基金会和 Emurgo 可以考虑替代的客户端实现。 这些实体从最初的 ADA 销售中获得了部分资金,因此他们可以获得资金。
另外,Intersect 组织的成员也可以考虑。
建立替代客户既复杂又昂贵。 此外,IOG 定期部署升级。 这增加了新功能。 所有现有客户将来都需要与 IOG 团队的客户保持联系。 实际上,这意味着实施所有升级(所有必要的功能)。
网络上拥有更多客户端也意味着对网络升级更加警惕。 网络升级目前由硬分叉组合器处理。 客户的多元化可能会使这一过程变得复杂。
由此可见,构建替代卡尔达诺客户端的团队应该成为生态系统不可或缺的一部分,包括很可能使用项目金库中的 ADA 币提供的资金。
这对社区来说是一个挑战。 去中心化是社区的责任,因此应该确保卡尔达诺是去中心化的zed 在客户端级别。
结论
所有主要区块链,包括比特币和以太坊,都面临致命失败的风险,因为它们的运行依赖于启动网络的团队的客户端的一个主导版本。
以太坊在客户多样性方面表现最好。 5 个替代以太坊客户拥有超过 1% 的份额。 然而,Geth 客户端在网络中占据了近 80% 的份额。 比特币本质上依赖于中本聪创建的客户端的原始(修改)版本。 卡尔达诺依赖于 IOG 团队的客户。
可能会出现导致致命网络故障的异常情况。 就卡尔达诺而言,这发生在 2023 年 1 月。但是,系统自动重启,受影响的节点在几分钟内就启动并运行。 网络运行没有受到明显干扰。 网络自我“治愈”了。
以太坊已经发生过几起事件。 对于其中之一,网络无法最终确定区块。 Solana 网络需要不时重新启动。
如果区块链网络要成为世界的金融支柱,就必须确保其100%的可靠性。 目前尚不能保证这一点。 卡尔达诺社区应该考虑哪些步骤可以带来更高的客户多样性。