Dfinity区块链与经济模型
Dfinity(下称ICP区块链)是一条不保留旧区块的区块链,其通过运行ICP协议来链接节点,形成区块链系统
在ICP区块链中,主要有两种代币:
Cycle:
- 价值与XDR进行锚定,XDR是综合一系列法币进行加权求和得到的值,可以认为是稳定币。
- 作用主要是为给Canister充值,维持Canister运行
ICP:
- 可以通过兑换为Cycle,“充值”给Canister(智能合约容器),维持Canister的运行。
- 质押ICP,成为神经元,参与投票。投票可以得到新的ICP,可以认为是“投票挖矿”
子网
- 在ICP区块链中,分布在世界各地的节点通过NNS被划分为若干子网。每个节点可以参与多个子网。每个子网都是一个单独的区块链,运行ICP协议,达成共识。不同于以太坊分片策略的是,ICP区块链没有“母网”,只有不同的子网。
- NNS可以对子网进行重新组合,重新生成与恢复
ChainKey
- 阈值签名:子网的节点对信息进行签名的算法是阈值BLS,一个子网中,对一个信息达成共识的条件是2f+1(总量3f)个节点使用自己的子密钥对一个信息进行签名,达成条件后即可生成完整私钥签名。
- 子网公钥:每个子网都根据root key生成自己的链公钥,子网间通信可以直接通过子网公钥核查数据真实性,无需下载旧区块数据。
- IC公开根公钥,用户可以通过根公钥验证一个消息是否为IC返回的消息。
- Catch up packaqe:不保留旧区块,每个子网每隔200个区块进行一次“打包”这次打包将包含当前所有副本的一致性数据,打包后进行阈值签名,超过2f+1个节点签名后,就认为达成一致,此时就可以删去以前的区块,只保留这个“包”。catch up包可以用来恢复数据,同步数据。
Canister智能合约模型
- 在ICP中,一个Canister就是一个WebAssembly容器。
- ICP合约原生语言为Motoko,所有可以编译为wasm的语言都可以写ICP合约,当前支持Rust的cdk比较成熟。
- 一个Canister包含一个合约的运行时字节码和数据状态。
- Canister对外提供两种方法处理方案:
- 第一种为update方法,这种方法将对内存数据进行状态修改,需要子网内达成共识,消息处理模型是单线程。
- 第二种为query方法,原理是Canister使用Actor模型,每个query方法会在节点内对当前数据状态进行一次“内存快照”,然后进行处理,这种方法的调用不修改数据状态,可以进行并发处理。
Actor模型与原子性
得益于Actor模型,Canister可以并行进行多个线程,处理不需要更改状态数据的消息,提升服务性能。
但是,又由于Canister使用Actor模型,不同的Canister之间可以通信,但是数据状态相互隔离,没有状态锁,因此ICP区块链不能保证操作原子性,需要自己实现一些简化的分布式一致性协议来保证原子性。
前后端都在链上的优劣
前后端都在链上的优劣
- ICP区块链的前后端可以说都在“链上”。部署时,前后端都编译为wasm部署到节点上。
- 优点:因前端wasm在“链上”,或者说在节点上因此浏览器获取到前端wasm后可以验证前端是否是安全的(通过icroot公钥)。
- 缺点:当前并不是所有的浏览器都支持wasm运行部分用户无法访问ICP的应用。
注:转自赵杲老师的技术分享