跨链交易基本流程¶
一个典型的跨链交易流程如下图所示,图中各模块具体含义如下:
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 收到跨链交易后,将进行以下处理:
-
对 bxhTx1 进行基本验证,如验证交易的Nonce与签名的合法性;
-
将交易交由共识模块处理,负责共识出块;
-
出块完成后,交由执行模块处理;
-
执行模块交由验证引擎验证区块的所有交易的有效性和存在性,并对交易根据发送的目的地址进行分类,处理完毕后交由路由模块;
-
路由模块根据地址将封装后的跨链交易bxhTxWrapper路由到对应的跨链网关,TxWrapper交易类型与路由逻辑如下所示。
参数 说明 Transactions 验证后交易集合,valid字段表明交易是否验证通过 Height 交易所在的区块高度
5. 跨链网关监听中继链交易¶
跨链网关 B 收到中继链发送的跨链交易,需要向中继链请求跨链交易所需的proof。proof由多签和交易状态组成。proof构造逻辑如下:
- 跨链网关向中继链请求该跨链交易的proof,中继链收到请求后,根据跨链交易ID从账本查询到该跨链交易;
- 中继链根据跨链交易ID从状态数据库中读取该跨链交易状态;
- 中继链各节点将交易状态与跨链交易相关字段进行打包签名,各节点签名的拼接称为多签,中继链将多签返回至跨链网关 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操作。