趣链 BitXHub跨链平台 (9)跨链事务
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跨链平台 (9)跨链事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 趣链 BitXHub跨链平台 (8)交易
- 下一篇: 百度超级链XChain(2)p2p网络