隨著公鍊和layer2鏈的數量越來越多,資產和Dapp的跨鏈需求也開始增多,跨鏈橋自然是一種比較常見的解決方案,但以Zetachain為代表的Omnichain走出了一條完全不同的道路,本文將以Zetachain為例,解釋Omminchain是如何把跨鏈規則寫入智能合約從而實現跨鏈互通的去中心化的。
幾種跨鏈技術方案
跨鏈(Cross-Chain)技術的核心目標是實現不同區塊鏈之間的互通性(Interoperability)。互通性是指不同的區塊鏈系統能夠相互理解和使用對方的資產(如代幣、加密貨幣等)和數據,或在不同的區塊鏈平台上運行的應用程式能夠相互互動和協作。這一目標的實現,可以大大增強區塊鏈生態系統的靈活性和擴展性,打破不同區塊鏈平台之間的孤島效應,從而促進更廣泛的應用和發展。
根據跨鏈訊息的處理方式以及對應資產的簽章授權方式的不同,可以分為以下幾個技術方案:
1. 跨鏈橋(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 不僅能提供強大的跨鏈功能,還能確保交易的安全性和驗證的去中心化,使其成為支援廣泛數位資產管理和操作的強大平台。