波卡运行原理系列(三)组件字典

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/

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。