2. ChainBridge-TCIP中继跨链方案
2.1. 方案设计
TCIP是ChainBridge的跨链协议,全称Trust Chain Interoperability Protocol,将长安链作为中继链,理论上支持所有异构以及同构链之间进行跨链。此外不仅仅是链,理论上也支持数据库这种支持事务操作的的系统。
2.2. 跨链场景支持
新增了子链跨主链、主链跨子链场景的支持
场景一(AB跨链,B成功):
用户调用子链A,执行TryA,触发跨链;
中继链调用子链系统B,执行TryB,TryB执行成功,返回给中继链;
主链分别调用子链系统A、子链系统B,执行Confirm。
场景二(AB跨链,B失败):
用户调用子链A,执行TryA,触发跨链;
主链调用链系统B,执行TryB,TryB执行失败,返回给中继链;
主链分别调用链系统A、链系统B,执行Cancel。
场景三(子链跨主链):
用户调用子链A,执行TryA,触发跨链;
主链调用自身,执行Try主链,Try主链执行成功;
主链分别调用链系统A、自身,执行Confirm。
场景四(主链跨子链):
用户调用主链,执行Try主链,触发跨链;
主链调用链系统A,执行TryA,TryA执行成功;
主链分别调用自身、链系统A,执行Confirm。
2.3. 详细流程
此流程为示例跨链网关流程,跨链网关与子链以及app的交互,可以自定义实现
穿过虚线的步骤,为TCIP协议定义的内容,参考TCIP协议
相较于上一版本的TICP示例流程,本版本示例跨链网关将跨链信息的构建固定为由跨链合约构建,交易验证只采用spv验证
APP初始化跨链配置到跨链合约中,并监听业务合约中的完成事件(该事件不是标准,可以自行设计如何让APP获取跨链结束状态)
APP调用子链1的业务合约
业务合约组装跨链所需数据,跨合约调用跨链合约,将数据发送到跨链合约中
跨链合约接收到业务合约的数据,根据初始化的跨链配置,组装跨链事件,被监听该事件的跨链网关A获取
跨链网关A向中继网关发送跨链请求
中继网关验证子链1的交易
中继网关新建跨链交易并保存到主链
中继网关推送跨链交易到跨链网关B
跨链网关将交易发送到子链2的业务合约中执行
返回交易执行结果
跨链网关B向中继网关返回执行结果
中继网关验证子链2的交易
中继网关将子链2的交易以及结果保存到主链
中继网关计算跨链结果
中继网关将跨链结果保存到主链
中继网关向跨链网关A和跨链网关B发送确认,成功cofirm,失败cancel
跨链网关A和跨链网关B向自己的业务合约发起确认
业务合约向跨链网关和APP返回确认结果
跨链网关A和跨链网关B向中继网关返回确认结果
中继网关将确认结果保存到主链,并标记为结束
2.4. 接口介绍
穿过详细流程图中虚线的箭头,即为TCIP跨链协议的内容, 参考TCIP协议,其接口描述如下:
本方案只使用了如下图所示的接口
2.4.1. 跨链网关接口:
CrossChainTry(必须): 接收跨链交易的接口;
CrossChainConfirm(必须):跨链成功后接收跨链确认的接口;
CrossChainCancel(必须):跨链失败后接收交易回滚的接口;
PingPong(必须):心跳检测接口。
2.4.2. 中继网关接口:
SyncBlockHeader:区块头同步接口,该接口为spv交易验证方式提供同步区块头的功能,区块头会被保存在对应链的spv合约中;
BeginCrossChain:跨链网关向中继网关发起跨链请求的接口;
QueryCrossChain:用于查询跨链交易的接口;
CrossChainEvent:用于保存跨链配置(也可以直接用主链sdk调用跨链配置合约)。