隨著公鏈和 layer2 鏈的數量越來越多,資產和 Dapp 的跨鏈需求也開始增多,跨鏈橋自然是一種比較常見的解決方案,但以 Zetachain 為代表的 Omnichain 走出了一條完全不同的道路,本文將以 Zetachain 為例,解釋 Omminchain 是如何把跨鏈規則寫入智能合約從而實現跨鏈互操作的去中心化的。
幾種跨鏈技術方案#
跨鏈(Cross-Chain)技術的核心目標是實現不同區塊鏈之間的互操作性(Interoperability)。互操作性是指不同的區塊鏈系統能夠相互理解和使用對方的資產(如代幣、加密貨幣等)和數據,或者在不同的區塊鏈平台上運行的應用能夠相互交互和協作。這一目標的實現,可以極大地增強區塊鏈生態系統的靈活性和擴展性,打破不同區塊鏈平台之間的孤島效應,從而促進更加廣泛的應用和發展。
根據跨鏈消息的處理方式以及相應資產的簽名授權方式的不同,可以分為以下幾個技術方案:
-
跨鏈橋(Cross-Chain Bridges):
跨鏈橋是一種使資產能夠從一個區塊鏈轉移到另一個區塊鏈的技術。它通過鎖定在源鏈上的資產,並在目標鏈上發行相應的代表性資產(或等價資產)來實現這一過程。這種方式支持資產的跨鏈轉移和使用,但需要確保資產的鎖定和釋放過程安全可靠。當兩個獨立的鏈採用橋接方式產生互操作時,我們說其中的一條鏈是另一條主鏈的側鏈。
2. 公證(Notary):
公證方案依賴於一組被信任的節點(或機構)來驗證跨鏈交易的有效性。這些公證節點監聽發生在一個鏈上的事件,並在另一個鏈上創建相應的事務來驗證和記錄這些事件。儘管這種方法可以實現跨鏈互操作,但它的安全性和去中心化程度在很大程度上取決於公證節點的可信度。
3. 哈希時間鎖定協議(Hash Timelock Contracts, HTLCs):
HTLCs 是一種基於時間鎖定的智能合約技術,允許兩個參與方在沒有第三方的情況下安全地進行跨鏈交換。這是通過創建一個需要正確的密碼才能解鎖資金的合約來實現的。只有當參與雙方都履行了合約要求時,資金才會被解鎖並交付給對方。這種方法支持去中心化的資產交換,但對參與方的協作有一定要求。
4. BoB(Blockchain on Blockchain,例如 Cosmos 的 IBC):
這種技術方案通過在現有區塊鏈上創建新的區塊鏈(或層)來實現跨鏈互操作性,例如 Cosmos 網絡中的 IBC(Inter-Blockchain Communication)協議。IBC 允許不同的區塊鏈保持獨立的治理結構,同時實現資產和數據的安全傳輸。這種方法旨在建立一個去中心化的區塊鏈互聯網,其中各個鏈可以自由地交換信息和值。
這些技術方案各有優缺點,適用於不同的場景和需求。跨鏈技術的選擇和實施需考慮目標區塊鏈的特性、安全性要求、去中心化程度以及實現的複雜性等因素。
跨鏈消息傳遞#
跨鏈消息傳遞(Cross-Chain Message Passing, CCMP)是實現跨鏈互操作性的核心技術,確保了跨鏈交互的流程可以安全、有效地進行,其基本目的是在不同區塊鏈間傳遞和驗證消息,從而實現資產和數據的跨鏈交互。其工作原理主要包括以下幾個關鍵環節:
1. 消息的生成與發送:
-
消息通常包含有關資產轉移的所有必要信息,如資產數量、源地址、目的地址等。
-
消息生成後,通過源鏈的智能合約發出,這個合約會記錄交易細節並觸發資產的鎖定。
2. 消息的傳遞:
-
傳遞方式通常有兩種:直接傳遞和中繼傳遞。
-
直接傳遞意味著源鏈和目標鏈之間有直接的通信路徑,但這在實際中很少見,因為大多數區塊鏈都是獨立運作的。
-
中繼傳遞涉及到中繼者(可以是中心化的服務提供者,也可以是去中心化的節點網絡),它們監聽源鏈上的特定事件,捕捉相關信息,並將這些信息傳遞到目標鏈。
3. 消息的驗證:
-
在目標鏈上,接收到的消息需要經過驗證以確認其合法性和完整性。
-
驗證過程通常需要源鏈的數據證明(如 Merkle 證明),這些證明可以證實消息確實來自源鏈,並且沒有被篡改。
-
一旦驗證通過,目標鏈上的智能合約會根據消息內容執行相應的操作,如鑄造代幣或更新狀態。
4. 處理和響應:
-
完成驗證後,目標鏈會進行必要的操作處理,如資產的釋放或創建新的代幣實例。
-
這一步驟完成後,跨鏈交互基本完成,用戶可以在目標鏈上使用或管理他們的資產。
所以從本質來說,前面提到的幾個跨鏈技術方案正是因為它們採用了不同的消息傳遞方式造成的。
1. 跨鏈橋
跨鏈橋通過創建一個中介層來促成資產和信息在不同區塊鏈間的轉移。這個中介層可以是:
- 中心化的伺服器,由可信實體控制,負責監聽一條鏈上的事件並在另一條鏈上複製這些事件。
- 去中心化網絡,由多個獨立運營的節點組成,這些節點通過共識機制來驗證和轉發消息。
在跨鏈橋中,通常涉及資產在源鏈的鎖定和在目標鏈上對等資產的鑄造。這個過程需要確保消息在被驗證和執行之前不被篡改。
2. 公證人
公證方案通常依賴於一組預先選定的公證人(可以是個人、組織或自動化的節點),這些公證人負責監聽一條鏈上的事件並在另一條鏈上驗證和確認這些事件。公證人提供了一種中心化或半中心化的驗證機制,這種機制的安全性和信任程度高度依賴於公證人的可信度。
3. 哈希時間鎖定合約(HTLC)
HTLC 是一種依賴加密技術的合約,用於兩個鏈間的條件性資產交換。它使用密碼學哈希函數和時間鎖來控制資產的釋放條件:
- 密碼哈希:只有當接收方提供正確的預圖像(對應於哈希的原始數據)時,資產才能從合約中釋放。
- 時間鎖:如果在規定時間內沒有提供正確的預圖像,資產將返回給原始持有者。
這種方式不依賴於中心化的驗證,而是通過合約本身保障資產的安全交換。
4. BoB
這種技術通過在一個跨鏈通信協議的基礎上創建新的鏈或子鏈。例如,Cosmos 通過 IBC 協議實現了不同區塊鏈之間的直接通信,每條鏈保持其自治性的同時,可以安全地交換消息和資產。IBC 和 XCMP 的本質其實是跨鏈通信協議。
同時 CCMP 技術也面臨幾個主要的挑戰:
** 安全性:** 中繼節點或網絡必須是可信的,否則存在消息被篡改的風險。此外,源鏈和目標鏈的智能合約也需設計得足夠安全,以防止潛在的漏洞。
效率與延遲:跨鏈操作通常涉及多個區塊確認,可能導致顯著的時間延遲。
** 去中心化與信任問題:** 依賴中繼節點或第三方服務可能與區塊鏈的去中心化精神相悖,因此設計去中心化而又安全的 CCMP 機制是一個技術挑戰。
由於這些技術和安全上的挑戰,CCMP 的實現和優化是跨鏈技術研究和發展中的一個活躍領域。各種解決方案試圖在去中心化、安全性和效率之間找到最佳平衡。
跨鏈資產的簽名和授權#
跨鏈技術和跨鏈互操作性不僅依賴於跨鏈消息傳遞(CCMP),還涉及到如何在源鏈和目標鏈上進行有效的簽名和授權,以確保資產的安全處理和交易的合法性。不同的跨鏈技術方案採用了不同的簽名和授權機制,這些機制核心在於如何驗證和執行交易的合法性,以及確保資產的安全轉移。下面是一些常見的跨鏈技術方案中關於簽名授權的實現:
1. 跨鏈橋
跨鏈橋可能採用多簽名(Multisignature)或代理簽名(Proxy Signature)的方法來處理簽名和授權。在這種方案中,轉移資產的操作需要得到一定數量的驗證節點或者特定的代理服務的授權,這些節點或服務承擔驗證交易請求的責任並對交易進行簽名。這種方式可以增加安全性,但也引入了信任的問題,因為它依賴於被授權的中心化或半中心化實體。
2. 公證人
在公證人系統中,公證人或公證節點集合通常負責監聽並驗證跨鏈交易請求,並在目標鏈上執行相應的操作。公證人需要在目標鏈上對操作進行簽名授權,證明源鏈上的交易是被允許的。這種方式依賴於公證人的信任度和安全性。
3. 哈希時間鎖定合約(HTLC)
在 HTLC 中,簽名授權並不依賴於外部的驗證者或中介。相反,交易的合法性和執行依賴於合約邏輯和參與者之間的直接互動。參與方提供正確的預圖像(即密鑰)作為解鎖合約的方式,這本身就是一種授權。此外,合約本身具備時間鎖定機制,保證只有在特定時間窗口內提供正確的預圖像才能完成交易。
4. BoB
例如,Cosmos 的 IBC 協議中,簽名授權過程通過鏈間協議和本地合約執行。每個鏈獨立管理自己的安全性和授權機制,同時通過協議確保跨鏈消息的安全性和有效性。這種方案強調了去中心化和自治,減少了對單一實體的依賴。
總之,簽名授權機制在不同的跨鏈技術方案中根據其結構和安全需求有所不同。這些機制的選擇和設計關鍵在於如何平衡安全性、信任、去中心化和效率。在實施跨鏈技術時,確保所有參與鏈的合法性和安全性是必不可少的。
Zetachain 的架構#
如果說 DeFi 是把金融規則寫入智能合約,鏈上遊戲是把遊戲規則寫入智能合約,那麼 Omnichain 其實就是把跨鏈規則寫入到智能合約裡面,這裡面包括了跨鏈消息傳輸規則和資產的簽名授權規則,讓我們深入細節來看看 Zetachain 是如何做到的。
ZetaChain 是一款基於 Cosmos SDK 和 Tendermint PBFT 共識引擎構建的 PoS 區塊鏈。由於使用了 Tendermint PBFT 共識引擎,ZetaChain 能夠實現大約 5 秒的快速區塊生成時間和即時的最終確定性(無需區塊確認,不允許重組)。在理想的網絡條件下,其交易吞吐量可以達到每秒 4000 + 交易,但跨鏈交易的吞吐量可能因為外部鏈的延遲和各種其他因素(如外部節點 RPC 速度等)而無法達到這一水平。
ZetaChain 的架構包含了一個由節點組成的分佈式網絡,這些節點通常被稱為驗證者(validators)。ZetaChain 的每個驗證者內部都包含 ZetaCore 和 ZetaClient。ZetaCore 負責產生區塊鏈和維護複製的狀態機,而 ZetaClient 負責觀察外部鏈上的事件並簽名外發交易。ZetaCore 和 ZetaClient 被打包在一起,由節點運營者運行。任何人只要質押足夠的 ZETA 代幣就可以成為節點運營者,參與驗證工作。
所以說,如果 ZetaChain 的驗證者只運行 ZetaCore 組件,它就變成排序者(sequencer),如果只運行 ZetaClinet 組件並且只負責觀察外部鏈上事件的話,它就變成觀察者(observers),如果同樣只運行 ZetaClinet 組件且只負責簽名外發交易,它就是簽名者(signers)。
ZetaChain 還集體持有標準的 ECDSA/EdDSA 密鑰,用於與外部鏈進行認證互動。這些密鑰分散在多個簽名者(signers)中,只有超級多數簽名者能夠代表 ZetaChain 對外簽名。ZetaChain 使用綁定的質押和正 / 負激勵機制來確保經濟安全。
Zetachain 的兩種跨鏈互操作機制#
Zetachain 支持兩種跨鏈互操作機制,一種就是傳統的跨鏈橋機制,另一種則是 Omnichain 智能合約機制。
跨鏈橋機制#
我們首先來看跨鏈橋機制的工作流程,整個過程主要涉及以下幾個步驟:
**1. 用戶與合約交互:** 用戶在鏈 A 的合約 C1 上進行操作,留下了一個事件或交易備忘錄,其中包含用戶指定的 [chainID, contractAddress, message]。這個消息是以二進制格式編碼的應用數據。
**2. 觀察者捕獲事件:**ZetaChain 的觀察者(在 zetaclient 中)捕捉到這個事件或備忘錄,並將其報告給 zetacore,後者負責驗證入站交易。
**3. 構建出站交易:**zetacore 修改 CCTX(跨鏈交易)狀態變量以及 OutboundTxParams,指導 TSS 簽名者(在 zetaclient 中)構建、簽名並廣播外部交易。
**4. 簽名和廣播:**zetaclient 的 TSS 簽名者根據 CCTX 中的 OutboundTxParams 構建出站交易,進行 TSS 密鑰簽名儀式,然後將簽名後的交易廣播到外部區塊鏈。
**5. 更新和追蹤狀態:**CCTX 結構還跟蹤跨鏈交易的各個階段 / 狀態。
**6. 交易確認:** 一旦廣播的交易在某個區塊鏈上被包含(即 “挖礦” 或 “確認”),zetaclient 會將此確認情況報告給 zetacore,隨後更新 CCTX 狀態。
7. 處理成功與失敗:
-
如果外部交易成功,CCTX 狀態變為 OutboundMined,CCTX 處理完成,進入終端狀態。
-
如果外部交易失敗(例如在以太坊鏈上被撤銷),CCTX 狀態更新為 PendingRevert(如果可能)或 Aborted(如果撤銷不可能)。如果進入 Aborted 狀態,則 CCTX 處理完成。
8. 處理撤銷:
-
如果新狀態為 “PendingRevert”,CCTX 中應已經包含第二個 OutboundTxParams,指導 zetaclients 創建一個返回到入站鏈和合約的 “Revert” 出站交易,允許入站合約實現應用級別的撤銷功能以清理合約狀態。
-
zetaclients 構建撤銷交易,進行 TSS 密鑰簽名儀式,並將交易廣播回入站區塊鏈(本例中的鏈 A)。
9. 撤銷確認:
-
一旦撤銷交易在鏈 A 上 “確認”,zetaclients 將交易狀態報告給 zetacore。
-
如果撤銷交易成功,CCTX 狀態變為 Reverted,並完成處理。
-
如果撤銷交易失敗,CCTX 狀態變為 Aborted,並完成處理。
通過上述步驟,我們可以看到,跨鏈消息的傳遞主要是通過 ZetaCore 和 ZetaClient 的內部通信完成,是偏中心化的方式,也並未使用 Zetachain 本身的智能合約,只是用到了目標鏈的智能合約,在這種情況下,只有目標鏈是類似於以太坊這樣的智能合約平台才可以實現,並且每一個鏈都要部署至少一個合約來達到跨鏈互操作性。如果是比特幣這樣的非智能合約平台就無法使用。另一個,應用狀態和邏輯以分佈式的方式分散在所有這些應用合約中。在不同鏈之間同步狀態和通信變得昂貴、緩慢,並且複雜化了回滾處理。為了解決上述問題,Zetachain 引入了 Omnichain 智能合約機制。
Omnichain 智能合約機制#
Omnichain 智能合約是 ZetaChain 提出的一種簡化跨鏈互操作性處理的方法。它主要通過以下步驟來處理跨鏈消息和實現跨鏈互操作:
**1. 資產的接收:** 用戶將本地資產(如 ERC20 代幣)發送到鏈 A 的 TSS 地址,同時附上一條消息指定 [zEVMContractAddress, message]。這裡的 TSS 地址可能是一個專門為了托管 ERC20 代幣而設的合約。
**2. 觀察和報告:**ZetaChain 的觀察者(zetaclients)監測到這筆即將進行的跨鏈調用,並向 zetacore 報告。
**3. 調用和執行:**zetacore 調用 SystemContract 的 depositAndCall()
函數,該函數再調用指定的 zEVMContractAddress 的 onCrossChainCall()
函數。這個調用過程中:
-
zrc20
參數將被填充為管理用戶在第一步中發送的外來代幣的 ZRC20 合約地址。 -
amount
參數將被填充為用戶發送的代幣數量。 -
message
參數將是用戶在交易備忘錄中發送的消息。
**4. 合約邏輯的執行:**omnichain 智能合約通過 zContract(zEVMContractAddress).onCrossChainCall(zrc20, amount, message)
的方式被調用。應用合約應在 onCrossChainCall()
函數中實現其業務邏輯。
5. 處理合約執行結果:
-
如果合約執行成功且沒有外部資產輸出,此次 omnichain 智能合約互動完成。
-
如果 zEVM 合約執行失敗(發生回滾),則會創建一個 CCTX 以撤銷入站交易,即將相同數量的外來代幣退回給用戶(扣除可能的費用)。
-
如果
onCrossChainCall()
有輸出(例如,它觸發了一些 ZRC20 的提款操作),則會創建另一個 CCTX 來指導和跟蹤將外來資產轉移到外部鏈上用戶指定的地址。這些提款通常是簡單的代幣轉移。
Omnichain 智能合約的顯著特點是:
-
它只部署在 zEVM 上,所有邏輯和狀態集中在一個地方,使得應用的開發和維護更為簡單。
-
它不需要在外部鏈上部署應用智能合約,因此能夠支持如比特幣這樣的非智能合約鏈。
-
由於所有的撤銷操作都由 ZetaChain 協議處理,應用合約無需處理撤銷邏輯。
一句話來描述的話,就是除了少量必要信息是 ZetaCore 和 ZetaClient 之間的內部通信外,其他跨鏈信息的處理規則都寫入了 Zetachain 本身的智能合約裡面。只要用戶向目標鏈的指定地址發送一筆帶有附加消息的轉賬,即可觸發 Zetachain 本身智能合約裡面的跨鏈操作。
更複雜的 dApp 可能更喜歡 Omnichain 智能合約,因為邏輯和狀態在一個地方,而在傳統消息傳遞中,則必須在不同鏈上廣播消息和狀態同步,這可能會導致更多的攻擊面和更多的 Gas 費用(每個消息都需要支付額外的 Gas,需要發送的消息數量會增加以保持完全狀態同步)。換句話說,對於開發人員來說,Omnichain 智能合約的行為就好像所有資產都在一個鏈上(見下圖)。
Zetachain 的簽名授權機制#
ZetaChain 的簽名授權機制依賴於先進的多方門檻簽名方案(Threshold Signature Scheme, TSS),這種方案能有效地解決單點故障問題,增強整個系統的安全性。
**1. 門檻簽名方案:**ZetaChain 使用基於多方計算(Multi-Party Computation, MPC)的 TSS,這種方案允許多個驗證者(validators)共同管理一個單一的 ECDSA/EdDSA 私鑰,但又不會讓任何單一實體或少數驗證者完全掌握私鑰。這種方式可以提供熱錢包的便捷性和冷錢包級別的安全性。
**2. 密鑰生成與分發:** 在 ZetaChain 中,私鑰是通過無需信任中介的方式生成的,並在所有驗證者之間分發。這意味著沒有任何單個驗證者或外部行為者在任何時候都能訪問完整的私鑰,從而確保了系統的安全性。
**3. 簽名過程:**ZetaChain 採用的 TSS 是無領導的,即它通過分佈式方式進行密鑰生成和簽名,這樣可以保證在密鑰生成或簽名過程中不泄露任何私密信息。為了提高效率,ZetaChain 還採用了批量簽名和並行簽名技術,以提高簽名者的吞吐量。
**4. 智能合約與資產管理:** 由於擁有 TSS 密鑰和地址,ZetaChain 能夠在連接的鏈上管理本地金庫 / 資金池,包括比特幣等非智能合約鏈。這實際上為比特幣網絡等添加了智能合約功能,使得用戶可以把資產匯集在一起,讓智能合約根據預設規則管理這些資產,如自動化市場做市商(AMM)池或借貸池等。
**5. 支持非智能合約鏈:**TSS 使得 ZetaChain 能夠支持如比特幣、狗狗幣這樣的非智能合約鏈,以及驗證多重簽名成本高昂的智能合約平台。
通過這種簽名授權機制,ZetaChain 不僅能提供強大的跨鏈功能,還能確保交易的安全性和驗證的去中心化,使其成為支持廣泛數字資產管理和操作的強有力平台。