概述

什么是 IC 和 ICP ?

  • IC 的全称是互联网计算机(Internet Computer),是专门为去中心化应用设计的高速区块链网络。

  • ICP 是互联网计算机协议(Internet Computer Protocol),也是代币的名称。

互联网计算机(IC)的出现为软件开发带来了革命性的变化。它让开发者能够直接在去中心化云上构建应用,摆脱了对传统中心化云服务的依赖,降低了开发和运维的成本。IC 的安全性和高性能使得应用和服务的安全性得到极大的提高。

IC 的愿景是成为一个提供无限扩展性、安全性和去中心化治理的全球性计算平台。


IC 是通过结合分片、VRF 随机数、BLS 阈值签名、DKG 、嵌入 DAO 治理模型等技术构建的高性能去中心化云服务。

那它性能到底有多高呢?

子网们的目前确认区块速度为一秒 36 个区块。

目前每秒可以处理 6355 笔交易。

这里可以查到 IC 网络上的实时数据 。随着子网越来越多,这个数据在未来也会越来越高。(TPS 无上限😎)

目前( 2023 年 6 月)每个区块包含 1000 条信息,也就是说,一个子网一秒处理 1000 条更新调用消息(实际数据略低于 1000 条消息 / 秒,大概是 970 条 / 每秒)。每个子网约 970 次更新 / 秒,约 4000 次查询 / 每个节点。


软件开发的新时代

互联网计算机(IC)是基于互联网计算机协议构建的一种全新的区块链设计。它的核心部分分为 4 层,运行在各个子网的节点上。通过运行核心协议,一个子网的节点实现了一个基于区块链的复制状态机,该状态机独立于其他子网取得进展(但与它们异步通信)。IC 采用多子网分片结构,在保持去中心化的同时,克服了传统区块链的性能瓶颈。这种架构可以使 IC 无限生成子网(分片),使 IC 几乎不受限制地扩展。

在传统不分片的区块链中,通常在一段时间里只产生一个块,全网所有的矿工竞争唯一的挖矿权,或者针对一个块达成共识。为了提高吞吐量和延迟,通常只能通过提高区块生产速度或者增加区块的大小来完成扩容。这两种方式都存在缺点(频繁分叉或者网络延迟)。

IC 通过创建新子网来横向扩展其容量,就像传统的云基础设施通过添加新机器来扩展一样。一旦 IC 的网络神经系统(Network Nervous System, NNS)决定创建一个新子网,它就会选择一组尚未分配到任何子网的备用节点,并创建新子网的初始配置。然后,选定的节点组成一个新的子网区块链。

IC 摆脱了智能合约在传统区块链上的速度、存储成本和计算能力方面的限制。使智能合约实现完全的去中心化,前端到后端都能被托管在区块链上。IC 的智能合约叫 Canister (罐子、容器)。Canister 可以存储数据,对数据进行通用计算,并提供完整的技术栈,直接为终端用户提供网络访问服务。

计算和存储开销采用 “ 反向 Gas 模型 ” ,Gas 费由部署 Canister 的开发人员将原生代币 ICP 兑换成 Cycles 支付。ICP 代币同时也用于治理:IC 由去中心化自治组织(以下简称 DAO )进行管理。IC 底层直接嵌入了 DAO :Network Nervous System。DAO 可以决定变更 IC 的网络拓扑结构和升级 IC 协议。

IC 还可以与其他区块链互操作。IC 的链密钥密码学技术使其能够与其他区块链进行交互,集成其他加密货币。


IC 使用 WebAssembly(Wasm)作为代码执行的标准,所以开发者可以使用多种流行的编程语言(如 Rust、Motoko、Java 等)编写智能合约。

传统 IT 开发者面临许多问题:必须通过众多商业云服务、云工具、操作系统的专有和开源变体、数据库和防火墙等组件、虚拟化技术,软件开发平台等等一系列的关卡,要去解决组装系统的高度自定义、维护它们所需的特殊开发人员的人工成本,以及相关的供应商关系,使得随着需求的变化、迁移和调整旧系统变得昂贵且困难的问题。随之而来的便是高昂的开发运维成本,以及中心化存储数据的安全问题。

image-20230705124029401

IC 可以让开发者在一个开放世界中构建应用、企业系统和互联网服务类 APP ,在基于区块链去中心化理念下,保证它可以安全运行并且可以经受住时间的考验。IC 可以自动扩展、抵抗攻击、从不宕机。这种新颖的设计使开发者能专注于创造新应用和服务,而不用担心底层基础设施的安全性、成本和可扩展性。这对于软件开发的新时代具有深远的影响。


架构

IC 的架构特立独行:

各个数据中心节点(Node)通过节点软件 IC-OS 虚拟化为一个副本(Replica),再随机选取一些副本组成一个子网(Subnet)

一个子网由多个数据中心的节点组成。每个节点都用 IPv6 建立 TCP 会话,与 NNS 节点、同一子网里的其他节点连接。

NNS(Network Nervous System) 是嵌入 IC 的治理系统,一个 DAO ,持有 ICP 的任何人可以对 NNS 上的提案投票表决。

比特币网络的节点随时随地想加入就加入,可这样带来的问题是确认交易的速度太慢了;联盟链是先确定了网络中的几个节点,然后由这几个固定的节点达成共识,那速度嗖嗖的。而 IC 结合了他俩的优点,像联盟链一样由几个固定节点组成子网,节点(副本)之间达成共识的速度非常快,并由一个 DAO:NNS ,来控制子网和节点们(副本们)。一举两得。

IC 在区块链协议底层集成了一个 DAO :DAO控制网络(DAO-controlled network)。由这个 DAO 来控制每个子网,配置网络的拓扑结构,创建子网公钥,并且升级副本的协议版本。因此所有 NNS 的决策都由社区成员决定,社区成员的投票权重由其在 NNS 中质押的 IC 原生治理代币数量决定。

如果大家投票通过了提案,NNS 里的 Canister 会自动执行决策。比如,如果一个提议改变网络的拓扑结构的提案被通过,NNS 将自动使用新配置来更新注册表 Canister 。

NNS 也是帮助 IC 网络实现自我进化的去中心化治理系统。NNS 的目的是让互联网计算机网络以一种开放、去中心化和安全的方式进行管理。它是 IC 的系统子网,控制着 IC 的子网。它还可以对节点升级协议;调节 Gas 代币 Cycles 与 ICP 的兑换比例;在极端情况下,它甚至可以冻结恶意的 Canister ,以保护网络。

副本可以理解为是子网里虚拟化出来的 “ 虚拟节点 ” 。在以下内容中,我们就把 IC 的 “ 节点 ” 叫做副本了。

IC 的子网类似分片(Sharding)思想。分片技术是一种区块链扩容方案。拿比特币举例,全世界的节点都在抢一个区块的记账权,相当于是一个覆盖整个地球的网络。如果所有亚洲的节点组成一个 “ 比特币子网 ” ,欧洲、非洲、美洲、大洋洲也都组成自己的子网。那么交易在子网里达成共识,这样节点相对少一点、通信距离更短,可以提升一些性能了。

IC 由许多个子网组成,没有母网、主链、侧链、信标链这种概念,每个子网之间是平等的(除了 NNS)。每个子网独立运行,子网内部达成共识出块,没有比特币那样的 “ 全局共识 ” ,不同的子网同步并行出块。可以理解为每个子网都是一条区块链,许多链共同组成了 IC 。跨子网的通信在 IC 底层靠 ChainKey 解决。开发者和用户都不用在意智能合约被部署在哪个子网里、怎么跨子网通信等等问题。

ChainKey 是互联网计算机背后的核心技术,它解决了 IC 的子网之间互相通信的问题。ChainKey 使每个子网根据 root key 生成自己唯一的子网公钥 ( Subnet Key ) 。这是 IC 无限扩展性能的基础技术。

每个子网都有一个只有 48kb 的公钥。任何人都能验证自己收到的消息是不是 IC 网络发过来的、有没有被篡改,当然各种物联网设备和其他区块链也能验证来自 IC 的信息。相比之下,去验证 ETH 这类传统区块链时,因为每次出块都由不同的副本签名,设备需要同步几百 GB 的签名数据。而在 IC ,所有副本一起签名一个区块。因此设备只需要保存 48kb 的唯一公钥即可验证子网的消息。

子网可以随着网络的资源使用情况动态地增加、删减、合并、拆分。子网的数量没有上限,所以理论上支持 “ 无限扩容 ” ,在世界各地新增子网。

可是由谁来决定子网们的拆分重组呢?NNS!

NNS 是一种特殊子网,也和别的子网一样由一些节点组成, NNS 可以管理其他子网。不过 NNS 子网的节点比较多,安全性自然也比其他的子网高一些。数据中心成为节点、某个节点加入哪个子网、某个子网由哪些节点组成、选几个节点创建新子网、把一个子网拆分成几个子网等等,这些操作都需要获得 NNS 的许可。

许多子网的这种架构使 IC 可以无限扩展。

image-20230705220013965

IC 协议的核心部分分为 4 层,运行在各个子网的节点上。现在我们把视角转入子网内部,看一看 IC 的核心协议。为了方便理解,我把子网的俯视图转为侧视视角;紫色格子方块代表子网,蓝色小球代表子网里的副本。

IC 核心协议总共有 4 层,每个副本都有这 4 层结构。从下到上依次是 P2P 层、共识层、消息路由层、执行层:

  • P2P层,收集和发送来自用户、子网中的其他副本和其他子网的消息。保障消息能传递到到子网中的所有节点,以确保安全性、可靠性和弹性。

  • 共识层,子网内部对处理各种消息的顺序达成共识。然后这些区块被传递到消息路由层。

  • 消息路由层,转发消息。共识层将区块敲定后,相应的荷载会被传递给消息路由层。由消息路由输入执行层。

  • 执行层,运行 Canister 的地方。执行层更新复制状态机中相应 Canister 的状态,完成智能合约的计算任务并将输出交给消息路由层处理。


P2P层

P2P 网络就像一个大型的聚会,参加聚会的人都是子网里的副本。在这个聚会上,人们想要分享最新的消息,并且希望尽可能多的人都听到这些消息。但是让每个人都大声喊出完整消息很费劲(占用网络资源),我们可以采取一种更高效的方法。

这个方法就是公告-请求-传递机制。就像在聚会上,有人(副本)大声宣布:“ (。・∀・)ノ゙ 嗨,我有个大新闻要分享!” 这个宣布就是一个小公告。其他人(其他副本)听到这个公告后,如果他们觉得这个消息很重要,就会走过去(请求)并要求那个人告诉他们具体的消息内容(传递)。这个过程可能会牺牲一些时间(延迟),但是它能够节省体力(降低带宽使用)。

如果这个聚会非常大,比如一个巨大的音乐节现场。在这样一个庞大的场合下,公告-请求-传递机制会在一个 覆盖网络(Overlay network) 上运行。这个覆盖网络就像一个大型朋友圈,每个人都只和他们的好友(对等节点/Peers)分享消息。

当某个人想要广播一个消息时,他会先告诉自己的好友这个消息的公告。那些好友在收到公告后,可能会请求消息的传递,并在满足特定条件的情况下,把这个消息的公告告诉自己的好友。这就像一个八卦网络(Gossip network)

P2P 层通过公告-请求-传递机制以及在覆盖网络上运行,能够在牺牲一定延迟的情况下,有效降低带宽使用,从而实现高吞吐量的目标。

这里了解 IC P2P 层的更多运行机制。


共识

共识由子网内部的副本们达成。

IC 共识层的任务是对输入消息进行排序,以确保所有的副本按照相同的顺序处理输入消息。这些消息是用户与 Canister 之间的通信、Canister 之间的通信以及这些通信的顺序。

通过不可预测的随机数给副本们排序,选择谁先出块。如果被选中的副本诚实且没有故障问题,它就会出块,并广播给大家验证。大家觉得没问题,给出自己的公证片段。公证片段达到三分之二后,形成对这个区块的公证。如果大多数副本只对这一个块做过公证,大家会用敲定作为对区块的最终确认。

1

IC 的共识协议满足:低延迟(几乎即时最终确认性);高吞吐量;鲁棒性(在副本或网络故障时,延迟和吞吐量会稳定下降一点,而不是直接卡住宕机)

这里了解 IC 共识层的更多运行机制。


消息路由

在 IC 的每个轮次中,共识层把输入打包进区块的荷载中,在共识层最终确认之后,相应的荷载会被传递给消息路由层。消息路由组件从共识接收一个要处理的消息。消息路由把消息路由到对应 Canister 输入队列里。然后它触发执行,执行完成后,Canister 把结果放进输出队列。最后将输出交给消息路由层发送出去。


消息路由层还可以进行子网之间的通信。这个叫跨子网消息或简称为 XNet 消息。

消息路由层实现的另一个关键功能是状态认证。子网在每个轮次里,会对子网在这一轮次改变的状态进行 BLS 阈值签名。这种认证可以用于子网验证一个子网到另一个子网数据流的真实性,也可以让用户在读取之前提交的消息的响应。状态认证和安全的 XNet 协议使得 Canister 能够在子网之间安全透明地通信,这是任何具有多个分片的区块链都面临的挑战。


注意,共识层和消息路由层是独立的。传入荷载之前,共识中的分叉都已经被解决了。而且共识层可以提前进入下一轮次运行,并不需要和消息路由层保持完全一致的进度。

这里了解 IC 消息路由层的更多运行机制。


执行

IC 中的基本计算单元叫做容器或罐子(Canister)。IC 提供了运行环境,使得 Canister 中可以执行程序,并可以(通过消息)与其他容器 Canister 和外部用户通信。

执行层有许多其他区块链没有的功能:

  • 确定性时间分片(DTS):需要执行数十亿条 Wasm 指令的大消息时,可以拆开,在之后的几次共识中逐步完成。这种拆分在几次共识中执行消息的能力是 IC 独有的。

  • 并发:在多个 CPU 内核上同时执行多个 Canister 。因为每个 Canister 都有自己的隔离状态。

  • 伪随机数生成器:执行层可以访问不可预测且无偏的伪随机数生成器。现在 Canister 可以执行需要随机性的算法。

这里了解 IC 执行层的更多运行机制。


边缘节点

前面说过,IC 就是去中心化的云,可以给用户直接提供完整的网络服务,而不依赖任何中心化服务。

那么用户的请求是怎么发给某个子网里的副本(节点)的? IC 是怎么防护 DDoS 攻击的?有防火墙吗?有 CDN 缓存吗? 😏 You know what I mean.

这些服务就是 IC 的边缘节点(Boundary node)提供的。

边缘节点负责把请求转发到对应的子网,保护子网,提供缓存。

当用户通过浏览器访问 IC 时,IC 会通过域名上的 Canister id 找到对应的 Canister 。首先,浏览器会查找域名对应的 DNS 记录,得到边缘节点的 IP 地址。然后向边缘节点发送一个 HTTPS 请求。边缘节点返回一个 JS 库 “ 服务助手 ”(或网络服务助手,Service worker),在浏览器上运行。

这个服务助手的一个主要任务就是用链钥密码学来验证 IC 发过来的响应。为了实现这个功能,NNS 的公共验证密钥被硬编码在服务助手里面。

边缘节点负责把我们的请求路由到目标 Canister 的子网副本。它从 NNS 获取所需的路由信息,并在一个实时响应的副本列表中随机选择一个。用户和边缘节点之间,以及边缘节点和副本之间的通信安全都是由 TLS 保证的。

除了和主网通信,边缘节点还提供了缓存、负载均衡、速率限制、防火墙和验证 IC 响应消息的能力,让用户体验更好。

这里可以看到更多关于边缘节点的内容。


请求消息流程

有了这 4 层核心协议,再来看看 IC 上一个用户请求的流程:

用户请求分为查询调用和更新调用。


查询调用:

客户端向边缘节点发送一个请求消息,想要访问某个容器。边缘节点把这个消息传送给托管目标容器的子网中的副本。副本收到消息后,返回响应,再通过边缘节点发给用户。


更新调用:

客户端向边缘节点发送一个请求消息 M ,目标是 Canister C 。边缘节点把消息 M 传送给托管 Canister C 的子网副本。

副本收到消息 M 后,通过 P2P 层向子网中的所有副本广播消息 M 。

收到消息 M 的主节点会把消息 M 和其他输入打包进一个区块 B 。

一段时间后,区块 B 被确认,里面的内容被发送到消息路由层处理。

消息路由层把消息放进 Canister C 的输入消息队列。

执行层处理消息 M ,并更新 Canister C 的内部状态。

随后消息路由取出响应 R 交给边缘节点,返回给用户。

image-20230706103539318

有时候,处理请求消息 M 需要调用其他子网的 Canister 。比如,Canister C 需要向另一个子网的 Canister C' 发起请求 M' 。请求 M' 会被放在 Canister C 的输出队列里,然后执行以下几步:

  • 消息路由层把调用请求 M' 移到对应的跨子网数据流,最后传输到托管 Canister C' 的子网。
  • 第二个子网收到请求 M' ,通过共识层和消息路由层,最后由执行层处理。执行层更新 Canister C' 的状态,生成请求 M' 的响应 R' 。响应 R' 会进入 Canister C' 的输出队列,最后被传回第一个子网。
  • 回到第一个子网,收到来自第二个子网的响应 R' 后,经过共识层、消息路由层和执行层的处理。执行层会更新 Canister C 的状态,生成原始请求 M 的响应 R 。这个响应 R 会被记录在入口历史的数据结构中。

链钥密码学

IC 使用了一种高级加密机制工具箱,统称为链密钥密码学(Chain Key)。这种技术让 IC 实现了其他区块链无法实现的功能和可扩展性。

它的一个关键组成部分是阈值签名方案,这类似于普通的数字签名方案,但它有个不同之处,就是秘密签名密钥分布在子网的副本中,这样密钥就不会被轻易泄露或窃取。

链密钥带来了很多好处。比如:

  • 任何人(手机、平板电脑、笔记本电脑)都可以简单地验证签名,以验证从 IC 接收到的内容,而无需同步整个区块链。

  • 它能让 IC 的拓扑结构可以自主演化,比如添加新的副本和子网,恢复故障副本,以及自主升级协议。

  • 它还能提供不可预测和无偏的伪随机数,让 Canister 可以安全地运行需要随机性的算法。


IC 的关键创新在于子网实际上是共识的孤岛。有了链密钥,它们可以安全地互相通信,并在不下载其他区块链数据的情况下验证对方的消息。这使得 IC 能够实现高度的可扩展性和安全性,同时保持轻量级和易于验证的特性。

这种独特的链密钥技术为构建下一代分布式应用提供了强大的基础。


网络神经系统(NNS)

IC 跟比特币和以太坊的去中心化方式有点不一样。它的节点不是随时随地、想加入就加入,而是你要加入或退出,都不需要受任何第三方中心化机构约束。节点加入 IC 网络之前,需要经过 NNS 的投票同意。IC 的底层协议里是直接嵌入了 DAO 来进行治理。

详细解释一下:

最早的共识协议,比如 PBFT ,是有许可的。也就是说网络的拓扑结构和节点是固定的,不是谁想加入就加入的。虽然这样的协议效率更高,但是它们违背了去中心化的精神。所以,现在有了像比特币、以太坊这样的无许可共识协议,它们使用工作量证明(PoW)或权益证明机制(PoS)。这些协议虽然完全去中心化,但效率相对较低。

IC 结合了他俩的优点,它既有有许可协议的效率,又有无许可 PoS 协议的好处。你可以叫它 DAO 控制网络(DAO-controlled network)(半许可网络)。


每个子网都运行一个有许可的共识协议,子网里的副本(节点)是固定的。在需要调整网络拓扑结构的时候,由一个叫做 网络神经系统(Network Nervous System) 的 DAO 决定哪些节点可以加入某个子网,配置网络的拓扑结构,配置公钥,以及控制副本部署的协议版本。NNS 的决策都是由社区成员投票决定的,投票权跟他们在 NNS 中质押的 ICP 有关。质押的数量越多、时间越长、参与投票越多,权重越大。


通过这个治理系统,IC 可以在现有子网中增加或移除副本;可以部署软件更新;可以对副本进行升级;可以创建新的区块链子网,实现扩容;可以拆分子网,来均衡网络负载;它可以配置经济参数,如调节 Gas 代币 Cycle 与 ICP 的兑换比例,Cycles 燃烧比率;在极端情况下,它可以冻结恶意的 Canister ,保护网络,等等。NNS 运行在特定的子网上,和其他子网差不多。只是副本数量更多,更安全,NNS 的子网是系统子网,只部署着几个最重要的 Canister 。

系统子网中的容器不收取 Cycles 费用,因为只部署了几个 IC 系统自己的 Canister 。普通开发者不能在系统子网上部署 Canister 。所以 IC 是由一个 DAO 来管理所有子网的。

NNS 维护着一个叫做注册表的数据库,用来跟踪 IC 的网络拓扑结构,比如哪些副本属于哪个子网,副本的公钥是啥等等。


IC 的 DAO 控制网络既让 IC 享受到有许可网络在效率方面的好处,又保留了去中心化网络在 DAO 治理下的优势。而且,运行 IC 协议的副本都托管在地理上分布式的、独立运行的数据中心上,这样也增强了 IC 的安全性和去中心化性。


智能合约(Canister)

当我了解 IC 之后,第一次见到能直接部署网页的区块链。( ఠൠఠ )ノ

IC 是唯一可以托管完整 DApp(前端、后端和数据)的区块链。IC 可以安全地提供 HTTP 请求。


Canister 就是 IC 的智能合约,可以存储代码逻辑、数据状态、前端资源。开发者无需关心底层通信,只要把代码部署到 Canister 里,用户就可以直接通过网址访问到应用。

比如项目里有一个专门放前端页面的 Canister 和一个后端 Canister 。客户端发请求,浏览器发出请求后,浏览器需要先从边缘节点下载一个 Service Woker 检查浏览器是否支持 Wasm 、网络环境是否安全等等。Service Woker 可以验证前端页面是否来自 IC ,是否经过篡改。请求消息经过 IC 协议定位到某个前端 Canister ,前端 Canister 直接发送 HTML 网页到客户端。之后通过官方的 JS 代理库与后端 Canister 交互。Canister 之间也可以互相调用交互。

ETH 是一台同步的状态更新机器,由交易触发智能合约,然后达成共识;IC 是一台异步状态更新机。只要客户端发出消息传到 IC ,就会返回一个结果:成功或者失败。

IC 对以太坊 DApp 开发和传统 Web 开发做了简化。开发 DApp 无需第三方钱包,也不用开发者考虑负载均衡、防火墙,这些都由 IC 协议层解决。

上面说的只是最简单的 DApp 项目实例,实际开发中,一个 DApp 一般都有很多个 Canister 。


Canister 英语原意为罐子、容器,是一种轻量级 Wasm 容器。

Canister 自动持久化数据于内存中,无需数据库服务器和存储管理,提升了计算效率并简化了软件开发。所有可以编译为 Wasm 字节码的语言理论上都可以用来写 IC 的智能合约:Motoko 、Rust 、C 、C++ 、Go 、JavaScript 等等。(现在 Motoko 和 Rust 的 cdk 比较成熟,别的语言的 sdk 正在开发)因此,前后端都可以编译为 Wasm 并安装进容器里上链。当然也只有支持 Wasm 的浏览器才能打开 DApp ,不过支持 Wasm 的浏览器以后会越来越多。

还有 HTTP 集成,可以让 Canister 读取 IC 外部的任意网页,不用预言机!

这里可以看到更多关于 Canister 的内容。


互联网身份

在网络上我们通常用用户名和密码来识别和验证身份,但这些方法很难管理,而且安全漏洞很多。为了解决这些问题,IC 做了一种更先进、更安全的加密身份验证方法,它叫做互联网身份(Internet Identity),可以在 IC 生态的 DApp 上使用。登录 DApp 时不需要输入任何密码,也不用记下复杂的私钥或者助记词,就可以轻松的控制自己的去中心化身份。

用户使用互联网身份时,网站就收集不到关于用户在线活动的信息了。因为它会帮你在每个网站上创建和管理匿名、独立的帐户,让你可以在不用担心管理这些帐户的情况下,享受到拥有许多不同帐户的隐私保护。它不仅让你摆脱了复杂的用户名和密码管理,还能让你在使用网络服务时更加安全、更加隐私。


用户可以用设备进行面部扫描、指纹识别、Ledger 或者 Yubikey 硬件钱包,创建一个去中心化身份。用这个身份可以登录 / 注册各种 DApp 。

用这个身份登录不同的 DApp 会有不同的账户。也就是说,它是隔离的,身份不互通(和 ETH 不一样),这个身份在不同的 DApp 里是完全隔离的账户。在每个 DApp 里相当于从主身份里衍生出的一个分身,用一个 DID 身份控制所有的 DApp 。


我们喜欢叫它 “ ii ” 。

ii 是一种身份认证机制,底层原理还是私钥、公钥那些的。

用户的手机、电脑里有一个 TPM 安全芯片,可以生成一对密钥。公钥上传到 ii 的 Canister 里存储下来;私钥由设备的 TPM 芯片生成并保存,任何人都拿不到(包括用户本人)。

在 IC 上用户与 DApp 每次交互都需要签名鉴权,而且私钥存在安全芯片里,当然不能让用户每次交互发一个请求都用指纹签名。所以 ii 使用了委托密钥(Delegation key)形成一条委托密钥链。给委托密钥设置过期时间,然后用委托密钥的私钥做签名。

那这个委托密钥到底是啥意思呢?

你看,设备安全芯片生成一对密钥,再让浏览器生成一对密钥(Session key)。让安全芯片生成的私钥对浏览器生成的公钥和过期时间等信息签名。生成的这个签名就是委托(Delegation)。有了这个委托,就可以用浏览器的私钥对请求签名了。然后把委托、浅蓝色的公钥、Session key 私钥签名的内容、浅粉色的公钥发出去。

如上图所示。接收方拿到蓝色公钥、委托、粉色私钥签名过的内容、粉色公钥。用蓝色公钥解锁委托,发现里面有粉色公钥,说明蓝色私钥对粉色公钥签过名。也就是蓝色私钥授过权,就像大将军拿着皇上的虎符调兵遣将一样,虎符代表皇帝授权。

为了方便理解,上面这张图做了简化,实际上 DApp 看不到用户的 User number ,User number 和 DApp 域名都会经过哈希,生成一个 pid(Principal id)

因为每个 DApp 的域名不一样,所以生成的 pid 也不一样。pid 是一个 DApp 里用户的身份标识,这个以后再详细说。


Anchor 就相当于用户名,就是上图的 User number 。用户在 ii 里保存的每个设备都是一个公钥,用户可以增加、删除设备,也就是用户可以增加删除公钥。所以假如用户手机丢了,相当于丢了一个公钥,只要用 Anchor 在其他设备上登录就可以删除手机这个设备了。

ii 干的一件事就是把用户不同的设备添加进来,通过 ii 的 Anchor 对应的 Master key 绑定,这个 Master key 是托管到 Canister 上的,这样只要有一个设备能添加进来,就能更改 ii 里保存的设备,用户就不用接触私钥了。这个 Master key 可以理解为一个总的私钥,只要有设备绑定在这个总私钥上,就不用担心 ii 身份丢失,如果所有设备都丢了,就只能靠助记词恢复了。助记词也丢了就没得恢复了,都丢了 😝 。

所以 ii 就是一种身份认证机制,ii 里没有保存用户信息,只有用户的一个 ii 身份,用户相关信息都是由 DApp 自己保存的。

Canister 里存的是 Anchor 和对应的 Master key ,Anchor 是从 10000 开始递增的。

这使得 ii 有了以下两点特性:

  • 当一个 Anchor 登录不同 DApp 时,身份是不一样的。至于这个身份对应的用户信息是什么:用户名之类的,ii 不保存。

  • 在一个 Anchor 不同的设备上登录 DApp ,身份是一样的。

这里可以看到更多关于 ii 的内容。


ICP的经济模型

IC 网络通过 Network Nervous System(NNS ,网络神经系统)治理,治理代币叫 ICP 。另外还有一个代币叫 Cycles ,Cycles 用于支付在 IC 网络上 Canister 的存储数据、收发数据、计算费用,类似于以太坊的 Gas 费。

Cycles 是用来供 Canister (智能合约)运行的费用。 ICP 只能单向燃烧成 Cycles ,没法再变回 ICP ,ICP 与 Cycles 的汇率根据 ICP 价格动态调整,永远保持稳定的兑换一定数量的 Cycles ,以保证 Cycles 价格相对稳定,防止造成 Gas 费用大幅波动的情况。;这样 ICP 就会越来越少,随着 IC 网络使用者不断增加,更多的人会购买 ICP 来运行智能合约, IC 网络的价值也会不断增加。

数据中心想成为节点需要根据节点提供商机器硬件指南配置设备,完成节点提供商自我声明,然后需要至少10 ICP质押为至少为6个月的神经元以在NNS发起提案,提案通过后就可以成为节点。NNS会在每月15日向节点提供商发放奖励,奖励锚定XDR的价格,但以ICP的形式发放,也就是说ICP价格越低,节点奖励获得的ICP数量越多。如果节点作恶,节点运营实体会面临被起诉、扣发节点奖励等惩罚。

当 IC 上的生态越来越繁荣,越来越多的企业、组织在 IC 上部署去中心化应用 DApp 时,就需要把 ICP 燃烧成 Cycles 交部署应用的费用。

持有 ICP 的用户可以把 ICP 质押在 NNS 中,创建 Neuron(神经元),然后进行投票,投票之后会收到 ICP 奖励,这是 ICP 的通胀机制之一;但 NNS 的作用是投票治理,并不是赚利息。


另外,NNS 会给数据中心提供者每个月发送 ICP 代币激励,这种另一种通胀机制。

在那些数据中心的 Canister 里消耗的 Cycles 和这个数据中心获得的 ICP 的数量是动态平衡的。激励多少 ICP 是根据数据中心对 IC 网络做出的贡献决定的,在数据中心部署的 Canister 越多提供算力、储存数据就越多,激励的 ICP 也多。


加密资产用户在使用以太坊智能合约进行签名、转账、交易的过程中都需要向网络支付一笔 Gas 费,而 Gas 费会随着网络拥堵导致上涨。尤其是在 DeFi 行情火爆时,高昂的 Gas 费成为了阻挡广大普通用户参与的门槛。


区块链奇点

由于跨链桥的存在,跨链存在本质的 51% 攻击安全问题。

但是 IC 解决了跨链桥问题,IC 直接抛弃了跨链桥。IC 本身就是一个云服务,IC 可以直接集成其他链。


目前 IC 已经集成了比特币和以太坊。Canister 可以直接接收、持有、发送比特币。Canister 可以做阈值 ECDSA 签名。这项技术使 Canister 可以控制 ECDSA 私钥片段,私钥片段分布在比特币子网的副本中,用法和 BLS 阈值签名差不多。这样一来,跨链不再需要桥,也不用把资产包装,比如 BTC 包装成 WBTC 。

开发者只需要在 Canister 中编写业务逻辑,就可以实现比特币的 DeFi,比如交易和借贷,而且速度很快,只需要几秒钟,成本很低。


所以说了这么多,IC 能干什么不用我多说什么了吧 😏 。下面内容来自 IC 白皮书:

IC 设计上是一个完整的技术栈,可以构建完全在 IC 上运行的系统和服务。特别的是,IC 上的智能合约可以处理终端用户的 HTTP 请求,因此智能合约可以直接提供交互式的网络体验。这意味着,构建系统和服务不需要依赖于公司的云托管服务或者私人服务器,从而以一种真正的端到端的方式提供智能合约的所有优势。

对于终端用户而言,访问基于 IC 的服务在很大程度上是透明的。他们的个人数据比在访问公有云或私有云的应用时更安全,但是与应用程序的交互体验是一样的。

然而,对于创建和管理基于 IC 的服务的人来说,IC 消除了许多在开发和部署当前的应用程序和微服务时的成本、风险和复杂性。例如,在当前垄断互联网的科技巨头们所推动的整合下,IC 平台提供了另一种选择。此外,IC 安全的协议可以确保消息的可靠传递、透明可追溯,以及不需要依赖于防火墙、备份设施、负载均衡服务器和故障编排就可以实现的网络弹性。


多米尼克 2021 年 1 月 6 号在博客上很激动:

水星(阶段)代表惊人的技术成就,以及与众不同的区块链愿景的实现,但即使在这个阶段,网络也无法在大量独立各方的努力下建立。在幕后,尽管 COVID-19 疫情造成了困难,几家制造商一直在制造用于创建物理网络的第一代标准化互联网计算机节点机器,数十个独立的融资合作伙伴也提供资金和控制节点机器部署到第一批数据中心。正如我所写,数百台新的节点机器已被部署到数据中心,这需要付出巨大努力,许多机器已经在运行,可以让网络神经系统将它们编织进网络,以扩展互联网计算机的容量 —— 世界上第一个能无限扩展容量、以 Web 速度运行的公共区块链,这将很快产生巨大影响,未来数年内,该网络预计将扩展到数百万个节点,运行在成千上万个数据中心。我们预期历史将证明这是一个区块链和互联网双方的重要时刻。

“ 区块链奇点将会出现,因为智能合约实际上是一种全新形式的软件系统,它比传统 IT 具有巨大的优势。这意味着在线系统和服务的未来是区块链,您可以成为其中的一部分。”


这是本片文章的结构:了解 IC 的每个部分都可以对应到后面的章节。

WAGMI!


继续深入了解 IC 的 4 层核心协议。