來源 | BitLife(ID:bitlife2017)
作者 | Xiaoyi Wang
責編 | 喬治
出品 | 區塊鏈大本營(ID:blockchain_camp)
當前的區塊鏈底層技術平臺百花齊放,不同的業務、不同的技術底層的區塊鏈之間缺乏統一的互聯互通的機制,這極大限制了區塊鏈技術和應用生態的健康發展。跨鏈的需求由此而來,本文透過分析幾種主流的跨鏈方案探討跨鏈技術的本質及相應的解決思路。
跨鏈的型別
跨鏈互動根據所跨越的區塊鏈底層技術平臺的不同可以分為同構鏈跨鏈和異構鏈跨鏈:同構鏈之間安全機制、共識演算法、網路拓撲、區塊生成驗證邏輯都一致,它們之間的跨鏈互動相對簡單。而異構鏈的跨鏈互動相對複雜,比如比特幣採用PoW演算法而聯盟鏈Fabric採用傳統確定性共識演算法,其區塊的組成形式和確定性保證機制均有很大不同,直接跨鏈互動機制不易設計。異構鏈之間的跨鏈互動一般需要第三方輔助服務輔助跨鏈互動。
主流跨鏈機制概述
截至目前,主流的區塊鏈跨鏈技術方案按照其具體的實現方式主要分為三大類,分別是公證人機制、側鏈/中繼和雜湊鎖定:
公證人機制(Notaryschemes): 公證人也稱見證人機制,公證人機制本質上是一種中介的方式。具體而言,假設區塊鏈A和B本身是不能直接進行互操作的,那麼他們可以引入一個共同信任的第三方作為中介,由這個共同信任的中介進行跨鏈訊息的驗證和轉發。公證人機制的優點在於能夠靈活地支援各種不同結構的區塊鏈(前提是公證人能夠訪問相關方的鏈上資訊),缺點在於存在中心化風險。
雜湊鎖定(Hash-locking): 雜湊鎖定技術主要是支援跨鏈中的原子資產交換,最早起源自比特幣的閃電網路。其典型實現是雜湊時間鎖定合約HTLC(Hashed TimeLock Contract)。雜湊鎖定的原理是透過時間差和影藏雜湊值來達到資產的原子交換。雜湊鎖定只能做到交換而不能做到資產或者資訊的轉移,因此其使用場景有限。
側鏈/中繼鏈(Sidechains/Relays): 側鏈是指完全擁有某鏈的功能的另一條區塊鏈,側鏈可以讀取和驗證主鏈上的資訊。主鏈不知道側鏈的存在,由側鏈主動感知主鏈資訊並進行相應的動作。而中繼鏈則是側鏈和公證人機制的結合體,中繼鏈具有訪問需要和驗證進行互操作的鏈的關鍵資訊並對兩條鏈的跨鏈訊息進行轉移。從這個角度看中繼鏈也是一種去中心的公證人機制。
下面就這幾種跨鏈方式的典型實現方式進行詳細分析:
典型跨鏈機制實現分析
公證人機制
最傳統的公證人機制是基於中心化交易所得跨鏈資產交換,這種跨鏈的方式比較單一,只支援資產的交換,如下圖演示了Alice透過交易所,用比特幣和Bob交換ETH的過程。
Alice 透過交易所錢包將自己的比特幣打入交易所地址;
Alice 在交易所上掛上賣單1個BTC賣出20ETH價格;
Bob需要將自己的ETH打入交易所的以太坊地址;
Bob透過交易所掛出購買比特幣的單子 20ETH買一個比特幣;
交易所將Alice的賣單和Bob的賣單進行撮合;
交易所將Alice在交易所儲存的1BTC 轉移給Bob的比特幣地址;
交易所將Bob在交易所儲存的20ETH 轉移給Alice的以太坊地址;
至此完成了Alice和Bob的BTC和ETH的交換(案例中省去了交易所的服務費)。透過該例子可以看出交易所的方式目前僅能夠支援資產的交換,且資產交換的原子性、安全性完全由中心化的交易所保障存在較大的中心化風險。
除此之外還有一種著名的分散式賬本技術Ripple,也是採用類似公證人的機制來解決全球金融機構之間的資產交換。Ripple的系統架構如上圖所示,Ripple系統中交易透過網路中的驗證者進行交易的驗證,驗證者驗證的交易透過加密演算法保護交易內容不能被驗證著窺探從而保證交易的隱私性。
公證人機制的跨鏈技術實現簡單,且能夠比較靈活地支援不同型別的底層區塊鏈體系。公證人機制的主要問題在於公證人機制的安全性保障完全由公證人系統保障。參與跨鏈的相關方需要對中間人給予較大的信任。
雜湊鎖定
雜湊時間鎖定(HTLC)最早出現在比特幣的閃電網路,跨鏈資產交換支援一定數量的A鏈資產和一定數量的B鏈資產進行原子交換。雜湊時間鎖定巧妙地採用了雜湊鎖和時間鎖,迫使資產的接收方在deadline內確定收款併產生一種收款證明給打款人,否則資產會歸還給打款人。收款證明能夠被付款人用來獲取接收人區塊鏈上的等量價值的數量資產或觸發其他事件。
如下圖所示,我們用一個例子來闡述如何使用雜湊時間鎖定進行跨鏈的原子資產交換,假設Alice和Bob有資產交換的需求,Alice想用1個BTC和Bob換20個ETH. 那麼首先需要在兩條鏈上設定雜湊時間鎖定合約,然後執行如下步驟:
Alice 隨機構建一個字串s,並計算出其雜湊 h=hash(s);
Alice 將h傳送給Bob的合約;
Alice鎖定自己的1個BTC資產,並設定一個 較長的鎖定時間t1, 並設定了獲取該BTC的一個條件: 誰能夠提供h的原始值s就可以得到該BTC;
Bob觀察到Alice 合約中鎖定了一個BTC, 然後Bob鎖定自己的20個ETH資產,並設定一個 相對較短的鎖定時間 t2, t2 < t1, Bob也設定了同樣獲取條件(誰提供h的原始值s就可以獲取20個ETH);
Alice將自己最初生成的字串s 傳送到Bob的合約裡取得了20個ETH;
Bob觀察到步驟5中Alice的s值,將其傳送給Alice的合約成功獲取1個BTC; 至此Alice和Bob完成了資產的交換。
從上述的過程我們可以看出雜湊時間鎖定合約有一些約束條件:
進行跨鏈資產交換的雙方必須能夠解析雙方的合約內部資料,例如s,例如鎖定資產的證明等;
雜湊鎖定的超時時間設定時需要保證存在時間差,這樣在單方面作弊時另一方可以及時撤回自己的資產。
雜湊鎖定的思想運用在支付領域較多,例如閃電網路、雷電網路以及跨鏈資產轉移協議Interledger等。但是雜湊鎖定目前看只適合偏資產或者關鍵資料的交換,甚至不支援轉移因此其試用場景受限。
側鏈/中繼鏈
側鏈
側鏈是相對於主鏈而言的,最初的側鏈提出是針對比特幣做新特性的測試和研發。側鏈相對主鏈而言能夠驗證和解析主鏈中的區塊資料和賬本資料。側鏈實現的基礎技術是雙向錨定(Two-way Peg),透過雙向錨定技術可以將數字資產在主鏈上進行鎖定,同時將等價的資產在側鏈中釋放。相反當側鏈中相關資產進行鎖定時,主鏈上錨定的等價資產也可以被釋放。
BTC-Relay是號稱的史上第一個側鏈,BTC-Relay是透過以太坊構建了一個比特幣的側面,運用以太坊的智慧合約允許使用者驗證比特幣的交易。這裡我們仍然以Alice 1BTC和Bob的20ETH數字資產交換為例闡述相應原理:
Bob將20ETH傳送到BTCSwap的合約進行凍結;(該合約只要能夠確認BTC網路上Bob接收到來自Alice 1BTC就自動將20ETH轉給Alice)
Alice 確認Bob凍結資訊後,將1 BTC轉給Bob比特幣賬戶;
BTC Relayer將比特幣區塊頭推送到BTCSwap合約;
Alice 接下來就可以呼叫relay tx;
BTCSwap合約結合tx和BTC鏈的區塊鏈進行SPV驗證,驗證透過則將20ETH轉給Alice以太坊地址。
這種跨鏈的實現方式簡單,但是BTC Relay需要額外的信任和維護成本,且智慧合約內部的資料儲存會有體積膨脹的問題。但是側鏈的機制相對雜湊鎖定而言能夠提供更多的跨鏈互動場景,側鏈以及類SPV驗證的思想適合所有跨鏈的場景。
中繼鏈
中繼鏈本質上算是公證人機制和側鏈機制的融合和擴充套件,目前社羣內最活躍的兩個跨鏈專案 Cosmos 和 Polkadot 採用的都是基於中繼鏈的多鏈多層架構,其中 Cosmos目前支援的是跨鏈資產互動,而 Polkadot則宣稱提供任意型別的跨鏈互動,具體實現還有待觀察。
Cosmos網路是一個多鏈混合的區塊鏈網格結構,如下圖所示,該網路中主要包括兩種角色: Hub: 用於處理跨鏈互動的中繼鏈; Zone: Cosmos中的平行鏈, Cosmos中平行鏈需要具備兩個前提條件:
快速確定性(fast finality), 這個特性由共識演算法保障,也就是說Cosmos的跨鏈不直接支援PoW等概率確定模型的區塊鏈;
強監管性(Sovereignty):每個平行鏈都具有一組驗證者能夠決定其出塊。
為了支援平行鏈之間的跨鏈互操作,Cosmos提出了一種跨鏈互動協議IBC(Inter-Blockchain Communication protocol), 並利用tendermint共識演算法的即時確定性實現多個異構鏈之間的價值和資料傳輸。
首先我們以 Chain A 到 Chain B 轉賬 10 token 為例說明使用 IBC 的跨鏈互動:
互相跟蹤,也就是說如果A要和B進行跨鏈交易,那麼A和B鏈需要分別執行相當於對方區塊鏈的輕節點服務,這樣互相可以實時接收到對方的區塊頭資訊(方便後續執行類SPV驗證);
A鏈上初始化IBC協議,凍結相關資產10 token, 並生成相應的證明傳送給B區塊鏈;
B連結收到相應的IBC訊息,透過A鏈的區塊頭資訊確定A確實進行相應的資產凍結,然後B鏈會生成等價值10 token的資產。
以上是使用IBC協議的兩個平行鏈直接進行跨鏈的基本過程,如果區塊鏈很多,那麼這種方式的兩兩跨鏈複雜度會呈現組合級別增加。因此Cosmos網路又引入了一種Hub的中繼鏈,所有的平行鏈都透過IBC連線到Hub,讓Hub輔助跨鏈交易的驗證和轉移,目前Cosmos實現了一個官方的Hub稱為Cosmos Hub(如前圖所示)。
如下圖所示是Cosmos 網路的詳細架構圖,Cosmos為方便平行鏈開發提供了基本服務CosmosSDK包括:共識、網路以及IBC協議等,這樣基於Cosmos SDK開發的子鏈之間都能夠方便地互相互動。此外對於非Cosmos SDK 開發的區塊鏈需要使用Peg Zone進行橋接,如圖中的Ethereum。
筆者認為Cosmos為跨鏈帶來的最大貢獻在於IBC協議的設計,IBC協議提供了一種通用的跨鏈協議標準。IBC的設計使得跨鏈交易可以在多個Hub之間進行安全路由和轉發,類似目前網際網路的TCP/IP 協議。但是遺憾的是目前的Cosmos設計也只能夠支援資產的跨鏈,而且由於不同區塊鏈的業務不同其共識速率的不一致也會影響跨鏈交易有效性的證明。
Polkadot也是一種整合平行鏈和中繼鏈的多層多鏈架構,Polkadot區塊鏈的整體架構圖如下圖所示,主要包含三種角色鏈和四種參與方:
三種鏈角色:
中繼鏈(Relay chain): 中繼鏈位於Polkadot的體系的核心地位,主要是為整個系統提供統一的共識和安全性保障;
平行鏈(Parachain): 在Polkadot中平行鏈負責具體的業務場景,平行鏈自身不具備區塊的共識,它們將共識的職責渡讓給了中繼鏈,所有平行鏈共享來自中繼鏈的安全保障,中繼鏈是Polkadot組成的一部分;
橋接鏈:橋接鏈指的是非Polkadot體系之外的區塊鏈,如Bitcoin, Ethereum, 這些區塊鏈有自身的共識演算法,它們透過不同的Bridge與Polkadot連線在一起進行跨鏈互動。
四種參與方:
驗證者(Validator): 驗證者負責Polkadot的網路出塊,會執行一箇中繼鏈的客戶端,在每一輪區塊產生中會對其提名的平行鏈出的塊進行核驗。當平行鏈的跨都被他們的子驗證者集合確定好之後,驗證者們會將所有平行鏈區塊頭組裝到中繼鏈的區塊並進行共識。
核驗人(Collator): 幫助驗證者收集、驗證和提交備選平行鏈區塊,維護了一個平行鏈的全節點。
釣魚人(Fisherman):釣魚人主要靠檢舉非法交易或者區塊以獲取收益;
提名人(Nominator): 擁有stake的相關方,維護和負責驗證者的安全性。
Polkadot的特性包括兩個,一個是共享安全性,一個是不需信任的跨鏈互動。這裡的不需信任的跨鏈互動其實是和第一個特點共享安全性密切相關的,而且Polkadot的不需信任的跨鏈互動也主要是隻其內部的平行鏈之間。
在Polkadot中如果parachain A 需要傳送一筆交易到parachain B的過程如下:
A鏈將跨鏈交易放到自己的engress(每個平行鏈有一個訊息輸出佇列engress 和一個訊息輸入佇列ingress);
A鏈的Collator收集A鏈的普通交易以及跨鏈交易並提交給A鏈的驗證者集合;
A鏈的驗證者集合驗證成功,將本次A鏈的區塊頭資訊以及A鏈的engress內資訊提交到中繼鏈上;
中繼鏈執行共識演算法進行區塊確認以及跨鏈交易路由,中繼鏈上的驗證者會將A鏈的相應交易從A鏈的engress queue中移動到B鏈的ingress queue中。
B鏈執行區塊,將ingress queue中相應交易執行並修改自身賬本。
以上便是Polkadot跨鏈交易的主要步驟,由於所有平行鏈的共識同步發生(中繼鏈區塊示意圖如下),因此跨鏈交易不會有諸如雙花等安全性問題。
Polkadot 的平行鏈之間的跨鏈交換的安全性保障主要來自共享安全性這個特點,共享安全性使得跨鏈交易和普通交易同步發生也就不存在其他跨鏈場景中的雙花等跨鏈資料不一致問題。其次Polkadot中的引入的特殊狀態驗證方法方便中繼鏈進行跨鏈等訊息的有效性驗證。
值得一提的是Polkadot專案目前還處在專案初期,對於parachain的設計、Collator的協作以及Validator的共識、工作效率等都未完善。這種共享安全性的方式是否也限制了平行鏈自身的效能都還有待考證。
關於跨鏈技術的幾點思考
綜合以上的一些主流跨鏈場景和方案的分析,從跨鏈的概念以及需求上看跨鏈的本質其實就是 如何將A鏈上的訊息M安全可信地轉移到B鏈並在B鏈上產生預期效果。那麼一個成功的跨鏈互動到底需要解決哪些問題呢?筆者認為主要有以下四個問題:
訊息M的真實性證明,也就是說M是否確實是存在A鏈上的,也確實是A鏈發給B鏈的;
訊息M的路由,如何讓跨鏈訊息安全跨系統路由;
訊息M的有效性證明,這裡的有效性是指來自A鏈的訊息M如何讓B鏈認可其抵達B鏈時狀態仍然有效,比如轉移的資產是否是凍結的,沒有雙花的,如果是狀態那麼是否在此期間未發生改變等;
訊息M的執行結果證明,這個是指A鏈需要確認跨鏈操作是否成功,以及成功操作的相應回執。
那麼針對這些關鍵本質問題,如何去處理呢?筆者設想未來的區塊鏈應該在底層平臺的設計之初就需要遵循統一的跨鏈協議標準,就像現在的作業系統對TCP/IP協議的支援一樣。需要進行通用跨鏈的區塊鏈至少要支援一下功能:
提供跨鏈訊息的輸入和輸出口徑,例如Cosmos和Polkadot的跨鏈佇列;
提供跨鏈訊息的真實性證明,區塊鏈需要提供類似SPV的證明手段;
訊息的有效路由需要構建跨鏈訊息的統一格式,定義好訊息的來源和去處以及訊息內容,如Cosmos的IBC協議;
訊息的有效性證明,區塊鏈可能需要設計新的類似UTXO的可驗證儲存結構,方便做類SPV類驗證,否則目前的基於KV的資料儲存方式做有效性證明幾乎不可能;
跨鏈執行結果證明,和有效性證明類似,需要全新的資料結構和執行演算法支援。
除此之外,跨鏈系統的設計還需要考慮系統穩定性、可擴充套件性以及易升級性、容錯等等,總而言之,真正的可信網際網路建設艱辛漫長,諸君共勉!