趣链 BitXHub跨链平台 跨链事务
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了趣链 BitXHub跨链平台 跨链事务相关的知识,希望对你有一定的参考价值。
1. 定义
中继链内置了事务管理合约,提供基于本地消息表的事务支持,实现了跨链事务的最终一致性。
step1. 事务管理合约在处理跨链交易时,根据目的链数量的不同(一个或多个),采用不同的逻辑生成跨链事务 ID,并将事务 ID 对应的初始状态记录在事务管理合约。
step2. 当目的链执行完跨链交易后,事务管理合约根据目的链交易的执行结果(成功或失败)更新对应事务的状态。
step3. 事务管理合约提供了接口,可供各应用链查询某个事务 ID 对应的事务状态。若应用链发现事务执行失败,则需要负责业务上的回滚操作。
2. 类型
2.1 一对一跨链
当来源链业务合约提供来源链的回调方法和回滚方法。
- 跨链事务ID=来源链ID || 目的链ID || IBTP index组成
step1. 中继链跨链事务合约初始化跨链交易所对应的跨链事务, 在跨链事务合约中以KV形式记录跨链事务ID和事务状态信息,初始的跨链状态信息为TransactionStatus_BEGIN
step2. 中继链跨链事务合约根据其中的回执信息,更新跨链事务ID的状态,如果成功,则状态更新为TransactionStatus_SUCCESS,否则为TransactionStatus_FAILURE。
step3. 判断跨链事务的最终状态
- 如果成功,则来源链跨链网关调用来源链业务合约注册的回调函数进行回调;
- 如果失败,则来源链跨链网关将调用来源链业务合约注册的回滚函数进行回滚操作。
(目的链执行完跨链交易时,由目的链跨链网关得到执行的结果(成功或失败),并将该信息封装成IBTP receipt提交给中继链)
2.2 一对多跨链
一对多跨链是指,在一个来源链的业务合约的交易中,抛出了多个指向不同目的链的跨链事件。
2.2.1 一对多跨链的事务分为全局事务和子事务的概念
- 子事务:指来源链和某个目的链的跨链事务
- 全局事务:综合各个子事务的整体事务
2.2.2 事务信息结构
type txInfo struct {
// 全局事务状态
globalState string
// 子事务信息,key为子事务ID,即各目的链的地址,value为子事务状态
childTxInfo map<string, string>
}
2.2.3 步骤
step1. 全局事务状态和子事务初始状态为BEGIN。
step2. 各目的链的跨链网关获取跨链交易并提交给各目的链执行,目的链执行完子事务后由跨链网关根据执行结果向中继链反馈子事务状态,中继链事务管理合约将进行相应的更新
step3. 判断交易结果
- 如果成功,则将对应的子事务状态设置为SUCCESS,当所有子事务状态均为SUCCESS时,跨链事务管理合约将该全局事务ID对应的事务状态更新为SUCCESS
- 如果失败,则将对应的子事务状态设置为FAILURE,并将该全局事务ID对应的事务状态更新为FAILURE
step4. 各个应用链(包含来源链和目的链)的跨链网关可以获取中继链的全局事务和子事务的状态, 来对应用链进行业务上的“回调”操作或“回滚”操作。
3 跨链事务合约设计
跨链事务管理合约接口:
// 一对一跨链事务初始化
Begin(txId string)
// 一对多跨链事务初始化
BeginMultiTXs(globalId string, childTxIds ...string)
// 报告事务执行结果
Report(txId string, result int32)
// 获取事务状态
GetStatus(txId string)
以上是关于趣链 BitXHub跨链平台 跨链事务的主要内容,如果未能解决你的问题,请参考以下文章