多链架构设计必读:平行链数据的可靠性如何保障?
人民干脆面
发表于 2023-1-3 10:49:13
86
0
0
首先我们来看一下原有的主链—平行链机制,假设有如下应用场景:a是平行链节点,A是对应的主链节点;A收到主链的各个节点发送的交易,假设在区块高度为100时,A收到三条交易tx1、tx2、tx3;其中,tx2是平行链关注的交易;原有的主链—平行链机制运作方式:
5 o O% _% Y1 B2 C* |% s
(1)A打包这三条交易生成区块block(100);
(2)a从block(100)中同步关注的交易,即tx2;a执行tx2,并生成一个平行链上的区块block(100)';1 _* l A( z+ ~
在主链—平行链机制机制中,不同的平行链节点之间无法通信,这就导致a打包这三条交易生成区块block(100)后,a可以修改数据,平行链数据无法得到保障;8 B: J( K) K$ a& G* _) n
可以得到一个浅显的结论,若平行链的数据可以经过共识,则可以保证平行链数据的可靠性。
那么,如何使得平行链数据共识以保证平行链数据的可靠性呢?
有人会说,那就使得不同的平行链节点之间都可以通信,可以通信的平行链节点之间相互广播平行链数据,对若干平行链数据进行共识,不就可以保证平行链数据的可靠性了吗?
笔者认为,如果不同的平行链节点之间都可以通信,平行链就变成了一条侧链,侧链需要大量的挖矿节点,需要消耗大量的算力资源,成本较高;违背了开发主链—平行链机制节省资源的初衷,因此这种方案不可取;
那么,如何保证平行链数据的可靠性呢?: Q+ B. o# t6 d1 J# s; [1 {
笔者了解到,复杂美chain33配置了平行链验证节点,所谓平行链验证节点,以下简称验证节点,就是拥有较高权限的平行链节点,验证节点可以将打包生成的平行链上的区块信息发送给主链对应的节点;* @8 a3 x3 l/ u5 g
同样,假设在区块高度为100时,A收到三条交易tx1、tx2、tx3;其中,tx2是平行链关注的交易;平行链中有a、b、c、d、e、f共6个节点,其中a、b、c、d为验证节点;# q T) D, w7 X! k: H# H
改进后的主链—平行链机制运作方法如下:# d: f$ g, Q& K, q# g
(1)A打包这三条交易生成区块block(100);1 z+ |3 @& c' L+ Z
(2)a从block(100)中同步关注的交易,即tx2;a执行tx2,并生成一个平行链上的区块block(100)';同理,b、c、d也生成一个平行链上的区块,假设b与c生成的平行链区块为block(100)',d生成的平行链区块为block(100)'',正确的平行链区块为block(100)';. V: Z1 \9 x) P7 N3 I
(3)a打包block(100)'生成执行结果tx100_a,并发送给A;同理,b、c、d也分别打包block(100)'与block(100)''生成tx100_b、tx100_c、tx100_d,并发送给主链中对应的B、C、D;
(4)主链中的各节点可以相互通信,将收到的tx100_a、tx100_b、tx100_c、tx100_d相互广播并进行共识;经共识后,认定tx100_a、tx100_b、tx100_c为正确的执行结果,并以tx100_a为代表,对tx100_a打上确认标识;
(5)a、b、c、d、e、f从主链相应的节点同步经过确认的tx100_a,解析经过确认的tx100_a得到正确的区块哈希等数据,若与本节点本身计算得到的区块哈希等数据相同,则认为数据是可靠的。
简而言之,在步骤(3)、(4)中,验证节点将生成的平行链区块以交易的形式发送给主链,即其实平行链区块的正确性是由主链节点经过共识保证的,这样,改进后的主链—平行链机制既不需要消耗大量的算力资源,又保证平行链数据的可靠性。
成为第一个吐槽的人