恢复:互联网计算机节点如何快速赶上区块链最新状态
互联网计算机区块链由数百个节点创建 —— 最终在未来十年内扩展到数百万个 —— 位于世界各地运行互联网计算机协议 (ICP) 的独立数据中心。这提供了一种安全可靠的方式来运行容器智能合约,以直接在开放的互联网上构建 dapp、DeFi 平台、NFT、网站和互联网服务。
互联网计算机是第一个可扩展的区块链,网络可以通过添加新的子网(又名区块链)来无限地增加其容量,在这些子网中,成组的容器一起运行。
在每个子网中,互联网计算机确保容器安全可靠地运行:
安全,意味着容器的状态仅根据容器的规则改变,并且不能被篡改以致容器的状态与其代码不一致。
可靠,这意味着子网中的容器不会突然停止运行。
网络要求容器通过称为复制的方法获得这种安全性和可靠性,如果您深入了解子网,您会发现它由多个副本驱动。每个副本保存容器和进程的所有状态,以及容器应该处理的所有消息。互联网计算机规定,即使为子网提供动力的某些副本离线或甚至是恶意的,子网仍会继续处理容器的消息。
更准确地说,只要这些副本中不到三分之一处于离线或恶意状态(即,其中三分之二以上在线、可用并参与协议),子网就会继续进行复制。网络使用共识协议,以便所有副本都通过区块链处理相同的消息。
“互联网计算机的子网旨在以更少的延迟处理更多的数据。”
互联网计算机子网上的每个副本都有自己的区块链视图,每个副本都试图通过八卦网络交换工件。但有时某些副本可能不可用 —— 例如,在由副本 1、2、3 和 4 组成的四副本子网中,副本 4 可能会暂时与互联网断开连接。由于互联网计算机协议以容错方式工作,因此即使副本 4 处于离线状态,子网上的其余三个副本也应该能够取得进展。
如果另一个副本现在不可用,那么这将不起作用,因为超过三分之一的副本将处于脱机状态。如果副本 4 现在重新上线,它就能够完全赶上协议的最新状态。因为超过三分之二的节点可用,区块链应继续增长,网络的子网应继续处理消息。
此外,网络可能在某个时候想要向子网添加一个节点,也许是为了增加子网的容错能力,但是这个节点在不知道子网状态的情况下进入。再次,节点需要能够完全赶上子网的最新状态,以便它可以参与协议。
每当子网上超过三分之二的节点在线且可用时,子网必须增长,以便子网上的容器以非常可靠的方式运行,即使为子网提供动力的某些节点离线或恶意。这样做的结果是,无论落后多远,诚实的副本必须始终能够赶上最新状态。
像比特币和以太坊这样的传统区块链通过永久存储它们的区块来实现这一特性,并且它们的所有区块都需要能够以加密方式验证交易并参与区块链。例如,目前估计比特币区块链的大小约为 350 GB,而以太坊约为 900 GB,因此完全同步它们是一项困难的工作。
互联网计算机的子网旨在以更少的延迟处理更多的数据,因此要求所有参与者都拥有完整的区块链在网络上运行是不可行的。这提出了一个挑战:假设副本 1 远远落后于子网的其他副本,以至于所有其它子网副本都已经删除了副本 1 正在寻找的区块链部分?
另一个复杂因素是给定子网的节点会随着时间而改变。由于我们的协议依赖于验证来自子网节点的签名,因此后面的副本很难知道要信任哪些签名,因为它不知道哪些节点当前正在为子网提供动力。
因此,互联网计算机实现了一种新的恢复方法,允许节点完全参与(并执行所有必需的加密验证),而无需所有历史区块,建立在链密钥加密之上。
每个子网(即每个区块链)都有一个不随时间变化的固定公钥,相应的密钥实际上在子网的参与者之间共享。如果子网的成员发生变化,那么秘密共享将安全地重新分配到新节点。我们子网的节点现在可以代表子网协作签署工件,现在可以使用此固定子网密钥验证此类工件。
这将使验证由子网签名的对象变得非常容易,因为所需要的只是一个不会随时间改变的固定公钥,即使是非常落后且不知道子网当前节点的副本也可以验证这样的签名。
为了解决恢复问题,互联网电脑推出了一个特殊的工件,叫做追赶包(CUP)。这个 CUP 允许副本安全地跳到更新的高度,跳过区块链的一部分。它使用这个固定的子网密钥进行签名,这样即使是后面的副本也可以始终验证其真实性并赶上最新状态。一个诚实的副本确保它始终有一个可用的 CUP,这允许其他副本始终完全赶上协议的最新状态。
剩下的问题是:这个 CUP 究竟必须包含哪些内容,以便副本可以安全地跳过?为了回答这个问题,让我们首先看看协议的细节。互联网计算机区块链对应该在子网上执行的消息进行排序,从而导致子网的复制状态,其中包含容器的所有内存。
使用先前复制的状态和区块中的消息,每个副本都可以计算下一个复制状态。为了让副本赶上,它需要具有这些复制状态之一,以便它可以自己计算下一个状态。此外,区块是指这些复制状态,并且根据此复制状态的某些部分和区块链中的后续区块检查它们的有效性。
这允许互联网计算机要求,例如,一条消息不会在区块链中多次出现,也不会被多次处理。要进行此类检查,副本不仅需要具有正确的复制状态,还需要具有区块链的某些部分,这是 CUP 所需的另一个要素。
最后,还有随机信标。在每个高度,都有一个看起来随机的伪像,称为随机信标,这是一个不可预测的值,过去的随机信标需要验证下一个随机信标。还需要随机信标来验证共识工件,因为随机信标用于选择共识协议中的角色,副本可能需要有一个随机信标才能完全赶上。
这样,CUP 就可以定义了。副本将定期创建 CUP(例如,每 200 个高度)。一旦达到高度 200,副本将检查是否该创建 CUP。副本检查它们是否有可用的随机信标、该高度的区块以及复制状态。
此外,他们检查区块链是否已经发展到不再需要比高度 200 更旧的状态的地步。如果所有这些都得到满足,那么副本就准备好为高度 200 创建一个 CUP。它们将复制的状态、一个区块和一个随机信标组合到一个单一的工件中,并使用该特殊的子网公钥对其进行签名。
现在这个工件应该足以让其它副本赶上。请注意,复制状态实际上太大而无法包含在 CUP 中。因此,只包括复制状态的哈希。(完整状态可以通过一个单独的状态同步协议获得,这超出了这篇博文的范围。)每当副本成功创建这样一个 CUP,他们现在可以扔掉所有旧的工件,因为他们知道副本将被能够赶上。
如果一个远远落后于其他副本的副本通过网络获得 CUP,因为它是在仍然已知的子网公钥下以特殊方式签名的,则可以验证该工件的真实性并且其内容是可信的。
让我们考虑副本如何使用 CUP 来赶上区块链的最新状态。它从 CUP 获得一个随机信标、一个区块和一个复制状态,它信任这些状态,因为它们是通过链密钥加密技术进行身份验证的。这样,副本就可以遵循随机信标链,因为现在副本有一个前一个信标来验证下一个信标。
副本也有一个区块,以便它可以跟随后续区块并验证公证和最终性。由于它有一个复制状态和随后的区块,副本可以计算下一个状态。副本现在拥有最新的区块链和随机信标工件以及最新的复制状态,这意味着它完全是最新的并且可以参与协议。
总之,互联网计算机以可靠的方式运行容器,即使为子网提供动力的某些机器处于离线状态。更准确地说,只要子网上有三分之二以上的副本是诚实和在线的,子网就应该取得进展,区块链应该会增长。这样做的结果是,无论落后多远,每个诚实的副本都必须始终能够赶上最新状态。
同时,区块链可以变得非常大,因此副本最终必须删除区块链的所有部分。使用固定子网公钥对称为追赶包 (CUP) 的特殊工件进行身份验证,CUP 包含副本安全地跳过区块链的一部分并跳转到最近的状态以便它可以完全参与协议所需的一切。
开始在 smartcontracts.org 上构建并加入我们的开发者社区 forum.dfinity.org。
作者:Manu Drijvers(DFINITY 共识工程经理)
翻译:Catherine
- 往 期 推 荐 -
Web3 游戏、NFT 和 Play2Earn 在互联网计算机上爆炸式增长
长按关注 DFINITY 微信公众号
随时答疑解惑
*添加小助手微信 comiocn 进交流社群