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/