作恶方式现有的跨链方案中大都采用 Merkle Tree 证明的方式,即侧链会在每一个区块中生成当前区块中所有交易产生状态的 State Root,侧链验证人会对该 State Root 进行签名。当有跨链交易发生时,通过验证该 State Root 即可验证跨链状态的合法性。若侧链验证人发现用户跨链交互的资产实际价值大于这些验证人抵押资产的实际价值,那么侧链验证人可以基于当前区块伪造一个 State Root,即无视当前区块的执行结果,强行构造一个对自己有利的 State Root,从而窃取用户锁定在主链上的资产。三、如何解决侧链作恶我们可以设置一个挑战期,在挑战期内可以分为如下几个步骤进行作恶举证:
(1) 是否能提交作恶的区块;
(2) 是否能提供作恶的交易的前一个状态;
(3) 是否能提供作恶的智能合约;
(4) 是否在对应虚拟机中运行生成的 States Root 是否与当前区块的 State Root 一致。
验证人作恶是通过集体在当前区块构造虚假的 State Root,但区块中的交易因为无法伪造用户签名并不能被改变。因此,针对验证人作恶的情况,我们提出一个解决该问题的设想。在挑战期内,若发现某一笔交易作恶,可以通过作恶区块、作恶区块中的交易、作恶区块中交易的前一个状态、作恶智能合约去对应的虚拟机中运行结果,并比较运行产生的 State Root 与提交作恶区块中的 State Root 是否一致,从而验证该 State Root 是否合法。
图 | 网络
同时,不管是否有跨链交易的发生,Relayer 都会实时监听侧链的情况,若监听到当前区块头的 State Root 与实际运行 State Root 的不符,可立即提交该证明到主链中,举证侧链的恶意行为,并获得侧链验证人抵押在主链中相应的激励。可以看到,目前该方案也存在进一步优化的空间。其验证过程稍显复杂,特别是对于异构链而言;另外,挑战期的存在对用户也不是足够的友好。因此,本体会在该方案的基础上继续研究其它更可行、更高效的解决方案。