区块链作为一种分布式账本技术,可以被应用在金融、健康医疗、供应链、资产管理等诸多领域,但是受吞吐量、网络孤立性、伸缩性等因素的制约,目前的区块链项目并不能很好的服务于商业应用。在区块链所面临的诸多问题中,网络孤立性阻碍了不同区块链之间的协同操作,极大程度的限制了区块链的发挥空间。
一、引言
在前面的技术视点文章中,我们详细介绍了本体跨链协议中多链管理合约的功能和实现,通过多链管理合约可以完成侧链和侧链资产的管理。跨链交易的核心之一在于如何验证跨链状态的合法性,当源链发起一笔跨链交易时,目标链需要验证源链跨链数据的合法性。本次技术视点将介绍在本体跨链协议中两条链是如何验证对方链上发生的交易的合法性。
二、跨链交易合法性验证
跨链交易的验证主要由区块头同步合约和跨链管理合约完成,其具体实现如下:
2.1 区块头同步合约
本体跨链方案采用了较为精巧的区块头同步设计。同步的区块头存储于区块头同步合约中,当前链的其它任何合约都可以从该合约中读取同步的区块头。区块头同步合约主要有以下两个接口:
a. 主链和侧链之间的区块头同步
图:关键区块头同步
在本体主链的共识治理模型中,本体网络每隔一定数量的区块更换一次共识节点,在一个共识周期内,验证者集合保持不变。因此,如果侧链是同构链,那么链区块头同步过程不需要同步所有区块,只需要同步关键区块(即切换验证者集合的周期切换区块)和跨链交易发生的区块即可,这样的设计大大减少了区块头的同步数量。
为了防止侧链关键区块头同步在一个共识切换周期结束后没有更新,而产生前一个侧链共识周期验证人构造恶意区块头的情况,本体在主链的多链管理合约中包含了侧链共识周期管理。当前侧链的验证人可修改该属性,若侧链共识周期结束后,没有新的关键区块头被提交,侧链与主链间的跨链交互将会被终止。若新的侧链验证人发现在主链中的共识周期与侧链实际的共识切换周期不符,可在主链上修改该属性。同时,侧链也会受到相应的惩罚。
b. 侧链和侧链之间的区块头同步
侧链与侧链之间和主链与侧链之间的区块头同步过程有所不同,即关键区块头信息取得方式的不同。但是,这两者包含跨链交易的区块头同步过程相同。主链上记录了所有侧链的信息,假定 A 链和 B 链两条侧链希望直接建立连接。可以看到, A 链和 B 链都可以从主链拿到对方关键的区块头信息,并且这些信息经过了主链的共识。因此, A 链和 B 链不需要互相注册,也不需要从创世区块开始同步对方的关键区块头信息,只需要取得对方链需要跨链的前一个关键区块头信息即可。
2.2 跨链管理合约
当 dApp 处理跨链交互时,dApp 合约先处理其在源链上的逻辑,需要跨链时调用跨链管理合约的跨链接口。状态信息同步者Relayer 将状态信息的证明同步给目标链(的跨链管理合约)后,dApp 将继续处理其在目标链上的逻辑。具体流程如下:
图:链间交互流程
✔源链的跨链管理合约会为每一笔跨链交易分配一个自增 ID,并将跨链交易放入 Merkle Tree,而 Merkle Root 会被放入当前区块的区块头中,完成后会将该自增 ID 和区块高度通过事件推送出去。同时,在发起跨链交易时,用户需要将一部分的 ONG 作为矿工费用在源链上销毁或冻结。
✔Relayer 负责监听这些跨链事件,当监听到一笔跨链交易时,Relayer 根据 ID 和区块高度去源链上获取 Merkle 证明。然后,Relayer将 Merkle 证明提交到目标链,提交过程需要支付一笔目标链的矿工费。
✔目标链(的跨链管理合约)接收到该 Merkle 证明,向区块头同步合约获取对应的区块头,得到 Merkle root 并验证在源链上已完成的跨链交易的合法性,标记该交易 ID 为已花费,然后根据跨链交易的参数,跨合约调用目标链上的 dApp 合约,完成目标链上 dApp 合约的逻辑。
✔该跨链交易在目标链上被执行成功后,Relayer 会取得相应的矿工激励。根据交易的不同,这可能是侧链 ONGx 合约增发的 ONGx,也可能是主链多链管理合约中释放的 ONG。
三、后记
通过区块头同步合约和跨链管理合约这两个模块,本体可以实现链与链之间相互验证对方交易的合法性,为跨链奠定基础。
在以后的本体技术视点文章中,我们将给大家带来更多关于本体跨链设计的具体细节。目前,本体跨链测试网已经上线,也提供了详细的跨链使用教程和多链开发手册,希望广大技术爱好者来体验本体跨链测试网络。
多链开发手册
https://github.com/siovanus/documentation/blob/master/multichain/Testnet_Dev_Manual.md
跨链使用教程:
https://github.com/siovanus/documentation/blob/master/multichain/Tutorial_Case.md