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

  • 对比云平台
  • 实际上,ICP 所说的“云平台太过于中心化”未必是完全正确的。对于单个云平台来说,中心化是必然的;但是目前有很多开源项目比如 Terraform (https://github.com/hashicorp/terraform) 或者 Serverless Framework 等各种库与插件,可以做到部分地串联云平台,做到统一运维和部署,通过同时使用多个云平台,可以部分解决云平台过于中心化的问题。但是当选择使用特定的一个云平台的服务后,确实会造成转换平台困难的问题。ICP 同样存在这样的问题,并且可能因为生态封闭而更加严重。ICP 所强调的去中心化实际上依然是区块链的特性中的共识以及节点做到的去中心化。
  • 对比以太坊
  • 回到开发的流程,在 ICP 上开发实质上和在以太坊上开发没有特别大的区别,甚至可以说更加困难(文档、社区支持相对少)。作为一个新的开发者,开发者需要更多的理由才能说服自己去选择 ICP。既然以太坊上的受众更大,开发也能找到更多帮助,那开发、发布到 ICP 乃至其他公链的优势是否真的更大呢?这是每个“以太坊杀手”公链应该思考的问题。但是 ICP 很机智地选择避免正面和以太坊竞争,而是偏向于对标云平台上的 Serverless。
  • 2. 编程语言1.WASM:
    ICP 所推荐的 Motoko 能编译为 WebAssembly (WASM)。ICP 的运行过程中利用了 WASM 容器来存储数据并执行代码。WASM 是一种用于基于堆栈的虚拟机的二进制指令格式。它支持在 Web 上部署客户端和服务器应用程序。WASM 容器就类似以太坊的 EVM,相对 EVM,WASM 更加强调执行效率和性能。在以太坊 2.0 当中,以太坊也有计划从 EVM 移植到 WASM。
    WASM 的优点就是性能强、安全性(在内存安全的沙盒里运行、会执行浏览器的安全策略)、生态拓展(可以直接嵌入到 Web,但是浏览器暂时没完全支持)。
    2.Motoko:
    Dfinity 自研的编程语言,类似以太坊自研的 Solidity。Motoko 拥有很多对于应用的特定优化(后文会进行深入分析)。
    https://github.com/dfinity/motoko
    3.Rust:
    ICP 提供 SDK 的语言,适合在 WASM 容器中运行。
    4.其他的语言由于没有 SDK 以及官方开发文档,可能还是需要 Motoko 或 Rust 作为胶水来实现与 ICP 直接交互的部分,因此开发基本还是只能选择 Motoko 或者 Rust。
    3. 生态从生态和开发者体验上来说,Dfinity 提供的示例程序源码、技术文档、开发工具(VSCode 插件、NPM 库、DFX 脚手架)都很全面。
    共识协议特点PoS 提速并解决计算冗余、随机数信标保证去中心化、staking 保证安全性、周期性最终确认保证轻量。
    共识过程不同于以太坊的 DApp 只是适时调用合约,ICP 设想的软件是完全依靠智能合约来驱动服务的。综上来讲,ICP 需要非常高的计算性能、减少计算冗余,因此 ICP 但同时还得在保证区块链网络去中心化的情况下的足够安全,因此这对它的共识算法提出了苛刻的要求。
    1. 开始前的节点准备:
    2. 节点创建私钥公钥,建立匿名的永久身份。
    3. 节点加入网络需要抵押固定的 token 作为 staking。
    4. 节点随机的与其他节点组成阀值组(完全随机,一个节点可存在于多个阀值组)
    5. 阀值组中,运行分布式密钥协议(DKG),每个节点获取该组的「验证签名」密钥(不同于个人密钥,有一组的私钥数学拆分而来)。
    6. 系统还是根据 DKG 产生阀值组的共同公钥,并对阀值组进行注册。
    7. 准备就绪,开始等待参与共识。
    8. 共识过程:
    9. 选择本轮委员会组 *注 1 *注 4
    10. 提案委员会打包出块
    11. 公证委员会持续接收并验证区块
    12. 随机数信标收集签名;等待阀值,产出公证与随机数 *注 2