波卡运行原理系列(三)组件字典
Substrate
-
Parity 开发的区块链基础框架
-
开发者可以定制一个区块链的各个模块,自定义开发主要关注 State Machine,Substrate 中称之为 Runtime
-
Polkadot 的 Relay Chain 和 Parachain 都是基于 Substrate 框架开发的
Full node 全节点
-
同步和保存所有区块数据
Light node 轻节点
-
仅同步和保存区块头数据
Relay Chain 中继链
-
类似 ETH 2.0 的信标链或 Cosmos 的 Hub
-
块中记录的是各个 Parachain 的 Candidate Receipts 和 Erasure Coding
-
基于 NPoS 共识
-
为 Parachain 提供安全保证
-
提供 Parachain 之间消息通信的可靠性凭证
Parachain 平行链
-
也叫应用链
-
数量 10-100
-
基于 Substrate 开发的 runtime
-
需要通过拍卖的方式获得插槽 Slot 才能成为 Parachain,如果未获得插槽则可以用 Parathread 方式的方式接入 Relay Chain
-
需要组建 Collator
Collator 收集人
-
Parachain 的 Full node、Relay Chain 的 Light node
-
哪个 Collator 生成块,由 Parachain 自定义,可以通过类似 POS 或者 POW 的机制来选定(但不提供验证和共识),可以设置激励机制
-
生成 Candidate Receipts 和 Erasure Coding 发给 Validator
-
细分的话存在两种 Collator: Polkadot Collator & Cumulus Collator
Validator 验证人
-
数量 250-1000,由 DOT 持有者投票选出
-
每个 Parachain 会被随机分配 10 个 Validator
-
与 Collator 交互验证 Parachain 新的区块数据
-
需要5-7个 Validator 来验证和签署 Parachain 中新产生的区块
-
生成 Candidate Receipts 和 Erasure Coding,写入 Relay Chain 交易队列
-
BABE 出块 Validator 选择 Candidate Receipts 构建 Relay Chain 区块
-
在 GRANDPA 中对区块进行投票,超过三分之二则最终确认
Fishermen 钓鱼人
-
Fishermen 需要抵押 DOT(Collator不需要抵押 DOT)
-
Fishermen 是 Parachain 的 Full node
-
出块(BABE)与最终确定(GRANDPA)之间,Fishermen 进行有效性检查,防止 Validator 合谋
Bridge 桥
-
一种特殊的 Parachain,通过运行一个 Sovereign Chain( BTC 、ETH等非 substrate 构建)的轻节点,完成资产的跨链
-
再通过 XCMP 将资产传递到其它 Parachain
-
Sovereign Chain 和 Parachain 的一个简单的区分方法是 Sovereign Chain 自己提供共识,Parachain 由 Relay Chain 提供共识(验证 Parachain 数据需要跑一个 Relay Chain 轻节点)
Nominator 提名人/投票人
-
一般指 DOT 的投票人(Parachain 可以有自己的Staking机制,所以也可能有 Nominator)
-
最多投票给 16 个 Validator, 系统会自动分配票数,使得票数尽量分散
-
Stake 解委托:Kusama 是7天
-
参与治理投票:自定义 Conviction,不同锁定期产生不同的投票权重
Merkle 树
-
特性:如果某些值发生更改,则可以通过查看新的值和树中受其影响的路径来验证更改
-
基于此属性,Validator 可以验证状态转换,而无需访问整个状态
Parachain Block
Parachain 区块,由 Collator 生成,Validator 验证后将 Parachain Block 的 Candidate Receipts 和 Erasure Coding 写入 Relay Chain 交易队列
Relay Chain Block
Relay Chain 区块,由 Validator 生成
Candidate Receipt 候选回执
Validator 通过签名为 Parachain 区块构造 Candidate Receipt:
-
Parachain ID
-
Collator ID 和签名
-
父块 Candidate Receipts 的哈希值
-
区块 Erasure Coding 的 Merkle 根
-
跨链消息的 Merkle 根
-
区块的哈希散列
-
执行区块之前的 Parachain 的状态根
-
执行区块之后的 Parachain 的状态根
Erasure Coding 纠删码
-
解决数据无法获得的问题:Validator 和 Fishermen 谁犯错
-
三分之一的 Validator 获得了区块编码了的数据片段时,即可重新构建出这个 Parachain 的区块
-
Grandpa 共识机制是一种拜占庭容错的共识算法,也就是说仅在大于三分之二的 Validator 投票验证通过了之后,才完成区块的最终确认,所以可以获得三分之二的有 Erasure Coding 数据片段后,重构 Parachain 产出的区块并进行最终确认
-
Erasure Coding 也用于 Fishermen 来报告区块是否无效时的复核,额外的 Validator 会需要取得这个区块,或者通过数据片段来重组出这个区块并再次检查
Parathread
-
本质是将部分 Parachain 插槽以类似出租、非独占的方式开放,使得更多基于 Substrate 的链可以接入
-
Parathread 需要激励特定的 Collator 来帮助自己打包区块并提交给 Validator,这里的 Collator 如何组建目前还未看到明确的资料
-
Parathread 通过支付 DOT + TIP 的方式让 Validator 将自己的 Candidate Receipts 写入 Relay Chain
-
Parathread 和 Parachain 的安全性相同,但出块时间稳定性上会比 Parachain 差
Cumulus
-
本质是一个 Substrate Pallet
-
为 Substrate 的 Runtime 链提供 Polkadot 共识的工具库
-
同步 Relay Chain 到 Parachain,从而确定目前已敲定的 Parachain 区块
-
运行 Collator node 并生成 Parachain 区块数据
-
发送和接收跨链消息 XCMP 的工具
XCMP
-
Parachain 之间通信的机制
-
本质上 Parachain 之间直接建立网络连接传递消息
-
消息的安全性通过 Relay Chain 验证
SPREE(也叫 Trust Wormhole)
-
Relay Chain 解决了 Parachain 被51%攻击的情况,SPREE 解决 Parachain A 由治理的修改对 Parachain B 造成某种意义上攻击的情况。
-
解决方法是把约定的执行操作的代码wasm放到 Relay Chain 上,单个 Parachain 不能通过自己的治理机制修改该操作。
Hermit Relay Chain 隐继链
-
将 DOT 的转让、抵押、管理等事务放到一条单独的 Parachain 中,以接入的方式加到 Relay Chain
-
这样做的好处是 Relay Chain 中将仅包含 Candidate Receipts
2nd Layer Relay Chain 二级中继链
-
Parachain 本身变成一个二级的 Relay Chain
-
安全性更低、出块敲定速度更慢、跨链消息传递速度更长
-
接入成本更低,满足安全性要求更低的 Parachain 需求
-
可以继续往下级联实现无限的拓展性
其它
-
Collator、Validator、Fishermen 只是经济角度定义的角色,实际运行中一个节点可以扮演了多个不同的角色
参考文献
-
Polkadot 白皮书
-
http://blog.boka.network/2019/09/04/%e6%af%8f%e6%9d%a1%e5%b9%b3%e8%a1%8c%e9%93%be%e6%89%8d10%e4%b8%aa%e9%aa%8c%e8%af%81%e4%ba%ba%ef%bc%8c%e6%b3%a2%e5%8d%a1%e7%bd%91%e7%bb%9c%e7%9c%9f%e7%9a%84%e5%ae%89%e5%85%a8%e5%90%97%ef%bc%9f/
-
http://mp.weixin.qq.com/s?__biz=MzI3MzYxNzQ0Ng==&mid=2247485241&idx=1&sn=7e7435e2510ff740b7d39b709ffcc50d&chksm=eb21c070dc5649662e916d8b6daccf597a21d7d0250fd7e63bd8f58d3415351eb60ee372c280&mpshare=1&scene=1&srcid=&sharer_sharetime=1582617405828&sharer_shareid=7134817600c1844f17b9c0df52e52765#rd
-
https://polkadot.network/the-path-of-a-parachain-block/amp/
-
https://medium.com/web3foundation/polkadots-messaging-scheme-b1ec560908b7
-
https://polkadot.network/polkadot-consensus-part-1-introduction/