Bitcoin Vault -比特币保险库

教程

波尔卡多系列(3)如何在——中实现共享安全

本文作者

周蓉和蒋哲

来自Fun Chain技术数据网格实验室的BitXHub团队主要负责与区块链莱杰互操作性技术相关的研究工作。

导读:本文是Polkadot系列的第三篇。

说到波尔卡多,估计波尔卡多最大的优势就是它给并行链提供的共享安全,共享安全保证了安全性不会因为区块链网络的碎片化而降低。那么共享安全是如何实现的呢?

在本文中,我们主要从Polkadot为并行链提供的有效性和可用性两个保证来帮助您深入理解共享的安全性。

http://www .搜狗.com:圆点系列综合调查

文末福利

首先,我们先来回顾一下上面提到的波尔卡多的四个角色:

回顾

它是中继链的整个节点,中继链会通过验证器池中的随机分组将验证器分配给不同的并行链。验证者将接受来自收集器的打包块并验证其有效性,然后结合一致性算法确认收集器提交的块。

验证人(Validators)

它是并行链的整个节点,负责收集和执行并行链的事务,生成候选块,向验证者提交块和证书,通过收集事务获取手续费。收藏家和区块链战俘共识中的矿工相似。

收集人(Collators)

Polkadot中数字现金dot的持有者会选择自己信任的验证者来质押DOT,然后分享验证者的收益。

提名人(Nominators)

它也是并行链的整个节点,监控验证者的非法行为。如果验证者做了恶(比如批准无效的平行链块),钓鱼者可以向其他验证者报告,得到相应的报告。

钓鱼人(Fishermen)

有效性验证是指通过区块链系统对账簿状态变化的有效性检查,以实现全网的共识。

对于一个普通的区块链,比如以太网,每个块都会广播到整个网络的以太网节点,这些节点会验证并执行块中的事务,以确保最后生成的状态根等信息与块头中的信息一致。在波尔卡多,平行链的块一致性需要在以下三个级别进行验证:

有效性验证

每隔一段时间(具体间隔由BABE共识算法确定),中继链会通过随机分组将验证者池中的验证者分配给不同的并行链,每个并行链会分配给多个验证者。

并行链块上的收集器收集事务,生成块B,然后将块B、有效性证书和一些相关数据发送给当前并行链的验证者。收到块和数据后,这些并行链的校验器对块进行校验,如果块无效,则忽略该块;如果块有效,则将接收到的内容分成若干部分,构造一个默克尔树,然后将每个内容、默克尔证书和块信息合并,签名后分发给其他验证者进行验证。

第一级有效性验证由平行链的验证人实现,可以防止收集人作恶。

钓鱼人一般都是平行链的节点。首先,它需要在中继链上放置一个存款,然后从收集器节点连续收集块,并验证有效性。如果该区块包含无效交易,钓鱼者将提交一份报告。如果证明其判断正确,将获得丰厚的回报,但如果判断错误,将失去自己的存款。

第二级有效性验证由钓鱼人保证,可以防止平行链验证人作恶以及平行链验证人和收集人联合作恶。

这些验证器的选择过程是私有的,验证器的数量由渔民给出的无效报告和收集者给出的不可用报告的数量决定。如果检测到一个无效的并行链块,签名的验证者将受到惩罚,其押金将被部分或全部扣除。

在以上三个级别的有效性验证中,钓鱼者的有效性验证很好理解,因为它是并行链的整个节点,拥有并行链的所有状态数据。只有通过重新执行接收到的块事务,才能获得新的状态数据和状态根,以验证块的有效性。

但是验证者是中继链的整个节点。怎么能验证平行链的区块?它维护所有并行链的状态数据吗?这显然是不可能的。

第三级有效性检查是非平行链验证人执行的。

下面就重点介绍一下

进入Polkadot的并行链接需要向中继链注册一个名为STVF(状态转移验证函数)的web汇编代码,验证者将使用stvf验证并行链的有效性。

假设一个并行链PC上最后确认的块是b。

0,当前要释放的块是b。

1,最后一个块被继电器链确认后,继电器链上的块r

0

b记录在b上。

0,如并行链执行b。

0后状态根r

0 .然后平行链收集器C封装块b。

1,获取块到其他并行链的跨链消息m,生成有效性证明和一些元数据(PC.id,H(B

0),H(R

0

b),R

在,右

出去。).r在这里

在是b区。

1执行前并行链的状态根,r

Out是执行后的状态根,H(B

0)表示平行链块b。

哈希0,H(R

0

b)代表主干链块r。

0

b的散列。

生成有效性证书过程的本质是执行块中的事务,记录执行过程中读写的状态数据,在块执行前后结合两个状态根生成证书。

如果*xz用于表示构成默克尔根x中叶z的SPV认证,那么块b有效性认证数据可以表示如下:

Pi?

B=U {*R

inx | B读x }{ * R

outx | B写x }

例如,假设并行链提交的块B包含两个事务:

1.从a转移到b 50

2.c向D 10转账

在执行过程中,需要读写账户A、B、C、d的状态,假设并行链中四个账户的余额在块执行前都是100,那么有效性证书中就包含了下面两个图中用颜色标注的这些数据,其中黄色部分是哈希值。

可以看出,不管并行链本身的状态数据量有多少,块的有效性证明数据都是由块的事务所涉及的状态读写集的SPV组成的,因此其大小是有限的。

收集器c然后放置块b

1.事务的有效性证明、并行链的输出队列中的消息集M和元数据被发送到验证者之一,然后验证者将信息分发到并行链的其他验证者。每个验证器加载并行链的STVF,以验证接收到的并行链块的有效性。

STVF的核心也是在并行链块中执行事务。在这个过程中,需要读取证明数据中的读取集,同时会生成一个写入集,最后将生成的写入集与证明数据中的内容进行比较;此外,可以通过接收到的元数据中的信息来执行一些其他验证,例如根据H(R

0

b)找到存储在块中的b

0的状态根r

0,设置r

收到0和r

作为对比。如果所有信息一致,则验证该块。

最初接收并行链块的验证者将生成一个候选回执,该回执将记录并行链块B。

1相关信息,如并行链PC的id,采集器c的id,区块b。

1的散列,块b

1执行前后状态根等。签名并广播给中继链的所有节点(这可以认为是中继链的一个事务)。当候选收据最终被中继链确认时,并行链PC的块B最终被确认。

这种有效性验证方法可以保证并行链中单个块的状态转移是有效的。如果并行链从第一个块开始,并且中继链验证有效性并确认该块,则可以保证整个并行链的有效性。

Polkadot验证人到底是如何验证平行链的区块的

可用性保障意味着,即使某些节点作恶,区块链系统仍然可以为业务系统提供可用的服务保证。

在Polkadot中,假设这样一个场景:并行链收集器封装块B并提交给验证者,验证者接收块,通过有效性验证,最后由中继链确认块。

但是收集器节点作恶,没有将块广播给并行链的其他节点,所以并行链的其他节点无法获取块并更新本地状态数据,并行链也无法进行块操作。

为了防止这种情况发生,验证者在通过验证后,会利用纠删码技术将并行链块PC和有效性证书分成N段(N的个数为全网的验证者个数),并将这些段广播给全网的所有验证者,每个验证者会得到一段并保留一段时间。

之后恢复原始数据只需要n/3个片段。在这种情况下,即使收集器节点作恶,并行链中的其他节点仍然可以从中继链的验证者那里获得最后一个块的擦除代码片段,并恢复该块。

可用性保障

通过对Polkadot的有效性和可用性的介绍,我们可以看到,中继链提供了各种措施来保证并行链的安全性:随机分配的并行链验证器验证块,渔民监督,非并行链验证器重新验证,中继链备份并行链块数据。

这种设计在保证整个区块链系统横向扩展和碎片化的过程中,不会降低单个碎片的安全性。对于平行链,享受接力链提供的安全性,只需要安心关注自己的区块链业务,极大的方便了区块链业务的发展,减少了单个平行链在安全性上的额外投入。

参考文献:

[1]可用性和有效性,

https://research . web 3 . foundation/en/latest/polkadot/Availability _ and _ validation . html

[2]副链块的路径,

https://polkadot . network/the-path-of-a-parachain-block/

[3] J. Burdges,A .P. Czaban,R. Habermeier,S. Hosseini,F. Lama,H. K. Alper,X. Luo,F .A. Stewart和G. Wood。波尔卡多及其设计考虑概述。arXiv预印本arXiv:2005.13456,2020。

Title