TinTinLand | 潜力股公链 DFINITY 新版白皮书解读
The following article is from TinTinLand Author TinTinLand
1
导语
1
导语2022 年 2 月初,基于 DFINITY 生态开发的首个隐私邮件 DApp Dmail 获得 Amino Capital 战略投资。据悉,Dmail 能做到与传统邮箱互发邮件,且相较于传统邮箱,具有区块链属性的 Dmail 还能实现信息的加密传输和邮箱名 NFT化。这是对于 Web3.0 时代的通讯软件预备,以“数字身份”的形式作为去中心化网站和 DApp 的入口。笔者想提出的问题是,Dmail 为什么选择 Dfinity 呢?
相比于区块链“半壁江山”的公链们,Dfinity 崭露头角的次数并不多。没有 DeFi 大火的时候展示一点火花,也没有在“NFT”元年挣个席位。但是从上线后,类似 Dmail 能让人窥见 Web3.0 具体实现样貌一角的例子并不少见。
DFINITY 于 2020 年 7 月发布了开源版本短视频社交软件“CanCan”,我们可以简单地将其对标 Web2.0 的抖音。CanCan 基于 DFINITY 的编程语言 Motoko 打造,所有代码数不到 1000 行。这与抖音的、Facebook 的几千万行代码相比,可以称得上是令人惊叹。同时 CanCan 的代码是开源的,产品的所有权不属于任何中心化机构。同年 10 月 1 日, DFINITY 公开了其治理系统和代币经济模型,项目估值一度达到 95 亿美元,排名跃然于前五。同年 12 月底,完成了从铜到汞五条网络的里程碑演变。DFINITY 基金会创始人兼首席科学家 Dominic Williams 在「2020 FAT 价值时代高峰论坛暨颁奖盛典」上曾表示:互联网计算机是区块链的第三次伟大创新。
本文将解读 DFINITY 白皮书原文,从官方说明的最底层逻辑出发,看看 DFINITY 如何能从技术出发,打破互联网 Big tech,让各种 Web2.0 软件利用自治软件和去中心化的治理实现开源商业的协同效应,从而真正实现 Web3.0;同时也想通过白皮书提到的架构来看 DFINITY 所设想和构建的“世界计算机”系统的技术实现。无区块链行业经验的读者阅读本文时,可能会有阅读门槛,但也欢迎将产生的问题评论在下方,也许会得到出于意料的答案。
2
概要纵观区块链的发展历史和目前进程,BTC 带来了去中心化货币时代、ETH 代表了操作系统领域、Filecoin 代表了存储,DFINITY 则代表了计算领域的革新和 Web3.0 的落地实现。Internet Computer(下文简称 IC)是主网络,是一个第一层协议,旨在开发一个去中心化的公共网络,DFINITY 是开放式的虚拟区块链计算机和技术,延伸了以太坊生态链到广泛的商业应用场景中。本文将采用白皮书官方说法“Internet Computer”来称呼目前传播场景下常使用的“DFINITY”链。本部分主要说明一些 IC 涉及的技术术语,及与其他公链相比技术和实现上的不同,或者说技术和功能上的闪光点。可以说 IC 是对于可扩展性、去中心化和安全组合的一次全新尝试。
2.1 共识协议
2.1 共识协议
从共识协议来看待 IC 和其他几大公链,IC 采用了一个混合模型 DAO 控制网络(DAO-controlled network),即在拥有有许可协议的效率的同时,又能提供去中心化 PoS 协议的许多好处。Bitcoin、Ethereum 和 Algorand 的共识协议基于区块链,采用工作量证明(Proof of Work,PoW)或是权益证明机制(Proof of Stake,POS)。尽管这些协议是完全去中心化的,但是其效率相较于有许可的协议更低。
DAO 的运行机制为:每个子网运行一个有许可的共识协议,由一个 DAO 决定哪些实体可以提供节点副本,配置网络,提供公钥基础设施,并且控制节点副本部署的协议版本。IC 的 DAO 被称为网络神经系统(NNS),基于 Pos 协议,即相关决策都由社区成员决定,社区成员的投票权由其在 NNS 中质押的 IC 原生治理代币(ICP)数量决定。通过这个基于 PoS 协议创建的治理机制,可以创建新的子网并在现有子网中增加或者移除节点副本,也可以部署软件更新并且可以对 IC 进行其他调整。
从这个角度我们也能理解,为什么 DFINITY 称 IC 是一个交互复制状态机(replicated state machines)的网络,因为 NNS 本身就是复制状态机。和其他状态机一样运行在特定的子网上,其成员资格由上文提及的同一套基于 PoS 的治理系统所决定。同时维护一个称为注册表的数据库,记录哪些节点副本属于哪个子网,节点副本的公钥等等数据。因此 DAO 控制网络作为去中心化的共识协议,让 IC 能获得有效的共识但同时又因为 DAO 的运行机制使得 IC 也保留了去中心化的既有优势。
IC 的共识协议同时还采用了公钥加密技术,比如 NNS 维护的注册表将公钥绑定至节点副本及子网从而形成一个整体,这被称作为链钥密码学;对共识协议和执行复制状态机的协议时,IC 对于通信模型也给出了设想:希望采用更为可行和稳健的异步模型(对于发送的任意消息,敌对方可以延迟其传递任意有限时间,因此对于传递消息没有时间限制)来应对拜占庭故障。但目前来说,没有已知的共识模型在异步模型下是真正可行的,在下文对 IC 架构解读中,本文会更加详细说明针对这一现实情况 IC 的技术处理方法。
2.2 链钥密码学
2.2 链钥密码学
上文提到过 IC 的共识协议也采用了公钥加密技术—— 链钥密码学,组成链钥密码学有几个主要部分。链钥密码学的第一个组成部分是阈值签名:阈值签名是一个成熟的加密技术,它允许子网拥有一个公共的验证签名密钥,对应的签名私钥分成多份分配给子网中的节点副本,而分配保证作恶节点无法伪造任何签名,而诚实节点拥有的私钥片段可以允许子网生成符合 IC 原则和协议的签名。
这些阈值签名的一个关键应用在于:一个子网的单独输出可以由另一个子网或是外部用户进行验证,验证可以简单地利用改子网(第一个子网)的公共验证签名密钥来验证电子签名实现。
正如我们所看到的,这些阈值签名在 IC 中还有许多其他应用。一个应用于让子网中的每个节点副本可 以访问无法预测的伪随机数位(衍生于此类阈值签名)。这是共识层使用的随机信标和执行层使用的随机磁带的基础。
为了安全地部署阈值签名,IC 采用了创新性的分布式密钥生成(以下简称 DKG)协议,来构建公共签名验证密钥,并为每个节点副本提供对应签名私钥的一个片段,用于之前提及过的拜占庭故障和异步模型。
2.3 ICP
2.3 ICP
ICP 有以下功能:
NNS 质押,即促进网络治理。
ICP 可以用于在 NNS 中质押获得投票权,从而参与控制 IC 网络的 DAO。在 NNS 中质押代币并参与 NNS 治理的用户还会收到新铸造的 ICP 代币作为投票奖励。奖励数量由 NNS 制定和执行的政策所决定。
兑换 Cycles,即作为生产动力。
ICP 用于支付 IC 的使用费用。更具体来说,ICP 可以兑换成 cycles(即销毁),这些 cycles 可以用于支付创建储罐和储罐所使用的资源(存储,CPU 和带宽)费用。ICP 兑换成 cycle 的比例由 NNS 决定。
支付节点提供者,即作为奖励给予参与者。
ICP 用于支付节点提供者——这些实体拥有和运营着计算节点,来托管构成 IC 的节点副本。NNS 定期(当前每月一次)决定每个节点提供者应收到的新铸造 ICP 并发放至其账户。根据 NNS 制定和执行的政策,支付 ICP 的前提是节点提供者为 IC 提供可靠的服务。
2.4 NNS 的执行
2.4 NNS 的执行
如前所述,IC 的复制状态机可以执行任意的程序。IC 中的基本计算单元叫做储罐,它和进程的概念大致相同,包含了程序和其状态(随时间变化)。储罐的程序用 WebAssembly(以下简称 Wasm)进行编码,是一种基于堆栈的虚拟机的二机制指令格式。Wasm 是一种开源标准,尽管它最初设计是为了实现网⻚端的高性能应用,但它也非常适合用于通用计算。
IC 提供了一个运行时环境,用于储罐内执行 Wasm 程序,并与其他储罐和外部用户通信(通过消息传递)。虽然原则上可以用任何能编译成 Wasm 的语言去编写储罐程序,但前文提及过的称为 Motoko 的语言,它与 IC 的操作语义十分一致,支持在 IC 中使用。
Motoko 是一种强类型,基于 actor 2 的编程程序,内置支持正交持久性 3 和异步消息传递。正交持久性意味着储罐维护的内存会自动持久化(即不必写入文件)。Motoko 具有许多生产力和安全特性,包括自动内存管理,泛型,类型推断,模式匹配,以及任意和固定精度的算术。
除了 Motoko 之外,IC 还提供了一个消息接口定义语言和数据格式称为 Candid,用于固定类型、高级语言及跨语言互操作性。这使得任何两个储罐,即使是用不同的高级语言编写,也可以轻松地相互通信。为了提供全面支持任何给定编程语言的储罐开发,除了该语言的 Wasm 编译器外,还必须提供特定的运行时支持。当前除了 Motoko 之外,IC 还全面支持了 Rust 编程语言的储罐开发。
由此可见,IC 支持更安全和更具跨语言操作性的编程语言,这也是提升开发者在 IC 上创作更为有效和安全的重要因素之一。
2.5 NNS 的决策
2.5 NNS 的决策
在 DFINITY 区块链网络中,BNS(区块链神经系统)是网络运行的治理系统,它是区块链网络中最重要的构建基块之一,它可以自动进入系统并具有很高的权限。它承担了超级节点的角色。任何人通过在所谓的神经元(neurons)中质押 ICP 参与 NNS 治理。神经元的持有者可以提议关于 IC 应该如何改变的提案并投票,例如子网的拓扑结构或者协议该如何改变。神经元的投票权利是基于 PoS 的。直观地说,质押更多 ICP 的神经元投票权利更大。但是,投票权也取决于神经元的其他特征,例如愿意质押代币更⻓时间的神经元持有人,被赋予了更大的投票权。
每一个提案有确定的投票期限。如果投票期结束时,参与投票的简单多数赞成该提案,并且赞成票数超过了给定的总投票权法定人数要求(现在是 3%),则该提案被采纳。否则,该提案被否决。除此之外,任何时候只要绝对多数(超过总投票一半)赞成或反对该提案,该提案相应被采纳或否决。
用更通俗的语言来说,BNS 整个治理过程分为了四个阶段:创建神经元、提案、投票以及执行。
创建神经元:按照上文提及的区块链神经系统允许用户使用 ICP 来创建投票神经元。任何人都可以创建一个神经元,未来可能会有数以万计的神经元被创建出来,它们将共同表达社区的意志,通过算法进行调解。
提案:任何运行神经元的用户都可以进行 BNS 上的提案,BNS 会对提案进行审核,审核标准是提案的合理性和其是否提供解决办法。而提出提案的用户是需要支付两笔费用的:一是支付专业审核人员及参与投票神经元的酬劳,二是提案保证金,提案被采纳后,BNS 即退还保证金至神经元,这个金额的设置能够激励高质量的提案。
投票:除了提案的用户,其他用户在投票阶段也需要质押代币至神经元并能够选择主动投票或者跟随投票。有自主判断能力的用户可以选择主动投票,而跟随投票的场景适合一些用户无法准确判断提案,对于超出自身认知的提案,用户可以选择跟随投票,选择跟随信赖的神经元投票。投票时间截止后,BNS 会搜集神经网络的结果,根据投票结果,并自动判断提案通过与否。
执行:刚才有解读IC共识的执行层,落实到BNS治理系统的具体执行又是怎么样呢?首先通过的提案执行方式分为被动执行和主动执行。被动执行的提案主要涉及 DFINITY 上智能合约的参数改变,如神经元的质押参数。更新的提案参数会被动地写入 BNS 的智能合约数据库中,后续执行时会直接生效。有一种特殊情况是如果提案超出 BNS 智能合约的控制范围,例如涉及 BNS 规章层次,就会需要人为主动执行去覆盖 DFINITY “代码即法律”的部分。举例来说,修改系统代码的漏洞或是冻结违反 BNS 规章的智能合约或神经元。主动执行过程需要通过调用添加到以太坊虚拟机上的特殊操作码来实现。这一步的操作更为人性和合理,而不是目前区块链世界中的“代码即法律”“代码即一切”。从人性的角度覆盖代码无法决策的场景,能够带来更有效更智能的治理,某种程度上也真正触达到“共识”的底层意图。
3
架构解读
3
架构解读IC 协议包括了四层(如下图),分别是 P2P 层、共识层、路由层和执行层。在这个部分,本文只对四层架构进行角色和作用的解读,对整体架构的搭建进行分析。如对某一层具体的技术实现想有更详细的了解,请参阅 DFINITY 白皮书原文。
3.1 P2P 层
3.1 P2P 层
P2P 层作为互联网计算机协议层中用于消息获取和排序的层级,其任务是在子网的节点副本中传递协议消息。
协议消息包括两种:用于实现共识的消息;外部用户发起的输入消息。
我们可以理解为 P2P 层基本上提供的是一个“最大努力(best effort)”广播通道,即如果一个诚实的节点副本广播一条消息,这条消息最终会被子网中的所有城市节点所接收。
P2P 层的设计目标如下:
有限资源。所有的算法都在有限的资源(内存、带宽、CPU)下运转。
优先级。根据特定的属性(例如类型、大小和轮次),不同的消息将按照不同的优先级进行排序,并且这些优先级的规则可能随着时间将会改变。
高效。高吞吐量比低延迟更重要。高吞吐量也是 DFINITY 相比其他公链从底层更为有效的原因。
抗 DOS/SPAM。故障节点将不会影响诚实节点副本间的相互通信。
3.2 共识层
3.2 共识层
3.2.1 共识层概述
IC 共识层的任务是对输入消息进行排序,以确保所有的节点副本按照相同的顺序处理输入消息。现在已有很多文献中的协议是为了解决这一问题。IC 采用了一种全新的共识协议,本文将用概括性的语言对其进行阐述。任何安全的共识协议都应当确保两个属性,大体上就是:
安全性:所有的节点副本都事实上同意相同的输入顺序。
活性:所有的节点副本都应当逐一更新状态。
IC 共识层的设计目标其实很好理解:当存在个别恶意节点时,性能会柔性下降。像许多的共识协议一样,IC 共识协议是基于区块链的。伴随着协议的推进,以创世区块为根节点的区块树将不断生⻓。每一个非创世区块都包含一个荷载(payload),由一系列输入和父区块的哈希组成。
诚实节点副本对这个区块树有一致的视⻆:尽管每个节点副本可能对这个区块树有不同的局部视⻆,但是所有的节点副本看到的都是这一相同的区块树。此外,伴随着协议的推进,区块树中总会有一条最终确认区块的路径。同样地,诚实节点副本对这一路径有一致的视⻆:尽管每个节点副本可能对这条路径有不同的局部视⻆,但是所有的节点副本看到的都是这一相同的路径。沿着这条路径的区块的荷载中的输入,是已经排序好的输入并将由 IC 的执行层进行处理。
共识协议依赖于电子签名在节点副本中去验证消息。为实现这一点,每一个节点副本都与签名协议的一个公共验证密钥相关联。而节点副本和公钥之间的关联性可以从 NNS 维护的注册表中获取。这也符合上文所提及的链钥密码学在 IC 中的作用和角色。
3.2.2 假设
3.2.2 假设
在第二部分讨论过,IC 提出假设:
一个子网包含 n 个节点副本,和其中最多 f<n/3 的节点副本存在故障。
故障节点副本可能表现出随意、恶意(即拜占庭故障)的行为。我们假设通信为异步且不存在先验对节点副本间消息延迟的限制,即上文所提的异步模型。这时消息传递的调度可能完全处于敌对状态。在此弱通信假设下,IC 共识协议可以确保安全性。但是为确保活性,我们需要假设一定形态的部分同步,意味着网络在较短的间隔中保持周期性的同步。在此同步间隔下,所有未递交信息将在时间完成递交,即固定的时间限制 δ。时间限制 δ 不会被事先得知(协议会初始化合理的边界值但动态的调节该值,且当时间限制过小时提高限制值)。无论网络为异步或是部分同步,我们假设诚实节点副本发送给另一个节点副本的消息最终都会递交。
3.2.3 协议概述
3.2.3 协议概述
像许多的共识协议一样,IC 共识协议是基于区块链的。伴随着协议的推进,以创世区块(genesis block)为根节点的区块树(例见3.2.4)将不断生⻓。每一个非创世区块都包含一个荷载(payload),由一系列输入和父区块的哈希组成。诚实节点副本对这个区块树有一致的视⻆:尽管每个节点副本可能对这个区块树有不同的局部视⻆,但是所有的节点副本看到的都是这一相同的区块树。此外,伴随着协议的推进,区块树中总会有一条最终确认区块的路径。同样地,诚实节点副本对这一路径有一致的视⻆;尽管每个节点副本可能对这条路径有不同的局部视⻆,但是所有的节点副本看到的都是这一相同的路径。沿着这条路径的区块的荷载中的输入,已经排序好由执行层进行处理,具体的执行层有在前面的部分做解读。
3.2.4 实际例证
3.2.4 实际例证
下图展示了一棵区块树。每一个区块都被标记了块高(30,31 ,32,···) 和区块生成者的排位,该图同时展示了区块树中的每一个区块经过了公证,并以符号 N 标记。这意味着每一个区块树里的经公证的区块至少得到了 n-f 个不同节点副本的公证支持。可以发现,在指定的块高可以存在超过一个经公证的区块。举例说明,在块高 32,我们可以看到 2 个经公证的区块,一个由排位为 1 的区块生成者提议,而另一个由排位 2 的提议,同样的事情也是发生在块高 34。我们也可以看到块高 36 的区块也明确的被最终确认,就如符号 F 所标识。这意味着 n-f 不同个节点副本支持过该区块的最终确认,意味着这些节点副本(或至少这些中诚实节点副本)不支持其它任何区块的公证。该区块被灰色填充的所有祖先都被认为得到了隐性的最终确认。
3.2.5 公正性
3.2.5 公正性
公平是共识的基础,因此在共识协议中另一个重要的属性是公平性。不同于设定一个普遍的定义,我们简单的观察到生⻓不变性也暗示着一个有用的公平性属性。回顾一下,活性不变性本质上意味着在任何一轮中,当主节点为诚实且网络为同步时,则主节点提议的区块也将被最终确认。在该情形发生的轮次中,诚实的主节点事实上确保它区块的荷载中包含它所知道的所有输入(取决于荷载大小的模块限制)。因此,粗略的来说,任何传播给足够节点副本的输入,都将大概率在合理时间内被包含入最终确认的区块中。
3.3 路由层
3.3 路由层
如前文所述,IC 中的基本计算单元叫做储罐。IC提供了运行环境,使得储罐中可以执行程序,并可以(通过消息)与其他储罐和外部用户通信。共识层将输入打包进区块的荷载中,并随着区块被最后确认,相应的荷载会被传递给消息路由层并由执行环境处理。执行层将随之更新复制状态机中相应储罐中的状态,并将输出交由消息路由层处理。
有必要区分两种输入类型:
入口消息:来自外部用户的消息。
跨子网消息:来自其他子网的储罐的消息。
我们同样可以区分两种输出类型:
入口消息响应:对于入口消息的响应(可被外部用户取回)。
跨子网消息:传输给其他子网储罐的消息。
当收到来自共识的负载后,这些负载中的输入会被置入不同的输入队列。对于一个子网下的每一个储罐 C,都存在多个输入队列:用于发给 C 的入口消息,用于和 C 通信的每一个别的储罐 C',用于 C 到 C' 的跨子网消息。
在每一轮中,执行层都会消耗这些队列中的一些输入,更新相应储罐中的复制状态,并将输出置于不同的队列中。对于一个子网下的每一个储罐 ,都存在多个输出队列:对于每一个与通信的储罐 ,都有一个用于 C 到 C' 的跨子网消息的队列。消息的路由层将取得消息队列中的消息并置入子网-到-子网的数据流,以被跨子网传输协议处理,该协议的工作是将这些消息实际传输到其他子网。
除了这些输出队列外,同时存在一种入口消息的历史数据结构。一旦一条入口消息已被储罐处理,对该条入口消息的响应将被记录在该数据结构中。此刻,提供该条入口消息的外部用户将能够获取相关的响应(注意入口历史并不保留所有入口消息的完整历史)。
有两个需要提出说明的点是,第一,节点副本的状态包括储罐的状态以及“系统状态”。“系统状态”包括上述提及的队列, 数据流以及入口历史的数据结构。因此,消息路由层和执行层同时参与更新和维护子网的副本状态。此状态应全部在完全确定性的原则下被更新,这样所有的节点都会维护完全相同的状态。
第二点需要注意的是,共识层前于于消息路由层以及执行层,也就是说传入荷载之前,共识区块链中的任何分叉都已经被解决了。事实上,共识层允许提前运行,并不需要和消息路由层保持完全一致的进度。
路由层的解释和说明让我们更清楚地了解到,共识协议是怎么通过消息路由进行传入和输出的,同时又是怎么和执行层产生连接,从而达到促进共识协议的协同和一致。
3.4 执行层
3.4 执行层
执行环境每次处理一条输入,该输入取自输入队列中的一个并被导向一个储罐,取决于该条输入以及储罐的状态,执行环境更新储罐的状态并可以额外添加消息至输出队列。并且更新入口历史(可能连同此前入口消息的响应)。在给定轮次,执行环境将处理多条输入。定时管理器(scheduler)会判断哪些输入将在指定轮次被何种顺序下执行。我们这里不深入讨论过多 scheduler 的细节,而是突出强调一些目标:
它必须是确定性的,即仅仅取决于给定数据;
它应当公平的在储罐间分布工作量(但是对吞吐而不是延迟进行优化);
每轮的完成的工作数量使用 cycles 为计量单位,且应当接近一些前置判定的数量。
另一个执行环境必须处理的任务是该情形,即当某子网的一个储罐的生产跨子网消息的速度比其他子网能够消耗的速度更快。针对该情况,我们实现了一种自我监管的机制用于给生产储罐降速。这里存在的很多需被运行环境处理的其他资源管理以及簿记任务,但是,全部的这些任务均须被确定性的处理。
4
链钥密码学
4
链钥密码学在概要中我们解释了 IC 的共识协议也采用了公钥加密技术—— 链钥密码学,组成链钥密码学的一个重要部分是阈值签名。事实上,链钥密码学包括一系列复杂的技术,都用于随时间推移健壮和安全地维护基于区块链的复制状态机,统称为链演进技术。每个子网在包含多轮(通常大约是几百轮)的时期(Epoch)内运行。链演进技术实现了许多按 epoch 定期执行的基本维护工作:垃圾回收,快速转发,子网成员变更,主动秘密转发和协议升级。
对链演进技术的了解,也就是对于 IC 共识协议安全性的技术实现的了解。链演进技术包含两个基本组成部分:摘要块(summary blocks)和追赶包(catch-up packages,以下简称 CUPs)。
4.1 摘要块
4.1 摘要块
每个 epoch 的第一个区块是摘要块。摘要块包含特殊数据,用于管理不同阈值签名方案的密钥片段。其中有两种阈值签名方案:
阈值结构为 f + 1/n 的方案中,每个 epoch 生成新的签名密钥;
阈值结构为 n-f/n 的方案中,每个 epoch 重新共享一次签名密钥。
阈值低的方案用于随机信标和随机磁带,而阈值高的方案用于验证子网的复制状态。回想一下,DKG 协议要求,对于每个签名密钥,有一个 dealing 的集合,而每个节点 副本可以根据这组 dealing,非交互式得获取它的签名密钥片段。再回想一下,除了别的之外,NNS 还维护着决定子网成员的注册表。注册表(以及子网成员)会随时间改变。因此,子网必须对在不同时间和不同目的下,对使用的注册表版本达共识。这一信息也存储在摘要块中。
4.2 CUPs
4.2 CUPs
讲完了摘要块,让我们来看看追赶包,也就是 CUPs。在阐述 CUP 之前,我们首先需要指出随机信标的一个细节:每一轮的随机信标取决于前一轮的随机信标。它不是 CUP 的基本特性,但是影响了 CUP 的设计。CUP 是一种特殊的(不在区块链上的)消息,拥有一个节点副本在不知道先前 epoch 任何信息下,在 epoch 的起始点工作时所需的一切。它包含如下的数据字段:
整个复制状态的默克尔哈希树的根(与章节 1.6 中的每轮验证的部分状态不同);
epoch 的摘要块;
epoch 第一轮的随机信标;
子网对上述字段的(n - f)/n 的阈值签名。
为生成给定 epoch 的 CUP,节点副本必须等到该 epoch 的摘要块已经被最终确认,并且对应的每轮状态经过验证。如前所述,整个复制状态必须经哈希函数处理为一个默克尔树。尽管有很多技术用于加快这一过程,这个成本代价仍然非常大,这也是为什么每个 epoch 仅处理一次。因为 CUP 仅包含这个默克尔树的根,因此我们使用了一个状态同步子协议,允许节点副本从对等节点中提取它所需要的任何状态。同样地,我们用了很多技术来加快这一过程,它的成本代价仍然很大。因为我们对 CUP 使用了高阈值签名,因此可以保证在任何 epoch 只有一个有效的 CUP,而且可以从很多对等节点中提取状态。
4.3 链演进技术实现
4.3 链演进技术实现
垃圾回收:因为 CUP 包含特定 epoch 的信息,因此每个节点副本可以安全地清除该 epoch 前所有已处理的输入,以及对这些输入排序的共识层消息。
快速转发:如果一个子网中的节点副本大幅落后于其同步节点(因为其宕机或是网络断连很⻓时间),或是一个新的节点副本被添加入子网,他们可以通过快速转发至最新 epoch 的起始点,不需要运行共识协议并处理该点之前的所有输入。该节点副本可以通过获取最新 CUP 做到。利用从 CUP 中包含的摘要块和随机信标,以及来自其他节点副本的(还没有被清除的)共识消息,该节点副本可以从相应 epoch 的起始点开始,向前运行共识协议。该节点也可以使用状态同步子协议来获取对应 epoch 开始时的复制状态,这样它也可以开始处理共识层产生的输入。
下图描绘了快速转发。此处,我们假设需要一个需要追赶的节点副本处于 epoch 起始点,(比方说)块高为 101,有一个 CUP。这个 CUP 包含了块高 101 的复制状态的默克尔树的根,块高 101 的摘要块和块高 101 的随机信标。该节点会使用状态同步子协议,从它的对等节点中获取块高 101 的所有复制状态,并用 CUP 中的默克尔树来验证此状态。在获取到该状态后,节点副本可以参与到协议之中,从对等节点中获取块高 102、103 等等的区块(以及其他和共识相关的消息),并更新其复制状态的副本。如果其对等节点已经确认了更高高度的区块,该节点副本将尽快处理(以及公证和最终确认)这些从对等节点获取的已最终确认区块(以执行层所允许的最快速度)。
同以太坊一样,DFINITY 的愿景也是打造“世界超级计算机”,通过前文对于其白皮书的部分解读和技术说明。这个愿景下的 IC 是非常有机会去实现的。
我们从共识协议的混合模型 DAO,从快速出块、高吞吐量的技术创新,从 BNS 神经元系统及其生态治理方案,都能看出 IC 对实现其愿景的技术革新和技术可行性。与目前以太坊代码即法律不同的是,IC 代码治理的基础上加入了群众智慧的要素,不以建立完美的代码架构为目标,而是以系统能够迅速调整规则为目标。这一点不仅具有技术创造,更闪耀着人性光辉。区块链世界中,共识的建立、维护和修改不能仅仅是代码化,其本质核心应该是人。以人为中心的群体之间才能达成有效且公平的共识,这也是区块链行业的核心,是众多去中心化 Dapp 的吸引力所在。
本文对 IC 白皮书的部分内容作出引用和解读,原文中更加详细地描述了 NNS 的更多细节,共识层上子网的每轮认证状态,入口消息的查询调用和更新调用,链钥密码学中的分布式密钥分发、PVSS 方案、基础协议和再共享协议等等。对于想要更为全面和细致了解 IC 底层技术的开发者来说,阅读白皮书原文能够有更详细的解释和说明。
如果想下载完整版 PDF,可以关注本公众号,回复「DFINITY白皮书」就能领取。
关于我们
ABOUT US
TinTinLand 是赋能下一代开发者的技术社区,通过聚集、培育、输送开发者到各开放网络,共同定义并构建未来。
Discord: https://discord.gg/kmPnTDSFU8
Twitter: https://twitter.com/Tintinland2021
Bilibili: https://space.bilibili.com/1152852334
Medium: https://medium.com/@tintin.land2021
YouTube: https://www.youtube.com/channel/UCDpcMcnfYHHdvn8ym10cGlA
长按关注 DFINITY 微信公众号
随时答疑解惑
*添加小助手微信 comiocn 进交流社群