2. ChainBridge-TCIP中继跨链方案

2.1. 方案设计

TCIP是ChainBridge的跨链协议,全称Trust Chain Interoperability Protocol,将长安链作为中继链,理论上支持所有异构以及同构链之间进行跨链。此外不仅仅是链,理论上也支持数据库这种支持事务操作的的系统。

ChainBridge-TCIP中继跨链方案

2.2. 跨链场景支持

新增了子链跨主链、主链跨子链场景的支持

跨链简图

场景一(AB跨链,B成功):

  1. 用户调用子链A,执行TryA,触发跨链;

  2. 中继链调用子链系统B,执行TryB,TryB执行成功,返回给中继链;

  3. 主链分别调用子链系统A、子链系统B,执行Confirm。

场景二

场景二(AB跨链,B失败):

  1. 用户调用子链A,执行TryA,触发跨链;

  2. 主链调用链系统B,执行TryB,TryB执行失败,返回给中继链;

  3. 主链分别调用链系统A、链系统B,执行Cancel。

../_images/subchainSimple3.png

场景三(子链跨主链):

  1. 用户调用子链A,执行TryA,触发跨链;

  2. 主链调用自身,执行Try主链,Try主链执行成功;

  3. 主链分别调用链系统A、自身,执行Confirm。

../_images/subchainSimple4.png

场景四(主链跨子链):

  1. 用户调用主链,执行Try主链,触发跨链;

  2. 主链调用链系统A,执行TryA,TryA执行成功;

  3. 主链分别调用自身、链系统A,执行Confirm。

2.3. 详细流程

详细流程

此流程为示例跨链网关流程,跨链网关与子链以及app的交互,可以自定义实现

穿过虚线的步骤,为TCIP协议定义的内容,参考TCIP协议

相较于上一版本的TICP示例流程,本版本示例跨链网关将跨链信息的构建固定为由跨链合约构建,交易验证只采用spv验证

  1. APP初始化跨链配置到跨链合约中,并监听业务合约中的完成事件(该事件不是标准,可以自行设计如何让APP获取跨链结束状态)

  2. APP调用子链1的业务合约

  3. 业务合约组装跨链所需数据,跨合约调用跨链合约,将数据发送到跨链合约中

  4. 跨链合约接收到业务合约的数据,根据初始化的跨链配置,组装跨链事件,被监听该事件的跨链网关A获取

  5. 跨链网关A向中继网关发送跨链请求

  6. 中继网关验证子链1的交易

  7. 中继网关新建跨链交易并保存到主链

  8. 中继网关推送跨链交易到跨链网关B

  9. 跨链网关将交易发送到子链2的业务合约中执行

  10. 返回交易执行结果

  11. 跨链网关B向中继网关返回执行结果

  12. 中继网关验证子链2的交易

  13. 中继网关将子链2的交易以及结果保存到主链

  14. 中继网关计算跨链结果

  15. 中继网关将跨链结果保存到主链

  16. 中继网关向跨链网关A和跨链网关B发送确认,成功cofirm,失败cancel

  17. 跨链网关A和跨链网关B向自己的业务合约发起确认

  18. 业务合约向跨链网关和APP返回确认结果

  19. 跨链网关A和跨链网关B向中继网关返回确认结果

  20. 中继网关将确认结果保存到主链,并标记为结束

2.4. 接口介绍

穿过详细流程图中虚线的箭头,即为TCIP跨链协议的内容, 参考TCIP协议,其接口描述如下:

本方案只使用了如下图所示的接口

2.4.1. 跨链网关接口:

跨链网关接口

CrossChainTry(必须): 接收跨链交易的接口;
CrossChainConfirm(必须):跨链成功后接收跨链确认的接口;
CrossChainCancel(必须):跨链失败后接收交易回滚的接口;
PingPong(必须):心跳检测接口。

2.4.2. 中继网关接口:

中继网关接口

SyncBlockHeader:区块头同步接口,该接口为spv交易验证方式提供同步区块头的功能,区块头会被保存在对应链的spv合约中;
BeginCrossChain:跨链网关向中继网关发起跨链请求的接口;
QueryCrossChain:用于查询跨链交易的接口;
CrossChainEvent:用于保存跨链配置(也可以直接用主链sdk调用跨链配置合约)。

2.5. 协议内容

协议内容