EOS系列 - EOSIO 跨鏈通信

跨鏈通信使一個區塊鏈能夠以可證實的安全方式驗證另一個區塊鏈上事件的真實性,目標是讓區塊鏈之間的通信像智能合約之間的內部鏈式溝通一樣安全.

輕量級的默克爾樹證明

  • 比特幣的SPV(簡單支驗證)
  • EOS引入LCV

EOS跨鏈通信

EOS.IO 的設計能促進跨鏈通信,實現方式是簡化生成操作存在證明和順序證明。這些證明和圍繞操作傳遞設計的應用架構一起,使得跨鏈通信的細節和驗證工作對應用開發者不可見,開發者看到的只是更高層次的抽象。

用於輕客戶端的 Merkle 證明 (LCV)

在這裏插入圖片描述

如果客戶端不需要處理全部交易的話,和其他區塊鏈的結合將變得非常容易。畢竟類似交易所這樣的客戶端,它只關心資產的轉入和轉出。理想情況下,交易所的鏈可以用轉賬交易的輕量默克爾證明(來完成交易所業務),而不是完全信任某個區塊生產者。每條鏈的區塊生產者都希望和其他鏈同步的開銷儘可能地小。

輕量客戶端驗證(LCV)的目標是生成相對輕量的存在證明,這些證明可以被任何關心一個輕量的數據集的客戶端用來驗證。在上述例子中,LCV 的目的就是爲了用來證明某筆交易已經被包含進某一特定區塊,而這一區塊已經被某條特定的鏈所收錄。

比特幣支持交易驗證的功能,這一功能基於一個假設,那就是所有的節點都可以訪問到全部的區塊頭歷史數據(區塊頭數據每年增加 4MB)。在每秒 10 筆交易的吞吐下,一個驗證用到的存儲空間約爲 512 個字節。對於 10 分鐘一個區塊的比特幣來說,這是可行的。但對於擁有 0.5 秒的出塊速度的 EOS.IO 軟件來說,這個機制顯然不夠輕量。

任何有不可逆區塊頭數據的用戶在交易被區塊記錄後,都可以使用 EOS.IO 提供的輕量證明。輕量證明的哈希連接(hash-linked)結構表明,最多隻要 1024 個字節,即可驗證任何一筆交易的存在與否。

考慮到區塊鏈中的區塊的 id 和區塊頭都是可信的且不可逆的,因此證明某個區塊被包含在某個區塊鏈中也是可行的。這類證明最多隻需 ceil(log2(N)) 次摘要計算即可完成,其中 N 爲區塊鏈中的區塊個數。就 SHA256 這種摘要算法來說,你只需要 864 個字節就可以在一個有着 1 億個區塊的鏈上驗證某個區塊的存在。

使用合適的哈希連接(hash-linking)機制生產區塊以啓用上述證明,幾乎不會帶來什麼額外開銷,所以這種方式十分可行。

若要在其他鏈上驗證證明,時間、空間和帶寬上都有很多優化空間。追蹤全部的區塊頭(每年 420MB 遞增)可以將證明維持在比較小的空間佔用。僅追蹤最近的區塊頭會在最小長期存儲和證明大小之間實現平衡。另外也可以採用惰性求值的方式,記錄過去的證明的中間哈希值。新證明只需要包含已知的稀疏樹的連接。具體選取何種方式,取決於默克爾證明引用的帶有交易的外部區塊的比例。

當互聯和耦合程度達到一定的複雜度之後,將兩條鏈的數據合併將更簡單高效,如此一來也就不再需要默克爾證明了。因爲性能的原因,跨鏈證明的頻度當然是越小越好。

跨鏈通信的延時

當和外部區塊鏈進行通信的時候,區塊生產者必須要 100% 確認一筆交易已經被不可逆轉地寫入到外部區塊鏈之後,纔可以將其當作合法輸入。EOS.IO 的區塊鏈加上 DPOS 算法 0.5 秒的出塊速度,結合拜占庭容錯機制,使得等待上述確認的時間大約爲 0.5 秒。任何區塊生產者若違背上述原則,不等待確認即開始下一步操作,例如交易所在未確認的情況下就將資產衝入用戶賬戶,隨後又將資產取消的行爲,都將影響區塊鏈共識的有效性。EOS.IO 軟件使用 DPOS 算法結合異步拜占庭容錯機制快速實現交易的不可逆性。

完備性證明

當外部的區塊鏈使用默克爾證明的時候,去知曉處理的全部交易全部有效,迥異於去知曉沒有交易被跳過或省略。因爲想要證明"最近全部的交易都已經被知曉"是不可行的,而證明“交易歷史記錄裏沒有被跳過的交易”則很容易。EOS.IO 軟件通過給發送到每個賬戶的每個操作一個順序編號來實現這一點。用戶可以使用這些順序編號來驗證某個特定賬戶的所有操作都已經被處理,並且是嚴格按照順序來處理的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章