随机数|读懂Dfinity:去中心化云计算平台+高性能区块链网络( 四 )


  • *注 3重点:超快的最终确认。DFINITY 的共识是按轮次进行的,每一轮共识的开始与结束的标志,都是观察到随机数信标产生新的随机数,而这个随机数是系统聚合签名产生公证的同时更新的。因此这 DFINITY 的区块高度必须与轮次一致,每一轮中生产的区块,必须是引用了上一轮的公证签名,不然视为非法。同时公正组只会签名本轮产生的区块,不会对之前轮次的区块签名。总结为两个强制:
  • 只有本轮发布的区块才能被公证;
  • 只有引用上一轮被公证的本轮区块才是合法的;
这保证了出块与公证两个过程,都没法被恶意扣留,因此攻击者没办法偷偷来准备一条比主链更长的影子链,来做双花攻击,因为从影子链的第一个区块起就不合法了。因为存在上述「验证者组单独签名,系统聚合签名产生公证」的公证过程,因此每一轮后基本可以做出唯一性的确认。但也有会出现两个或以上区块同时通过公证的情况,因此一轮结束后还不能做到最终确认,这时就需要在下一轮中继续判断。此时等待出块过程完成,因为出块者可能选择在上一轮同时被公证的区块后面继续生产,所以同时存在几条分叉。验证者会计算权重来判断唯一区块,权重高的一条链就作为唯一确认链,然后验证者才会对他进行签名。因此当本轮出现了新随机数时,也就意味着分叉已经被剪除,而上一轮的区块,包括其中的交易,都获得了最终的确认。快速确认不仅提高了性能,剪除了分叉,降低了系统的冗余度,并且可以让客户端不用存储全部要历史区块数据,任何一个新加入的区块,只要从最近的确认区块开始即可。
  • *注 4重点:弹性拓展性能。优秀的随机数给 DFINITY 的网络带来近乎无限的扩展可能性,因为整个随机数的产出,包括出块与公证,都是由固定数目的委员会组来执行的,客户端新节点的加入不会影响到运行的速度。DFINITY 随机产生多个阀值组的,因此多组间并行运行,从而实现分片,是相当轻松的。以太坊 2.0 的分片方式也非常近似。但是 Dfinity 的存储和网络拓展性也是需要拓展的,这方面上节点与节点、存储之间的传输也是有损耗的,带宽未必受得了,如果这个方面无法扩展,仅仅是做到分片的话可能只是表面的优化。
计算与存储应用架构随机数|读懂Dfinity:去中心化云计算平台+高性能区块链网络
文章插图
从底层开始:P2P 层 (收集分发数据) → 共识层 (整理消息,验证后写入区块) → 消息路由层 (传输信息到目的地) → 应用执行层 (通过 WASM 安全沙盒环境进行计算)
开发阶段,Dfinity 的开发者工具都会把各个层级抽象出来,复制给开发者一个本地版来方便开发。
应用运行机制代码编译为 WASM 模块,部署到 ICP 的 Canister 容器 (容器中包括了程序本身、状态、用户交互记录) 中。
https://zhuanlan.zhihu.com/p/372441370
Canister类似以太坊中的智能合约,除了运行环境是 WASM 的沙盒以外本质上没有其他大区别。正如之前提到的,一个很重要的特点就是 ICP 作为一个类似 Serverless 的服务提供商,上面的应用相比以太坊应用是需要具有更高的实时性的,比如 ICP 版抖音,因此 Canister 需要做更多的交互,同时也要保证不宕机、不拥挤卡顿。
存储ICP 的应用状态是存储在内存里的,通过共识阶段来进行管理和确认修改。
在 Dfinity 的博客上有个经常被提及的词就是正交持久性 (orthogonal persistence)。它所指的依然是 Serverless 的特点,开发者不用担心数据丢失,不用担心数据存在哪里。这就说明 ICP 和中心化的云平台是类似的,也有容灾备份等操作。