跨鏈通訊簡要研究
- 2020 年 2 月 25 日
- 筆記
來源 | DegameLabs鏈游實驗室
責編 | Carol
出品 | 區塊鏈大本營(ID:blockchain_camp)
跨鏈技術本質上是⼀種將A鏈上的數據D(或資訊I,或消息M)安全可信地轉移到B鏈並在B鏈上產⽣預期效 果的⼀種技術。因為區塊鏈系統本來就是⼀種特殊的分散式賬簿資料庫系統,所以這個轉移的數據,最常見的就是資產的數據,如代幣餘額。
目前主流的區塊鏈跨鏈技術⽅案按照其具體的兩種架構=實現⽅式主要有:公證⼈機制、哈希鎖定、側鏈&中繼鏈、分散式私鑰控制。
⽬前最有名的跨鏈項⽬有Cosmos和Polkadot,兩者采⽤的都是基於中繼鏈的多鏈多層架構。由此可⻅,側鏈 &中繼鏈技術將會是未來跨鏈技術的主⼒。
本⽂⾸先簡要介紹跨鏈的技術原理。其中會簡要介紹公證⼈機制、哈希鎖定,詳細介紹側鏈&中繼鏈技術。然後本⽂將介紹⼏個相關的跨鏈項⽬,包括基於ETH的Plasma、基於Polkadot的達爾文網路,基於Cosmos 的IRIS。

公證人機制及哈希鎖定
跨鏈交互根據所跨越的區塊鏈底層技術平台的不同可以分為同構鏈跨鏈和異構鏈跨鏈。同構鏈之間安全機制、共識演算法、⽹絡拓撲、區塊⽣成驗證邏輯都⼀致,它們之間的跨鏈交互相對簡單。⽽異構鏈的跨鏈交互相對複雜,如Bitcoin采⽤PoW演算法⽽Fabric采⽤傳統確定性共識演算法,其區塊的組成形式和確定性保證機制均有很⼤不同,直接跨鏈交互機制不易設計。異構鏈之間的跨鏈交互⼀般需要第三⽅輔助服務輔助跨鏈交互。
跨鏈要達到安全可信必然對跨鏈機制、步驟等有⼀些要求,其中最重要的就是跨鏈事務的原⼦性。對於普通的鏈內交易來說,交易需要⽀持原⼦性——交易如果失敗則需要回滾。⽽跨鏈的交易也是如此,其失敗時要回滾涉及本次交易兩條或多條鏈的交易。
1、公證⼈機制(Notary schemes)
公證⼈也稱⻅證⼈機制,其是⼀種中介的⽅式。設區塊鏈A和B本身是不能直接進⾏互操作的,那麼他們可以 引⼊⼀個共同信任的第三⽅作為中介,由這個共同信任的中介進⾏跨鏈消息的驗證和轉發。很多時候,這個公證⼈/中介就是交易所。其優點在於⽀持異構的區塊鏈跨鏈,缺點在於有中⼼化⻛險,只能實現交換不能實現轉移。
跨鏈交易實例1
假設Alice和Bob進⾏1個BTC換50個ETH的交易:
- Alice將⾃⼰的1個BTC存⼊交易所的⽐特幣地址;Bob將⾃⼰的50個ETH存⼊交易所的以太坊地址;
- Alice在交易所上掛單:1 BTC for 50 ETH;
- Bob通過交易所完成與Alice的交易,Alice得到50 ETH,Bob得到1 BTC 這⾥會有不少的形式。⼀種是Bob掛出購買⽐特幣的單⼦,然後交易所撮合。⼀種是Bob直接看到 Alice掛出賣單,然後直接要這個賣單。
- Alice將交易所得的50 ETH提幣到⾃⼰的以太坊賬戶;Bob將交易所得的1 BTC提幣到⾃⼰的⽐特幣賬 戶;通過引⼊中介完成了Alice和Bob的BTC和ETH的交換。
通過該例⼦可以看出交易所的⽅式⽬前僅能夠⽀持資產的交換,且資產交換的原⼦性、安全性完全由中⼼化的交易所保障,故存在⼀定的中⼼化⻛險。
2、哈希鎖定(Hash-locking)
哈希鎖定的典型實現是哈希時間鎖定合約HTLC(Hashed TimeLock Contract)。哈希時間鎖定最早出現在⽐特幣的閃電⽹絡。哈希時間鎖定巧妙地采⽤了哈希鎖和時間鎖,迫使資產的接收⽅在deadline內確定收款併產 ⽣⼀種收款證明給打款⼈,否則資產會歸還給打款⼈。收款證明能夠被付款⼈⽤來獲取接收⼈區塊鏈上的等量價值的數量資產或觸發其他事件。哈希鎖定只能做到交換⽽不能做到資產或者資訊的轉移,因此其使⽤場景有限。
跨鏈交易實例2
仍以前⼀節中的交易需求為例
- Alice隨機構建⼀個字元串s,並計算出其哈希h;
- Alice將h發送給Bob;
- Alice通過合約鎖定⾃⼰的1個BTC資產,設置⼀個較⻓的鎖定時間T1, 再設置了獲取該BTC的條件:Bob 提供h的原始值s;
- Bob鎖定50ETH到⾃⼰的合約,設置⼀個相對較短的鎖定時間T2(T2 < T1)。再設置50ETH的獲取條件:Alice提供h的原始值s;
- Alice將字元串s發送到Bob的合約獲得50個ETH;
- Bob觀察到步驟5中Alice的s值,將其發送給Alice的合約成功獲取1個BTC; ⾄此完成資產的交換。
- 如果超時,則鎖定的資產返回原主。
從上述的過程可以看出哈希時間鎖定合約有⼀些約束條件:
- 雙⽅必須能夠解析雙⽅的合約內部數據,例如s,例如鎖定資產的證明等;
- 哈希鎖定的超時時間設置時需要保證存在時間差,這樣在單⽅⾯作弊時另⼀⽅可以及時撤回⾃⼰的資產。

側鏈/中繼鏈
1、側鏈的含義及意義
首先,什麼是側鏈?
根據[3],在⼀開始,主鏈特指⽐特幣主⽹區塊鏈。所以所謂側鏈就是除了⽐特幣區塊鏈以外的,任何能遵循側鏈協議並和⽐特幣互通的⼀切區塊鏈。側鏈使得⽐特幣有更好的流動性;⽽在⽐特幣主⽹上開發應⽤很困難,現在通過再側鏈上開發應⽤再使⽤互通⽅式與主鏈連接可以解決這個問題——間接使⽤了⽐特幣,進⼀步鞏固了⽐特幣的中⼼地位。
不過,現在⾃然已經不能說主鏈特指⽐特幣了。根據維基百科上的說法:「側鏈⽤來指代與主區塊鏈並⾏的那條區塊鏈。來⾃主區塊鏈的entries可以向側鏈連接,也可以被側鏈連接;這樣⼀來,側鏈就可以獨⽴於主區 塊鏈進⾏操作(例如,通過使⽤備⽤的記錄保持⽅式)。⼀個側鏈模型是驅動鏈。」
這個說法包含三個要點:
- 側鏈是相對的。我們不能單純的說某條鏈B是側鏈,⽽必須說這條鏈B可以是鏈A的側鏈;
- 側鏈與主鏈是獨⽴的。鏈B可以有⾃⼰的功能,在它⾃⼰運⾏時不需要鏈A的⽀持。如果B鏈發⽣運⾏故障或被中⼼化控制,不會直接影響到A鏈本身的運⾏(但可以間接影響,⽐如B鏈被控制後,A鏈還依舊與之交互);
- 側鏈與主鏈可以連接互通,即跨鏈。當要實現跨鏈的功能時才需要B鏈和A鏈進⾏互通。因為側鏈的互通機制是其最主要的功能,所以常常將側鏈與主鏈的互通叫做側鏈技術。⾄於側鏈本身是否包含在側鏈技 術之中,不同的項⽬有不同的看法。
其次,側鏈的意義?
從主鏈單鏈⻆度講,側鏈可以虛擬化地橫向和縱向提升主鏈的性能。所謂橫向,就是將多個側鏈與主鏈互通,將⼤部分交易放到側鏈上,然後再通過與主鏈互通實現,可以虛擬地提升主鏈的TPS。所謂縱向,就是側鏈可以有主鏈不具有的功能,通過側鏈,主鏈看上去也像是⽀持了這些功能。所謂虛擬化,就是雖然有橫 向和縱向的提升,但是主鏈本身並任何沒有變化,只是通過眾多側鏈⼩弟幫其起到類似代理的作⽤,使其看上去性能提升。
從全局⻆度講,側鏈作為跨鏈技術的⼀種,⾃然是為萬鏈互連做出了重要貢獻。實現萬鏈互聯有兩者架構:1. 任何⼀條鏈,既有主鏈的功能,⼜有側鏈的功能(⼀些資料將擁有側鏈功能叫做遵循側鏈協議),這就像電腦⽹絡中任何電腦既是主機⼜是路由器。2. 只有特定的⼏條鏈作為主鏈,其他所有鏈都只⽀持側鏈功能,就和現在的電腦⽹絡類似,有⽹絡核⼼部分——單純的路由器,也有⽹絡的邊緣部分——單純的主 機。
1.2、側鏈的技術
側鏈實現是通過雙向錨定技術。將暫時的數字貨幣在主鏈中鎖定,同時將等價的數字資產在側鏈中釋放。實現雙向錨定的最⼤難點在於協議改造需兼容現有主鏈,也就是不能對現有主鏈的⼯作造成影響。根據[2]的說法,其具體實現⽅式有:單⼀託管模式、聯盟模式、SPV模式、驅動鏈模式、混合模式。
單⼀託管模式就是類似交易所做中介完成鎖幣放幣,其實和。聯盟模式即公證⼈模式,由多個公證⼈的多重簽名來對轉移資產的交易進⾏簽名,避免了中⼼化。
SPV模式是通過將交易發給本鏈的⼀個特殊地址,由此會⾃動創建⼀個SPV證明給側鏈上並發起⼀個交易在側鏈上解鎖對應的資產。驅動鏈模式是⽤礦⼯來作為資⾦託管⽅,將資產的監管權發放到數字資產礦⼯⼿上,礦⼯進⾏投票決定何時解鎖資產及將資產發送到何⽅。混合模式就是將這些側鏈機制進⾏有效結合,對結構不同的鏈,為其使⽤最適合其結構的模式,如主鏈使⽤SPV,側鏈使⽤驅動鏈。
這⾥SPV模式是使⽤得最多的,也是最有前途的。SPV就是簡單⽀付驗證(Simplifified Payment Verifification),其能驗證交易是否存在。
BTC-Relay是號稱的史上第⼀個側鏈,其通過以太坊構建了⼀個⽐特幣的側鏈,運⽤以太坊的智慧合約允許⽤戶驗證⽐特幣的交易。
SPV交易實例
仍以之前的交易需求為例
- Bob將50ETH發送到BTCSwap的合約進⾏凍結(該合約若確認Bob接收到來⾃Alice的1BTC就⾃動將50ETH轉給Alice);
- Alice確認Bob凍結資訊後,將1BTC轉到Bob⽐特幣賬戶;
- BTC-Relay將⽐特幣區塊頭推送到BTCSwap合約;Alice將⾃⼰轉BTC給Bob的交易tx發給合約 BTCSwap合約,請求50ETH;
- BTCSwap合約結合tx和⽐特幣區塊鏈進⾏SPV驗證,驗證通過則將50ETH轉到Alice的以太坊地址。
側鏈的機制相對哈希鎖定⽽⾔能夠提供更多的跨鏈交互場景,側鏈以及類SPV驗證的思想適合所有跨鏈的場景。
2、中繼鏈
中繼鏈算是公證⼈機制和側鏈機制的融合和擴展,⽬前社區內最活躍的兩個跨鏈項⽬ Cosmos 和 Polkadot 采⽤的都是基於中繼鏈的多鏈多層架構,其中Cosmos⽬前⽀持的是跨鏈資產交互;⽽Polkadot則宣稱提供任意類型的跨鏈交互,但具體實現還有待觀察。
Cosmos的中繼鏈機制[1]
為了⽀持平⾏鏈之間的跨鏈操作,Cosmos提出了⼀種跨鏈交互協議IBC(Inter-Blockchain Communication Protocol)。
以鏈A到鏈B轉賬10token為例說明使⽤IBC的跨鏈交互:
- 互相跟蹤。如果A要和B進⾏跨鏈交易,那麼A和B鏈需要分別運⾏相當於對⽅區塊鏈的輕節點,這樣可以實時接收到對⽅的區塊頭資訊(⽅便後續執⾏類SPV驗證);鏈A、鏈B初始化IBC協議;
- 鏈A凍結10token, 並⽣成相應的證明發送給鏈B;
- 鏈B接收到相應的IBC消息,通過鏈A的區塊頭資訊確定鏈A確實進⾏相應的資產凍結,然後鏈B會⽣成等價10token的資產。
以上是使⽤IBC協議的兩個平⾏鏈直接進⾏跨鏈的基本過程,如果區塊鏈很多,那麼這種⽅式的兩兩跨鏈複雜度會呈現組合級別增加。因此Cosmos⽹絡⼜引⼊了⼀種Hub的中繼鏈,所有的平⾏鏈都通過IBC連接到Hub,讓Hub輔助跨鏈交易的驗證和資產轉移(於是乎,某鏈能與Cosmos體系中的鏈進⾏交互=某鏈能連接 到Hub)。⽬前Cosmos實現了⼀個官⽅的Hub稱為Cosmos Hub(如圖1所示)。

圖1
圖2是Cosmos⽹絡的詳細架構圖。⼀條鏈從層次結構上講,分為⽹絡層、共識層、應⽤層。為⽅便平⾏鏈 開發,Cosmos提供了tendermint core(簡稱tendermint)和Cosmos SDK(Go語⾔)。其中tendermint 是指⽹絡層、共識層的封裝,⽽Cosmos SDK是應⽤層中常⽤的模組:賬戶、治理、Staking、IBC等等的封裝[4]。因此,⾃⼰開發⼀條新鏈可以使⽤Cosmos SDK+ tendermint,並且由此開發出來的鏈能直接與 Cosmos Hub連接(Cosmos Hub⾃⼰本身也是⽤Cosmos SDK+tendermint開發的)。

圖2
⽽對於⾮Cosmos SDK開發的區塊鏈(如已經存在的這些區塊鏈),如果要與Cosmos體系中的鏈進⾏交互 (即能與Hub連接),需要使⽤Peg Zone進⾏橋接,所謂的Peg Zone就是使⽤Cosmos SDK開發的,既能 接⼊Hub的,⼜能和原鏈進⾏交互的⼀條鏈。如圖中的Ethereum,如果要接⼊Cosmos Hub,則需要專⻔使⽤Cosmos SDK開發⼀條起Peg Zone作⽤的新鏈。
所謂Cosmos 主⽹是指由 Cosmos 團隊⾃⼰開發的第⼀個官⽅版 Hub,也就是不同鏈進⾏跨鏈操作時的第⼀個中央樞紐。以太坊將是Cosmos 最先連接的⾮Cosmos SDK開發的公鏈,⽬前有兩個項⽬去實現這種連接:Cosmos 開發團隊主導的 Ethermint 項⽬,以及由 Loom Network 主導的 PlasmaChain。這兩個項⽬其實就是開發⼀個連接以太坊和Cosmos Hub的、起Peg Zone功能的⼀條鏈。
協議應該是各⽅達成共識的,在3.1、3.2⼩節中說到的「側鏈協議」其實並不是真正的協議,因為側鏈技術⽬前沒有像電腦⽹絡⼀樣有⼀些共識的協議,所以其實只能說是側鏈機制。⽽Cosmos為跨鏈帶來的最⼤貢獻 在於IBC協議的設計,IBC協議提供了⼀種通⽤的跨鏈協議標準。IBC的設計使得跨鏈交易可以在多個Hub之間進⾏安全路由和轉發,類似⽬前互聯⽹的TCP/IP 協議。但是遺憾的是⽬前的Cosmos設計也只能夠⽀持資產的跨鏈,⽽且由於不同區塊鏈的業務不同其共識速率的不⼀致也會影響跨鏈交易有效性的證明。這⾥只講了Cosmos的側鏈技術,關於Cosmos更多的內容,請看其他參考⽂獻。
Polkadot的中繼鏈機制
Polkadot的平⾯體系結構如圖3所示。其有三種鏈鏈⻆⾊和四種參與⽅。

圖3
三種鏈角色:
- 中繼鏈(Relay chain): 中繼鏈位於Polkadot的體系的核⼼地位,主要是為整個系統提供統⼀的共識和安全性保障;
- 平⾏鏈(Parachain): 在Polkadot中平⾏鏈負責具體的業務場景,平⾏鏈⾃身不具備區塊的共識,它們將共識的職責渡讓給了中繼鏈,所有平⾏鏈共享來⾃中繼鏈的安全保障,中繼鏈是Polkadot組成的⼀部分(中繼鏈有可能不是⼀條鏈[5],Polkadot對其定義是App的數據結構,因此可以是DApp甚⾄是⼀般的 App;不過⼤部分情況下還會是⼀條鏈);
- 轉接橋(Bridges):在Polkadot中轉接橋其實有三個含義[6],其中最重要的含義是:為Polkadot體系之外的區塊鏈(如Bitcoin, Ethereum)提供不同的Bridge與Polkadot連接在⼀起進⾏跨鏈交互。三種鏈⻆⾊和Cosmos體系中差不多。
四種參與方:
- 驗證者(Validator): 驗證者負責Polkadot的⽹絡出塊,會運⾏⼀個中繼鏈的客戶端,在每⼀輪區塊產⽣中會對其提名的平⾏鏈出的塊進⾏核驗。當平⾏鏈的塊都被他們的驗證者集合確定好之後,驗證者們會將所有平⾏鏈區塊頭組裝到中繼鏈的區塊並進⾏共識:
- 收集⼈(Collator),也叫核對⼈: 幫助驗證者收集、驗證和提交備選平⾏鏈區塊,維護了⼀個平⾏鏈的全節點:
- 釣⻥⼈(Fisherman):釣⻥⼈主要靠檢舉⾮法交易或者區塊以獲取收益;
- 提名⼈(Nominator):擁有stake的相關⽅,維護和負責驗證者的安全性。
圖4對這些參與⽅進⾏了圖示說明。整個過程是⾃動地、去中⼼化地執⾏。

圖4
⽤戶在平⾏鏈發起交易,交易被收集⼈收集,打包成區塊,交給⼀組驗證⼈去驗證。這組驗證⼈並不是來⾃平⾏鏈,⽽是來⾃中繼鏈統⼀管理的驗證⼈池,通過隨機分組指定給平⾏鏈。
每條平⾏鏈都有⼀個消息輸出隊列和⼀個消息輸⼊隊列。如果⽤戶發起的是跨鏈交易,交易就會被放進輸出隊列。再被⽬標平⾏鏈的收集⼈放⼊其輸⼊隊列。⽬標平⾏鏈的收集⼈執⾏交易,⽣成區塊,由驗證⼈組敲 定。
提名⼈是 Polkadot 基礎通證 DOT 的持有者,他希望質押 DOT 獲得收益。但是要麼是因為 DOT 數量少,要麼是缺少運⾏維護驗證⼈節點的專業技能。因此系統提供了另⼀個參與途徑,就是持幣者選擇他信任的驗證 ⼈,把⾃⼰的 DOT 通過驗證⼈來質押,分享驗證⼈收益。
釣魚人是個軟體進程,它監控⽹絡上的⾮法⾏為,⼀旦發現就會向區塊鏈提交舉報交易。舉報交易也要經過共識過程,通過 2/3 以上驗證⼈驗證,打包進區塊,懲罰和獎勵也都是區塊鏈交易[7]。
在Polkadot中如果Parachain A 需要發送⼀筆交易到Parachain B的過程如下:
- 鏈A將跨鏈交易放到⾃⼰的消息輸出隊列engress。
- 鏈A的Collator收集A鏈的普通交易以及跨鏈交易並提交給鏈A的驗證者集合。
- 鏈A的驗證者集合驗證成功,將本次鏈A的區塊頭資訊以及鏈A的engress內資訊提交到中繼鏈上。中繼鏈運⾏共識演算法進⾏區塊確認以及跨鏈交易路由,中繼鏈上的驗證者會將鏈A的相應交易從鏈A的 engress queue中移動到鏈B的消息輸⼊隊列ingress queue中。
- 鏈B執⾏區塊,將ingress queue中相應交易執⾏並修改⾃身賬本。
以上便是Polkadot跨鏈交易的主要步驟。Polkadot 為應⽤鏈提供的⼯具是 Substrate,⽬前⽀持 Rust 語⾔開發。

