趣链 BitXHub跨链平台 (9)跨链事务
1. 定義
中繼鏈內(nèi)置了事務(wù)管理合約,提供基于本地消息表的事務(wù)支持,實現(xiàn)了跨鏈事務(wù)的最終一致性。
step1. 事務(wù)管理合約在處理跨鏈交易時,根據(jù)目的鏈數(shù)量的不同(一個或多個),采用不同的邏輯生成跨鏈事務(wù) ID,并將事務(wù) ID 對應(yīng)的初始狀態(tài)記錄在事務(wù)管理合約。
step2. 當目的鏈執(zhí)行完跨鏈交易后,事務(wù)管理合約根據(jù)目的鏈交易的執(zhí)行結(jié)果(成功或失敗)更新對應(yīng)事務(wù)的狀態(tài)。
step3. 事務(wù)管理合約提供了接口,可供各應(yīng)用鏈查詢某個事務(wù) ID 對應(yīng)的事務(wù)狀態(tài)。若應(yīng)用鏈發(fā)現(xiàn)事務(wù)執(zhí)行失敗,則需要負責(zé)業(yè)務(wù)上的回滾操作。
2. 類型
2.1 一對一跨鏈
當來源鏈業(yè)務(wù)合約提供來源鏈的回調(diào)方法和回滾方法。
- 跨鏈事務(wù)ID=來源鏈ID || 目的鏈ID || IBTP index組成
step1. 中繼鏈跨鏈事務(wù)合約初始化跨鏈交易所對應(yīng)的跨鏈事務(wù), 在跨鏈事務(wù)合約中以KV形式記錄跨鏈事務(wù)ID和事務(wù)狀態(tài)信息,初始的跨鏈狀態(tài)信息為TransactionStatus_BEGIN
step2. 中繼鏈跨鏈事務(wù)合約根據(jù)其中的回執(zhí)信息,更新跨鏈事務(wù)ID的狀態(tài),如果成功,則狀態(tài)更新為TransactionStatus_SUCCESS,否則為TransactionStatus_FAILURE。
step3. 判斷跨鏈事務(wù)的最終狀態(tài)
- 如果成功,則來源鏈跨鏈網(wǎng)關(guān)調(diào)用來源鏈業(yè)務(wù)合約注冊的回調(diào)函數(shù)進行回調(diào);
- 如果失敗,則來源鏈跨鏈網(wǎng)關(guān)將調(diào)用來源鏈業(yè)務(wù)合約注冊的回滾函數(shù)進行回滾操作。
(目的鏈執(zhí)行完跨鏈交易時,由目的鏈跨鏈網(wǎng)關(guān)得到執(zhí)行的結(jié)果(成功或失敗),并將該信息封裝成IBTP receipt提交給中繼鏈)
2.2 一對多跨鏈
一對多跨鏈是指,在一個來源鏈的業(yè)務(wù)合約的交易中,拋出了多個指向不同目的鏈的跨鏈事件。
2.2.1 一對多跨鏈的事務(wù)分為全局事務(wù)和子事務(wù)的概念
- 子事務(wù):指來源鏈和某個目的鏈的跨鏈事務(wù)
- 全局事務(wù):綜合各個子事務(wù)的整體事務(wù)
2.2.2 事務(wù)信息結(jié)構(gòu)
type txInfo struct {// 全局事務(wù)狀態(tài)globalState string// 子事務(wù)信息,key為子事務(wù)ID,即各目的鏈的地址,value為子事務(wù)狀態(tài)childTxInfo map<string, string> }2.2.3 步驟
step1. 全局事務(wù)狀態(tài)和子事務(wù)初始狀態(tài)為BEGIN。
step2. 各目的鏈的跨鏈網(wǎng)關(guān)獲取跨鏈交易并提交給各目的鏈執(zhí)行,目的鏈執(zhí)行完子事務(wù)后由跨鏈網(wǎng)關(guān)根據(jù)執(zhí)行結(jié)果向中繼鏈反饋子事務(wù)狀態(tài),中繼鏈事務(wù)管理合約將進行相應(yīng)的更新
step3. 判斷交易結(jié)果
- 如果成功,則將對應(yīng)的子事務(wù)狀態(tài)設(shè)置為SUCCESS,當所有子事務(wù)狀態(tài)均為SUCCESS時,跨鏈事務(wù)管理合約將該全局事務(wù)ID對應(yīng)的事務(wù)狀態(tài)更新為SUCCESS
- 如果失敗,則將對應(yīng)的子事務(wù)狀態(tài)設(shè)置為FAILURE,并將該全局事務(wù)ID對應(yīng)的事務(wù)狀態(tài)更新為FAILURE
step4. 各個應(yīng)用鏈(包含來源鏈和目的鏈)的跨鏈網(wǎng)關(guān)可以獲取中繼鏈的全局事務(wù)和子事務(wù)的狀態(tài), 來對應(yīng)用鏈進行業(yè)務(wù)上的“回調(diào)”操作或“回滾”操作。
3 跨鏈事務(wù)合約設(shè)計
跨鏈事務(wù)管理合約接口:
// 一對一跨鏈事務(wù)初始化 Begin(txId string)// 一對多跨鏈事務(wù)初始化 BeginMultiTXs(globalId string, childTxIds ...string)// 報告事務(wù)執(zhí)行結(jié)果 Report(txId string, result int32)// 獲取事務(wù)狀態(tài) GetStatus(txId string)總結(jié)
以上是生活随笔為你收集整理的趣链 BitXHub跨链平台 (9)跨链事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 趣链 BitXHub跨链平台 (8)交易
- 下一篇: 百度超级链XChain(2)p2p网络