當前位置:首頁 > 區塊鏈知識 > 正文

本體跨鏈設計中如何驗證跨鏈交易的合法性?

來源: 互聯網時間:2019-11-04 15:01:47

區塊鏈作為一種分布式賬本技術,可以被應用在金融、健康醫療、供應鏈、資產管理等諸多領域,但是受吞吐量、網絡孤立性、伸縮性等因素的制約,目前的區塊鏈項目并不能很好的服務于商業應用。在區塊鏈所面臨的諸多問題中,網絡孤立性阻礙了不同區塊鏈之間的協同操作,極大程度的限制了區塊鏈的發揮空間。

一、引言

在前面的技術視點文章中,我們詳細介紹了本體跨鏈協議中多鏈管理合約的功能和實現,通過多鏈管理合約可以完成側鏈和側鏈資產的管理。跨鏈交易的核心之一在于如何驗證跨鏈狀態的合法性,當源鏈發起一筆跨鏈交易時,目標鏈需要驗證源鏈跨鏈數據的合法性。本次技術視點將介紹在本體跨鏈協議中兩條鏈是如何驗證對方鏈上發生的交易的合法性。

二、跨鏈交易合法性驗證

跨鏈交易的驗證主要由區塊頭同步合約跨鏈管理合約完成,其具體實現如下:

2.1 區塊頭同步合約

本體跨鏈方案采用了較為精巧的區塊頭同步設計。同步的區塊頭存儲于區塊頭同步合約中,當前鏈的其它任何合約都可以從該合約中讀取同步的區塊頭。區塊頭同步合約主要有以下兩個接口:

a. 主鏈和側鏈之間的區塊頭同步

圖:關鍵區塊頭同步

在本體主鏈的共識治理模型中,本體網絡每隔一定數量的區塊更換一次共識節點,在一個共識周期內,驗證者集合保持不變。因此,如果側鏈是同構鏈,那么鏈區塊頭同步過程不需要同步所有區塊,只需要同步關鍵區塊(即切換驗證者集合的周期切換區塊)和跨鏈交易發生的區塊即可,這樣的設計大大減少了區塊頭的同步數量。

為了防止側鏈關鍵區塊頭同步在一個共識切換周期結束后沒有更新,而產生前一個側鏈共識周期驗證人構造惡意區塊頭的情況,本體在主鏈的多鏈管理合約中包含了側鏈共識周期管理。當前側鏈的驗證人可修改該屬性,若側鏈共識周期結束后,沒有新的關鍵區塊頭被提交,側鏈與主鏈間的跨鏈交互將會被終止。若新的側鏈驗證人發現在主鏈中的共識周期與側鏈實際的共識切換周期不符,可在主鏈上修改該屬性。同時,側鏈也會受到相應的懲罰。

b. 側鏈和側鏈之間的區塊頭同步

側鏈與側鏈之間和主鏈與側鏈之間的區塊頭同步過程有所不同,即關鍵區塊頭信息取得方式的不同。但是,這兩者包含跨鏈交易的區塊頭同步過程相同。主鏈上記錄了所有側鏈的信息,假定 A 鏈和 B 鏈兩條側鏈希望直接建立連接。可以看到, A 鏈和 B 鏈都可以從主鏈拿到對方關鍵的區塊頭信息,并且這些信息經過了主鏈的共識。因此, A 鏈和 B 鏈不需要互相注冊,也不需要從創世區塊開始同步對方的關鍵區塊頭信息,只需要取得對方鏈需要跨鏈的前一個關鍵區塊頭信息即可。

2.2 跨鏈管理合約

當 dApp 處理跨鏈交互時,dApp 合約先處理其在源鏈上的邏輯,需要跨鏈時調用跨鏈管理合約的跨鏈接口。狀態信息同步者Relayer 將狀態信息的證明同步給目標鏈(的跨鏈管理合約)后,dApp 將繼續處理其在目標鏈上的邏輯。具體流程如下:

圖:鏈間交互流程

?源鏈的跨鏈管理合約會為每一筆跨鏈交易分配一個自增 ID,并將跨鏈交易放入 Merkle Tree,而 Merkle Root 會被放入當前區塊的區塊頭中,完成后會將該自增 ID 和區塊高度通過事件推送出去。同時,在發起跨鏈交易時,用戶需要將一部分的 ONG 作為礦工費用在源鏈上銷毀或凍結。

?Relayer 負責監聽這些跨鏈事件,當監聽到一筆跨鏈交易時,Relayer 根據 ID 和區塊高度去源鏈上獲取 Merkle 證明。然后,Relayer將 Merkle 證明提交到目標鏈,提交過程需要支付一筆目標鏈的礦工費。

?目標鏈(的跨鏈管理合約)接收到該 Merkle 證明,向區塊頭同步合約獲取對應的區塊頭,得到 Merkle root 并驗證在源鏈上已完成的跨鏈交易的合法性,標記該交易 ID 為已花費,然后根據跨鏈交易的參數,跨合約調用目標鏈上的 dApp 合約,完成目標鏈上 dApp 合約的邏輯。

?該跨鏈交易在目標鏈上被執行成功后,Relayer 會取得相應的礦工激勵。根據交易的不同,這可能是側鏈 ONGx 合約增發的 ONGx,也可能是主鏈多鏈管理合約中釋放的 ONG。

三、后記

通過區塊頭同步合約跨鏈管理合約這兩個模塊,本體可以實現鏈與鏈之間相互驗證對方交易的合法性,為跨鏈奠定基礎。

在以后的本體技術視點文章中,我們將給大家帶來更多關于本體跨鏈設計的具體細節。目前,本體跨鏈測試網已經上線,也提供了詳細的跨鏈使用教程和多鏈開發手冊,希望廣大技術愛好者來體驗本體跨鏈測試網絡。

多鏈開發手冊

https://github.com/siovanus/documentation/blob/master/multichain/Testnet_Dev_Manual.md

跨鏈使用教程:

https://github.com/siovanus/documentation/blob/master/multichain/Tutorial_Case.md

標簽: 本體網絡

聲明:本文內容綜合整理自網絡,觀點僅代表作者本人,不代表本站立場。
广东11选5稳赚技巧