多链架构设计必读:平行链节点如何快速发现主链数据被篡改?

原创
1594 天前
1220


现有的主链-平行链共识机制中,平行链节点执行完平行链区块的交易后,将该平行链区块链的执行结果发送给主链进行共识,平行链节点再同步主链的共识结果以完成平行链共识。

主链节点正常完成共识并生成了正确的共识结果,将正确的共识结果保存在数据库中,例如,小A与小B的初始余额为10,小A将5个通证转账给小B,交易完成后小A的最终余额为5,小B的最终余额为15。

但是,数据库容易被黑客攻击,假设黑客篡改数据库中的共识结果,将小A的最终余额更改为10,而平行链节点在不验证共识结果的情况下完成平行链共识,平行链节点将记录被篡改的共识结果,即平行链节点记录的信息为小A的最终余额为10,小B的最终余额为15。

平行链节点在若干区块高度后会发现共识结果被篡改,但在发现之前,若还有其他交易中用到了小A的余额信息,则相当于得到更多的错误结果,造成巨大的损失。

针对上述问题,chain33为平行链节点配置数据的验证机制,假设有如下应用场景,平行链节点根据平行链交易tx1(平)、tx2(平)生成平行链区块block(50),及根据block(50)的执行结果生成共识交易tx50,将tx50发送给主链节点;主链节点对tx50进行共识后,平行链节点同步主链节点上经共识的tx50。 具体的验证过程如下:

1、平行链节点从主链节点同步共识交易tx50,平行链节点执行同步到的共识交易生成执行结果m1。

2、平行链节点执行tx1(平)、tx2(平),生成执行结果m2。

3、平行链节点对比m1与m2。

3.1若m1与m2相同,则证明共识结果未被篡改。

3.2若m1与m2不同。

则证明有如下可能:

(1)共识结果被篡改

(2)平行链节点本身故障,本文仅讨论共识结果被篡改这一场景:当m1与m2不同时,共识结果被篡改,平行链节点向主链节点发送一条数据错误的交易,主链节点接收到该数据错误的交易时,判断m1与m2不同的原因是否主链造成。

chain33还为主链节点配置了数据回滚机制,当发现m1与m2不同的原因的确是主链造成时,对被黑客攻击的主链节点进行回滚操作。

chain33通过在平行链节点上配置数据的验证机制,在主链节点上数据回滚机制,使得平行链节点不盲目同步主链节点的数据,能够尽快的发现主链节点数据库被篡改,并能够很好的提示被篡改的主链节点尽快回滚数据,提高了共识结果的准确性,也提高了平行链节点的共识效率。