跳转至

跨链交易基本流程

一个典型的跨链交易流程如下图所示,图中各模块具体含义如下:

  • Application A / Application B:参与跨链的两条应用链A与应用链B。
  • App-chain A / App-chain B:应用链插件A与应用链插件B,适配不同的应用链发出的跨链交易。
  • Pier A / Pier B:网关A与网关B,用于转发跨链交易,是应用链与中继链的中转站。
  • BitXHub:中继链,用于跨链交易验证。

具体的交易执行流程如下:

1. broker合约抛出跨链事件

以具体的跨链交易事件为例,如数据交换场景:应用链A想获取应用链B的某个数据。SDK 调用具体的应用链 A 的业务合约data_swapper合约的 get 方法,该方法需指定应用链B的 ChainID ,然后调用broker合约方法,抛出跨链事件Ta。

2. 跨链网关监听跨链事件

跨链网关 A 通过应用链插件 A 监听到跨链事件Ta,应用链插件实质为跨链网关与应用链的交互模块,其设计思想参考跨链网关设计方案

3. 跨链网关转发跨链事件

跨链网关 A 将跨链交易格式转换为中继链通用的IBTP结构,并将IBTP封装为bxh交易类型 bxhTx1 提交到中继链BitXHub上,bxh交易类型如下图所示。

参数 说明
From 跨链网关 A 的地址,由跨链网关的私钥生成
To bitXHub处理跨链交易的合约地址
IBTP 跨链网关将跨链事件Ta封装为ibtp类型
Nonce ibtp的索引
Timestamp 跨链事件发生时间戳
…………

4. 中继链处理跨链交易

BitXHub 收到跨链交易后,将进行以下处理:

  1. 对 bxhTx1 进行基本验证,如验证交易的Nonce与签名的合法性;

  2. 将交易交由共识模块处理,负责共识出块;

  3. 出块完成后,交由执行模块处理;

  4. 执行模块交由验证引擎验证区块的所有交易的有效性和存在性,并对交易根据发送的目的地址进行分类,处理完毕后交由路由模块;

  5. 路由模块根据地址将封装后的跨链交易bxhTxWrapper路由到对应的跨链网关,TxWrapper交易类型与路由逻辑如下所示。

    参数 说明
    Transactions 验证后交易集合,valid字段表明交易是否验证通过
    Height 交易所在的区块高度

5. 跨链网关监听中继链交易

跨链网关 B 收到中继链发送的跨链交易,需要向中继链请求跨链交易所需的proof。proof由多签和交易状态组成。proof构造逻辑如下:

  1. 跨链网关向中继链请求该跨链交易的proof,中继链收到请求后,根据跨链交易ID从账本查询到该跨链交易;
  2. 中继链根据跨链交易ID从状态数据库中读取该跨链交易状态;
  3. 中继链各节点将交易状态与跨链交易相关字段进行打包签名,各节点签名的拼接称为多签,中继链将多签返回至跨链网关 B ;

至此 proof构造完成,因为proof的构造是有中继链各节点管理员使用私钥对其IBTP各字段与交易状态进行签名,跨链网关作为不受信任的组件只进行封装与转发的操作,如果跨链网关作恶,对其内容进行更改,在应用链合约在使用中继链管理员的公钥进行proof校验时将失败,因此整个跨链交易流程最终失败,应用链 A 将进行相关回滚操作。

6. 解析中继链交易并转发给应用链执行

跨链网关 B 将根据IBTP结构对收到的ibtp1进行解析,转换成业务链 B 可识别的交易Tb,并提交到应用链 B 执行跨链交易。

7. 跨链网关构建跨链交易回执

  • 应用链 B 调用broker合约的invokeInterchain方法处理收到交易Tb,然后调用具体的业务合约方法执行;
  • broker合约将处理结果返回给应用链插件 B ,应用链插件 B 将返回的结果构建为IBTP类型的回执receiptB,之后发送给跨链网关 B。

8. 跨链网关转发跨链交易回执

由于回执也是ibtp类型的跨链交易,因此目的链发送回执给来源链的过程,与来源链发送跨链交易给目的链的过程一致。即跨链网关 B 转发receiptB给中继链,中继链转发至跨链网关 A ,最后跨链网关 A 将交易回执转发给应用链A。

9. 同步跨链交易回执至来源链网关

网关监听中继链抛出的跨链交易,如果是INTERCHAIN类型的跨链交易,调用SubmitIBTP方法,如果是回执类型的跨链交易,调用SubmitReceipt方法,将接收到的跨链交易转发至应用链。

10. 应用链根据IBTP类型发起函数调用

来源链如果收到txStatus为BEGIN_FAILURE/BEGIN_ROLLBACK类型的IBTP,说明跨链交易执行失败或者执行超时,应用链将执行Rollback操作进行业务回滚,如果是正常的SUCCESS类型,将执行对应的Commit操作。

回到页面顶部