此文是Polkadot系列文章开篇之作,通过介绍Polkadot的角色、架构和交易流程来让大家对Polkadot有个初步的认识。其中涉及到的技术点、比如混合共识、有效性验证、XCMP协议等等,再由后面Polkadot系列文章进行详细剖析,敬请期待。
文末福利:跨链公开课实战演练来了!
Polkadot
提到Polkadot,大家首先想到的可能就是这是个很火的跨链项目,网上也把它和Cosmos称为跨链”双雄“。但其实如果把Polkadot仅仅定位为一个跨链项目,那说明对Polkadot的了解还不够。
Polkadot更准确的解释应该是个可扩展的异构多链区块链,跨链只是它系统的一个功能而已。Polkadot的复杂度远远大于目前常见的跨链项目,其不仅仅考虑了跨链所具备的基本功能,还保证了跨链交易的有效性。
除此之外,还通过共享安全性技术保证了平行链的安全性,这点是目前大多数同类项目所没有具备的功能。
四类角色
为了更好解释Polkadot的整体架构,我们先来解释下Polkadot中的四种角色:收集人、验证人、提名人和钓鱼人,他们的具体关系如图1所示:
图1
◆收集人
平行链的全节点,负责进行平行链中交易的收集和区块的打包,注意这里打包区块只是候选区块,并不代表确认后的区块,平行链的区块确认由中继链负责。
◆验证人
中继链的全节点,中继链会在验证人池中通过随机分组把验证人指定给不同的平行链。验证人会接受来自收集人打包的区块并进行有效性验证,然后结合共识算法对收集人提交的区块进行确认。
◆提名人
Polkadot中数字货币DOT的持有人,它会选择自己所信任的验证人进行DOT质押,然后分享验证人的收益。至于为什么需要提名人这样的角色,就需要了解Polkadot的经济模型了,这里就不做过多讲解。
◆钓鱼人
它的作用主要是对系统进行监管,通过举报非法交易来赚取奖金。虽然验证人通过随机分配来服务于不同的平行链,从某种角度上看,提高了验证人联合做恶的成本,但还需要钓鱼人这样的角色来监管验证人的行为。
整体架构
图2
有了上面对Polkadot四类角色的定义解释,下面我们进行整体架构的介绍:
如图2所示,Polkadot是一种树状网络结构,中继链可以看作是树根,然后外接一定数量的平行链。由于中继链能接入的平行链数量是有限的,那么中继链还可以接入子中继链以树的形式进行规模扩展。同时,子中继链还可以以同样的方式进行扩展。
绿色标记的平行链中,收集人会进行交易的收集和广播。对于打包出来的区块,收集人除了广播给其它收集人和钓鱼人,还会把区块提交给自己的验证人。每个平行链还会有个出入队列,如果区块中有跨链交易,收集人会把跨链交易放入出队列中,然后由收集人或者验证人将跨链交易路由到目的平行链。
最后,除了可以接入平行链,中继链还可以通过桥接链接入一些异构链或者说不能直连的区块链,比如上图中的以太坊。桥接链是具备桥接功能的平行链。
一笔交易之旅
对于初次接触Polkadot的人来说,仅从上面的架构图可能还是弄不清楚它的工作流程,为了让大家对Polkadot有更加深入的了解,下面介绍Polkadot中一笔交易的“生命之旅”,也就是平行链中的一个交易是如何打包的,是如何在中继链中被确认的,然后跨链交易是什么时候被传递到目的平行链的等等。
注意,这里不涉及桥接链的情况。
为了不混淆区块打包和确认的概念,这里稍微解释这两者的区别。
区块打包只是将多笔交易收集起来然后打包成一个区块,此时这个区块还不具备最终性,有一定概率被丢弃。
区块确认就是指区块被最终确认而不会被推翻丢弃。这种将区块的打包和确认分开来的共识算法一般称为混合共识,Polkadot就是此类共识算法。
具体的技术细节这里就不细说了,留给后面的文章进行详细讲解。
◆平行链阶段
首先,平行链中的收集人收集到足够交易后,会将交易打包成一个区块然后提交到验证人(此时区块还没被确认)。收集人提交到验证人的数据其实不仅仅是区块,而是一个POV数据。POV包括区块、有效性证明数据和跨链数据。有效性证明数据主要是提供给验证人进行区块有效性验证的,因为收集人打包的区块中可能包含无效的交易。
验证人接受到POV数据后,会把它同步给同一组的验证人,与此同时会根据有效性证明数据和区块进行有效性的验证。验证通过后,验证人会根据纠删码技术将POV分块和签名并广播给其它验证人进行备份。
这里备份的目的主要是确保区块被中继链确认后,尽管恶意收集人丢弃区块,平行链也可以从验证人那恢复区块。
◆中继链阶段
验证人将POV块签名广播后,会生成Candidate Receipt并把它广播给其余中继链的验证人。Candidate Receipt包含了平行链区块的关键信息,比如区块哈希、父区块哈希等。其余验证人收集到足够数量验签通过的POV块后,会把Candidate Receipt放到出块列表中。中继链共识阶段会选出一个Leader,Leader负责出块,此时的区块(中继链的区块)就包含了前面的Candidate Receipt。
在区块确认阶段,其它验证人首先需要收集足够的POV块来还原POV数据,然后验证Candidate Receipt的有效性。此时,如果验证人收集不到足够数量的POV块,会要求平行链验证人提供POV。如果平行链验证人无法提供POV,那么该区块将会无效,相关的平行链验证人也会被惩罚。
◆跨链交易传递
平行链阶段中,收集人打包区块的同时,也会将跨链交易放到平行链的出队列中。跨链交易通过XCMP协议进行传输,根据收集人和验证人的网络连接情况,具体的传输方法有三种:
来源链收集人直接发送给目的链收集人;
来源链验证人发送给目的链收集人;
来源链收集人发送给来源链验证人,来源链验证人传递给目的链验证人,目的链验证人再传递给目的链收集人。
跨链交易传递到目的链后,会把跨链交易放到平行链入队列中。通过以上步骤,就完成了跨链交易在链间的传递功能。
总结
虽然Polkadot架构比较复杂,各种新名词也很多,比如POV区块、XCMP协议、Candidate Receipt等等,连平行链的区块都得由中继链确认,中间还包括有效性验证、POV数据分块、签名和备份等等步骤,但是这些复杂设计也让整个系统具有更好的可扩展性和安全性。