將孤島連成大陸:跨鏈技術及應用形態全景圖
本篇為全篇的第一部分,約14000字,建議閱讀時間35分鐘;全篇共四部分,將陸續發布。
前言
跨鏈技術被認為是區塊鏈領域的聖杯,是實現萬鏈互通的關鍵技術。人們往往將其重要性和互聯網的TCP/IP進行類比。正是因為 TCP/IP協議簇 提供了點對點鏈接的機制,將資料應該如何封裝、尋址、傳輸、路由以及在目的地如何接收,都加以標准化,才使得全球的終端連成了一張網,演變成了我們今天所稱的互聯網。
隨着區塊鏈行業的迅猛發展,各類公鏈,許可鏈不斷湧現,百花齊放。然而,絕大多數鏈與鏈之間由於技術、生態、競爭等原因無法連接互通,這帶來了用戶、資產、應用、數據的割裂,形成了「孤島效應」。從根本上講,形成這種局面的原因主要是:用戶需求的多樣化和區塊鏈擴展性的限制。
為了將孤島連成大陸,業界對跨鏈技術展开了積極的探索。本文將對當前跨鏈的主要技術形態進行闡述和分析,並對當前致力於解決跨鏈問題的典型區塊鏈項目進行舉例。關於跨鏈的研究報告已經有很多,但本文會在前人的研究基礎上,力求做到深入技術本質,辨析易混淆概念,把握脈絡框架,囊括最新進展。
跨鏈究竟要跨什么?
通證交換
每條區塊鏈上都有自己的原生通證。通證因其封裝了某種權益,而成為價值的載體。鏈內的通證可以進行可信的交換,然而鏈間的通證交換卻“隔鏈如隔山”。只有實現鏈間通證的可信交換,才能實現區塊鏈作為“價值互聯網”的重要作用。
目前通過中心化交易所可以實現跨鏈通證交換,例如將BTC充值到交易所,換成ETH之後,再提現到ETH錢包。但人們不滿足於中心化的方案,希望能夠直接在鏈上進行可信交換,例如用戶A想要用BTC,交換用戶B持有的ETH,這個過程會有個問題,如果兩人約定了交易,但A進行了轉账後,B食言而肥怎么辦?這就需要用到跨鏈技術,通過系統的撮合,讓兩筆轉账能夠同步進行。基於哈希時間鎖的原子交換,是實現這一場景的典型技術。
通證傳遞
通證傳遞是指,一條鏈上的原生資產,流通到另外的鏈上。這是無法直接實現的,任何通證都只能依附於其宿主鏈。一般而言,通證傳遞是靠在源鏈上鎖定原生資產,同時在目標鏈上發行等量模擬原生資產的錨定資產來實現的。如何保證這一過程的安全可靠,是跨鏈技術的一大挑战。
通證傳遞和通證交換,都可以解決鏈間價值交換的問題,但這兩者不完全是一回事。如果A想用1個BTC交換B的10個ETH,這個過程只需實現通證交換,但如果A想要將這1個BTC拿到以太坊上使用,則需要通證傳遞。通證傳遞除了解決價值交換的問題,還有額外的效用。我們可以通過通證傳遞,實現鏈A上的資產參與鏈B上的DeFi應用,構建一個更普惠的开放金融,也可以將通證從一個昂貴的鏈,轉移到一個經濟鏈,節省交易費用,或者從一個緩慢的鏈轉移到快速的鏈,實現擴容,亦或者,從一個非隱私鏈,轉移到一個隱私鏈,實現交易隱私。可以說,通證傳遞能解決的問題,是通證交換所能解決的問題的超集。
信息傳遞
完全意義上的跨鏈其實應該能讓鏈間的任何消息進行可靠的傳遞。任何跨鏈事務本質上都是一連串跨鏈消息傳遞組合而成的,例如,通證傳遞作為一類跨鏈事務,是由兩次跨鏈消息傳遞組成的,先後是:
源鏈鎖倉通證,並將鎖倉的消息及其證明,傳遞給目標鏈;
目標鏈接收到信息,驗證其真實性之後鑄造映射通證,並將回執發送回源鏈。
因此,我們可以說,跨鏈信息傳遞包含了跨鏈通證傳遞。跨鏈信息傳遞所解決的問題是跨鏈通證傳遞的超集。
通過跨鏈信息傳遞,一條鏈可以讀取和驗證另外一條鏈的狀態和信息,一條鏈的智能合約可以將其他鏈的某個狀態和信息作為執行的觸發條件。因此,通過跨鏈信息傳遞,可以實現豐富的跨鏈功能,例如跨鏈借貸,跨鏈衆籌,跨鏈支付,跨鏈衍生品,跨鏈DAO等。如果區塊鏈間能夠靈活調用彼此功能,使用彼此的服務,那么鏈與鏈將組合成一個巨大的服務協同網絡,實現我們預期的萬鏈互聯的狀態。
跨鏈技術概覽
現在的跨鏈技術形態,有些只是實現了通證交換,例如哈希時間鎖和跨鏈DEX;有些則通過建立一組鏈上角色來轉發消息,驗證狀態,有些是提出了一套通信協議, 實現區塊鏈間的通信;有些是提出了新的系統架構和造鏈協議, 支持更多區塊鏈的接入。
由於鏈和鏈之間互相獨立,無法建立直接連接,鏈之間無法直接感知對方狀態變更。因此需要搭建通信橋梁。在通信橋梁選擇上,通常來說分為五大類技術形態,分別是基於哈希時間鎖的原子交換,見證人,輕節點側鏈,中繼鏈,共享驗證人,在3.1-3.5小節將展开敘述:
基於哈希時間鎖的原子交換
哈希時間鎖是一套密碼學方法,該方法可以實現去信任的跨鏈資產交易。比如我用的1個BTC和你的10個ETH交易,就可以通過哈希鎖來實現交易的原子性。其原理大致如下:
用戶A生成隨機密碼r , 並計算出 r 的哈希值 m=hash(r) ,將m值發給用戶B;
與此同時,用戶A發起一筆交易,向用戶B轉1 BTC,該交易的成功是有條件的,須用戶B出示密碼 r 才能成功,否則超過預設的時間,交易將自動失敗;
用戶B看到A發起的交易之後,也發起一筆交易,向用戶A轉移10個ETH,該交易的成功也是有條件的,需要用戶A出示r才能成功,超過預設時間,交易也將自動失敗。這裏的關鍵是,用戶B創建這樣一個以出示 r 值 為成功條件的交易,並不需要拿到密碼r的值,只需要知道m值即可創建,而我們知道,哈希運算是不可逆的,知道m無法推算出 r ;
用戶A看到B發起的交易之後,出示r值,使得B發起的交易成功,獲得B轉账的10個ETH,r值被披露;
用戶B在上個步驟中也拿到了A出示的r值,使得A發起的交易成功,獲得A轉账的1個BTC。
通過以上機制,在兩條不同鏈上的交易,被耦合為一個事件,只能整體成功,或者整體失敗,不會出現A給B的轉账成功,而B給A的轉账失敗的情況,反之亦然。
這種機制的實現,依賴於兩個技術,那就是 「條件成功交易」和「條件失敗交易」,在以上案例中,交易成功的觸發條件是出示哈希原像r,交易失敗的條件則是超過預設時間未出示哈希原像 r ,我們也可以分別稱為哈希鎖和時間鎖。
在BTC中,可以通過CLTV操作碼或CSV操作碼來實現哈希時間鎖,在以太坊等圖靈完備的鏈上,則可以通過智能合約來實現哈希時間鎖。事實上,智能合約可以實現遠比哈希時間鎖更多元、更復雜的條件成功交易和條件失敗交易。
我們可以看到,哈希時間鎖實現了跨鏈雙方去中介的原子交易,無需任何信任假設。同時,我們也意識到,這種交易方式在用戶體驗上並不友好,主要體現為以下三方面:
交易雙方必須同時在线,嚴格執行參與流程,因此,交易發起方,如果無法找到一個在线的交易對手方,則必須等待。
對於BTC,創建帶有哈希時間鎖的交易,在底層是通過創建兩筆交易完成的,由於底層機制比較復雜,在前文所述的交易過程中被簡化表述為了一筆交易。如果交易成功,兩筆交易都要上鏈,需要多付手續費。
實際交易中,會存在匯率問題,交易對手方可以根據匯率是否有利於自己來選擇是否完成交易。尤其在金額較大時,交易對手方有很強的動力這么做,這導致原子交易可能不適用於大額交易。
另外,在跨鏈的實現程度上,哈希時間鎖有其局限性,只能實現跨鏈的通證原子交換,無法實現通證傳遞及更廣泛的跨鏈信息傳遞,因此在實際跨鏈應用中,往往和其他跨鏈技術組合使用。
見證人
見證人,英文為Notary,有時也被譯為公證人,是為傳遞跨鏈信息,托管跨鏈資產而設置的一個特殊角色。2012年Ripple發布了InterLedge Protocol(ILP),首次通過第三方見證人的方式實現了跨鏈轉账,在此之後,見證人機制陸續被應用在以BTC錨定資產為主的諸多跨鏈項目中。
不同的跨鏈項目對見證人有不同的設定:見證人可能是單個主體,但大多數情況下是多個主體;見證人的產生方式可能是許可式的,也可能是自由准入的;為了實現資產跨鏈,見證人將不得不管理一個托管账戶,管理托管账戶的方法可能是獨立控制或是多方控制;用戶對見證人的信任基礎,可能來源於見證人自身的信用,也可能來源於見證人做了超額抵押。
-
見證人產生方式
最簡單的方式是組建一個許可式的見證人組,成員基本固定,成員的加入與退出,則由當前成員審核表決。這種方式是相對中心化的,比較去中心化的方式是自由准入的方式,任何主體,只需符合既定的條件,例如抵押相應資產,即可成為見證人。自由准入帶來了額外的風險敞口,可能帶來惡意見證人,產生串通作惡的風險。因此,有的跨鏈協議選擇加入一個隨機抽取機制:每次的操作,不是由所有見證人籤名,而是從符合條件的見證人集中隨機抽取一組見證人,如此一來,可以增加見證人串通作惡的成本。
-
用戶對見證人的信任基礎
見證人可以通過超額抵押來獲取信任,這意味着見證人抵押的價值,必須大於托管的账戶資產價值,如果托管的資產發生損失,用戶將從抵押金中獲得賠償。超額抵押使得用戶托管的資產具有極高的安全性,但是超額抵押給見證人帶來了資金成本,見證人的資金成本將轉化為高昂的跨鏈手續費用。
見證人也可以靠自己的商譽來背書,盡管含有信任假設,但其優勢是跨鏈費用低廉,甚至可以做到免費,因此還是吸引了大批用戶。
-
資產托管方式:獨立控制地址與多方控制地址
見證人可能各自控制一個獨立控制地址,形成托管地址矩陣,來承接用戶的托管委托。需要注意的是獨立控制地址不一定是單籤名地址,見證人出於安全考慮,可能會採用多籤和私鑰分片技術來管理獨立控制地址,例如,某個見證人在鏈下是一家人數衆多的公司,該見證人的地址有可能會由公司的多名高管或股東通過多籤和私鑰分片共同管理。然而,不管使用什么技術來管理地址,只要是由單個主體控制的地址,我們都稱為獨立控制地址。
更多的情況下,托管地址是由多方共同控制的地址。有可能是所有見證人共同管理一個地址,也有可能是將見證人分組,每個組共同管理一個地址。這種情況則必須用到多籤或者私鑰分片這樣的多方控制技術。
多籤
多籤,或稱多重籤名,英文為Muti-Sig,是由多個私鑰共同控制一個账戶的技術,多籤技術可以實現一個地址必須由M-of-N個籤名人籤名才能轉账,1≤M≤N。
在BTC中,多籤地址是P2SH類型的地址,普通BTC地址是由公鑰哈希後得到的,而多籤地址則是基於腳本哈希。該類地址對N值有一個限制,N≤15;在以太坊等具有圖靈完備性的區塊鏈中,則可以通過智能合約來實現多籤地址,N值也可以無限大。
私鑰分片
私鑰分片技術,也稱分布式密鑰技術,是一個具有更高理論安全度的多方控制技術,該技術脫胎於圖靈獎獲得者姚期智先生提出的安全多方計算(sMPC,Secure Muti-Party Computation),結合門限技術(TSS),也可以實現M-of-N 籤名管理。該技術支持將一個账戶的私鑰拆分成若幹個碎片,分配給多個籤名人,當已籤名的碎片私鑰數達到閾值時,即可對账戶資產進行操作。具體實現上,私鑰分片有多種技術實現方式,涉及到復雜的密碼學知識,本文不展开。
私鑰分片之所以更加安全,是因為分片是不斷刷新的,也就是每隔一段時間,分片會重新進行,給到每個人的碎片會產生變化。惡意者如果想要通過獲取所有人的分片來盜取資產,必須獲取到不同籤名人在同一個時間單元裏的私鑰,否則驢脣不對馬嘴,無法合成完整私鑰。
籤名人組成員管理
無論是多籤還是私鑰分片,籤名人組都不可能是一個成員始終固定的群組,所以會涉及到籤名人組的成員增減。在私鑰分片技術中,只需要重新分片,把碎片分發給增減後產生的新籤名人組即可。在多籤技術中,則分為兩種情況:
在以太坊等圖靈完備的區塊鏈上,可以通過智能合約編程來設置籤名人組成員管理規則,例如超過2/3的現有籤名人籤名同意,即可批准新的籤名人的加入,或者批准剔除某個老的籤名人。
在BTC上,則無法對一個P2SH多籤地址的籤名人組成員進行編輯,如果某個籤名人的私鑰泄露或者需要退出,只能重新創建一個新的P2SH多籤地址,將資產轉到新的地址裏。
向去中心化方向改進整體上,見證人模式是一種相對容易實現,且通用性強,適配成本低的跨鏈方式。見證人模式的最初版本是相對中心化的,但人們不滿足於此,於是通過各種方法對其進行了改進,使其具有去中心化的特性,例如使用更加去中心化的見證人准入機制和分組機制,使用更加分布式的資產托管地址等。由此,產生了各種各樣的改進方案。這些改進方案在實現去中心化的同時,也帶來了一定的復雜性。
輕節點式側鏈
側鏈的產生,源於人們對於BTC擴容的努力。2014年10月,BlockStream團隊發布了《側鏈白皮書》,首次提出了“錨定”式跨鏈方案。錨定(Pegged),有時被翻譯為“楔入”,表達的是被錨定鏈對錨定鏈的可讀狀態,這種狀態也被稱為“錨定鏈是被錨定鏈的側鏈”。人們最早希望通過將BTC的交易從BTC主鏈,轉移到側鏈上,來降低BTC主鏈的壓力,2016年由RootStock團隊开發的RSK被認為是BTC最早的側鏈。側鏈技術的本質是通過在側鏈上融合主鏈輕節點來實現主鏈對側鏈可讀。該技術稍加轉化,即可被應用於跨鏈,我們只需在目標鏈上部署源鏈的輕節點合約,即可將目標鏈改造為源鏈的側鏈,實現由源鏈到目標鏈的單向跨鏈。
所謂輕節點,是指一個體積較小的,只存儲區塊頭信息的節點。輕節點並不存儲鏈上的全部交易,但是可以通過區塊頭信息,驗證某個交易是否存在於鏈上。輕節點合約則是包含了輕節點的智能合約。通過在目標鏈部署源鏈的輕節點合約,即可實現對源鏈來的消息進行真實性驗證。其過程大致如下:
當源鏈A有請求傳遞一筆跨鏈交易信息給目標鏈B時,交易發起者將該交易的明細內容、區塊高度、以及該交易SPV證明(指該交易的Mekre路徑)一並提交到B鏈;
部署在B鏈上的A鏈輕節點合約,通過SPV證明,重新計算該交易所在區塊的區塊頭哈希值;
得到的哈希值與輕節點中對應的區塊頭哈希值進行比較,如果一致,則表明該交易確實發生在該區塊中,若不一致,則說明該交易並不存在於該區塊。
盡管任何人都可以向目標鏈提交交易明細及其SPV證明,但實際跨鏈應用中,往往會有專門的角色來做這件事,而不是交易發起者來做。我們在本文中,我們稱該角色為Relayer(中繼者)。Relayer除了要負責幫助用戶傳遞跨鏈消息,還需要負責將源鏈的區塊頭傳遞到目標鏈,以建立輕節點合約。
Relayer和見證人一樣,都是為傳遞跨鏈消息而設的一個特定角色,但Relayer和見證人有兩點不同:
Relayer不負責托管資產,如果採用側鏈機制來實現跨鏈,跨鏈過程中鎖倉的通證會被托管到一個特定的托管合約中。
對於Relayer的信任假設,相比見證人而言更為寬松。我們必須相信大多數的見證人都是誠實的,但衆多的Relayers只要至少有一個是誠實的,我們就可以相信跨鏈消息傳遞是可靠的。這點我們將在3.3.3小節進一步論述。
不同跨鏈項目中對Relayer的稱呼不同。有些項目中,Realyer的角色被拆分,負責傳遞區塊頭的Relayer(Head Relayer)和負責傳遞交易消息的Relayer(Message Relayer)被定義為兩種角色。有些項目中不存在一個專門的Relayer角色,Relayer的職能被合並入了其他角色,例如由源鏈的驗證人直接承擔Relayer的角色。不過,萬變不離其宗,輕節點式側鏈方案的技術本質始終是:Relayer將源鏈的區塊頭傳輸到目標鏈,建立輕節點,然後Relayer從源鏈搬運交易信息到目標鏈時,用輕節點上的區塊頭信息驗證交易信息的正確性。
-
雙向錨定
我們需要理解的是,主鏈和側鏈的關系是相對的,兩條鏈可以互為側鏈。我們在前文中提到的“源鏈”和“目標鏈”也是相對概念,在一個跨鏈消息傳遞事件中,消息的源起方往往被稱為源鏈,消息的接收方則被稱為目標鏈。
跨鏈雙方通過互埋對方輕節點,即可實現互相讀取對方鏈上的信息,互聯互通,這種形態被稱為雙向錨定(Two-Way-Pegging),這種形態下,兩條鏈成為了彼此的側鏈。兩個方向都有Relayer組負責向對方傳遞信息,當然,兩組Relayer(B→A Relayer & A→B Reayer)也有可能是同一批人,被合並為同一個角色,兼負責雙向的信息傳遞。
-
側鏈與子鏈
談到側鏈,有必要和另外一個容易混淆的概念做一下辨析,那就是子鏈。子鏈沒有自己的共識機制和原生通證,其安全性完全依托於主鏈,具有單向性。而側鏈本身是一條獨立運行的區塊鏈,側鏈與主鏈的關系,是相對概念,具有雙向性。
以太坊的擴容鏈,有些是側鏈形態,有些則是子鏈形態。採用Plasma方法和側鏈方法的擴容鏈是以太坊的側鏈(Plasma側鏈是另一種側鏈形式,不是輕節點式側鏈),而採用狀態通道和Rollup方法的擴容鏈,則是以太坊的子鏈。
子鏈通過將交易從主鏈挪到子鏈進行,並定期向主鏈同步最終狀態來實現對主鏈性能的擴容,所以,子鏈也被稱為「提交鏈」,提交鏈的叫法比子鏈的叫法更貼近其技術本質。
子鏈的目的是為了擴容,擴容的本質是節省主鏈的資源,因此主鏈不會花費計算資源對子鏈提交的交易進行驗證。子鏈自身需要一個機制在提交時證明其所提交內容的真實性。其中,狀態通道,Optimistic Rollup,Arbitrum Rollup採用欺詐證明的方式來證明,而Zk Rollup,Validium則採用零知識證明的方式生成有效性證明。
子鏈和主鏈之間,這種單向的信息提交式互動,在有些文獻中,也被認為是跨鏈技術的一種形態,但Paka Labs認為,盡管側鏈和子鏈都誕生於對區塊鏈擴容的努力,但子鏈相關的技術只能用於創建擴容鏈,無法應用於兩條獨立區塊鏈之間的跨鏈,不應歸類為跨鏈技術。
-
輕節點側鏈的優越性
如果說見證人機制重在Trust(信任),那么輕節點側鏈技術則重在Verify(驗證)! 通過區塊頭驗證交易信息,其可靠性是在密碼學上被保障的,交易是否存在,一驗即知,確定無疑。
Relayers傳遞的區塊頭也不可能造假,因為輕節點合約可以像全節點一樣,對區塊進行嚴格的驗證,虛假的區塊頭無法通過驗證。輕節點的驗證程序和源鏈網絡中的礦工節點驗證程序是完全相同的,以BTC為例,需要經過以下步驟驗證:
區塊的數據結構語法上有效;
驗證工作量證明,區塊頭的哈希值小於目標難度(確認包含足夠的工作量證明);
區塊時間戳早於驗證時刻未來兩個小時(允許時間錯誤);
驗證區塊大小在長度限制之內,即看區塊大小是否在設定範圍之內;
第一個交易(且只有第一個)是coinbase交易,即一個區塊,礦工只能給自己獎勵一次;
驗證區塊內的交易並確保它們的有效性:驗證MerkleRoot是否是由區塊體中的交易得到的,即重構區塊Merkle樹得到的樹根,看是否和區塊頭中的hashMerkleRoot值相等。
惡意的Relayers如果串通作惡,唯一可行的方法是傳遞一個分叉鏈上的區塊的區塊頭,但對於一個健康的網絡,分叉鏈最終不會成為最長鏈,輕節點合約只需等待足夠多個區塊的確認即可(對於BTC輕節點,等待6個區塊即可)。對於BFT類的鏈,輕節點合約只需驗證區塊的籤名數即可知區塊是否具備最終性。
只有源鏈或者目標鏈的本身出現重組,才會影響到輕節點合約的安全性。Relayer能夠給網絡造成的危害最多止於集體罷工,讓網絡停止服務。
此外,Relayer不負責管理托管資產,惡意的Relayer無法像惡意的見證人那樣,有盜取托管資產的可能。因跨鏈而鎖定的資產托管在合約中,合約中托管的資產,如果合約代碼沒有問題,其安全性就是合約所在鏈級別的。
由於Relayer作惡的條件苛刻,且危害性較小,輕節點式側鏈中的Relayer並不需要像見證人那樣做超額抵押。可以用更小的代價實現更多的跨鏈錨定資產發行。
由此可見,輕節點側鏈方案,在跨鏈的成本上和安全性上,比見證人方案更有優勢,是實現兩條鏈之間跨鏈優先要採用的技術方案。但是有的鏈不支持智能合約,無法部署輕節點合約和托管合約,這種情況,只能退而求其次,採用見證人方案。
-
輕節點技術的發展:“瘦身”與“減負”
我們知道BTC的區塊大小為1M,其區塊頭只有80byte,直到本文發布的時間,BTC的歷史區塊頭大小也尚未超過60M(高度約69萬),但誕生較晚的以太坊的歷史區塊頭加起來已經超過了5個G(高度約1300萬),隨着區塊鏈的多元化發展,部分新興區塊鏈更側重於高TPS,出塊速度極快,其歷史區塊頭的體積將可能很快超過以太坊。
這樣的趨勢,給輕節點式側鏈帶來了挑战,主要體現在兩方面:
較大的區塊頭,將使得輕節點合約變得笨重,佔用目標鏈的巨大存儲空間;
源鏈較快的出塊速度,將導致輕節點合約需要頻繁的同步和驗證新區塊。
這兩者,都將造成輕節點合約在目標鏈上巨大的Gas消耗,嚴重時會使得採用輕節點側鏈技術實現跨鏈變得不具備經濟可行性。
怎么辦?回到見證人方案嗎?但輕節點式側鏈技術的優越性如此誘人,我們還是希望繼續使用它。有沒有辦法讓輕節點合約在不喪失其SPV驗證能力的前提下,對其進行改造和擴容?
區塊鏈行業的研究者們在兩個方向上對輕節點側鏈技術做了改進。首先是對輕節點合約進行“瘦身”,使其體積變得更小,且不隨區塊增加而线性增長,其次是對輕節點合約進行“減負”,將區塊驗證環節挪到鏈下,讓輕節點合約只做交易的SPV驗證。
輕節點合約的“瘦身”
我們需要了解一個新的協議,名為“FlyClient”,該協議由斯坦福大學的Benedikt Bunz等人在論文《FlyClient: Super-Light Clients for Cryptocurrencies》中提出的一種新型輕節點協議。Flyclient輕節點不需要存儲所有的區塊頭,而是只需存儲最新的區塊頭。通過最新的區塊頭,即可隨時“恢復”所有的歷史區塊頭。該功能是通過一種叫“默克爾山脈”的密碼學算法實現的。
默克爾山脈(Merkle Mountain Range)簡稱MMR,是默克爾樹(Merke Tree)的一種變體,我們將一條區塊鏈的所有歷史區塊的哈希值作為葉子節點,通過MMR算法,生成一個MMR根值,並將該值寫入最新的區塊頭,即可用該值去驗證所有的歷史區塊頭。
FlyClient輕節點可以不斷刪除歷史區塊頭,只保留最新的區塊頭,保持“輕盈”。當需要恢復某個區塊頭時,可以通過Relayer重新從全節點獲取,並用最新區塊頭裏的MMR根值,去驗證恢復過來的區塊頭是否正確。
如果源鏈是概率最終性鏈,Flyclient輕節點在接收Relayer傳遞的最新區塊頭時,會多一個驗證步驟,那就是要求Relayer隨機提供某個歷史區塊頭,以供抽查。這樣做是為了防止一種針對Flyclient輕節點的特有的新形式的欺詐。具體的欺詐方式和抽查算法比較復雜,本節先不做展开,在後續的案例介紹章節,將結合具體的跨鏈項目進行介紹。
Flyclient輕節點真正實現了“把大象壓縮成餅幹”,讓部署在目標鏈的源鏈輕節點合約可以輕裝簡行,讓輕節點側鏈式的跨鏈具有更好的經濟可行性。但對於目前大部分的區塊鏈而言,MMR根值並不是區塊頭的固定部分,因此,Relayer必須自己運行全節點,計算MMR根值,將MMR值加入區塊頭一並傳遞到輕節點中。一些較新的區塊鏈已經將MMR根值作為區塊頭的固定部分了,現有的比較成熟的公鏈,也在有人提案軟分叉升級,將MMR根值加入區塊頭固定結構中。區塊頭中固有MMR值的區塊鏈,將對跨鏈开發更加友好。
輕節點合約的“減負”
對於輕節點合約,對最新區塊頭的驗證是消耗Gas最多的環節,該環節的消耗和用戶的跨鏈請求次數沒有關系,只與源鏈的出塊速度有關系。如果源鏈出塊速度快,該環節的Gas消耗量將可能大到不可接受。
研究者們想到了通過將Gas消耗最多的新區塊驗證環節挪到鏈下進行。參考以太坊layer2的擴容方案,zkRelayer和欺詐證明兩種方案先後被提出來。zkRelayer採用零知識證明的方法在鏈下生成區塊驗證證明,並提交到鏈上,欺詐證明則是通過一套經濟激勵機制來激勵Relayer提交正確的區塊:挑战者時刻監督Relayer提交的區塊,如果發現有惡意Relayer提交了不正確的區塊,經輕節點驗證後,挑战者可以獲得惡意Relayer的押金,如果Relayer提交的區塊沒有被挑战,則默認為是正確的區塊,輕節點合約直接收錄,不再做驗證。
中繼鏈
為了建立更廣泛的跨鏈網絡,我們更多時候,需要連接的不止是兩條鏈,而是很多鏈,如果在每兩條鏈之間建立上述這種雙向楔入,互為側鏈的關系,其連接數和適配成本隨着鏈的數量的增加,將會呈指數級增加,因此中繼的思路被提出來:建立一條中繼鏈,其他所有鏈都與中繼鏈建立連接,就像家裏的終端設備都和路由器連接一樣。如此一來,成本立即從 n(n-1)/2 下降到了n(n為鏈的數量)。
中繼方案是側鏈方案的變體,和側鏈歸為一類技術方案,也是合理的。中繼方案具有很高的擴展性,是當前最被廣泛應用的跨鏈方案,本文為了將中繼方案充分展开闡述,將其單獨列了出來。
有時候,在雙鏈跨鏈模型中,Relayers會作為一條獨立區塊鏈的驗證者而運行,該獨立鏈被視為一個整體承擔區塊頭搬運和跨鏈消息搬運的職能,Relayers則在其內部對搬運的信息達成共識。這類獨立區塊鏈往往被稱為橋接鏈,但它不是中繼鏈。例Polygon的PoS橋,Near的PoA彩虹橋,都只是橋接鏈,不是中繼鏈。
區分兩者的關鍵,在於其跨鏈通信路徑的不同:
可以把橋接鏈理解為只是Relayers的容器,其職能依舊是搬運區塊頭和跨鏈消息,而中繼鏈則是與各接入鏈都建立互為側鏈關系的消息中轉站。很多文獻並沒有對這兩個概念做嚴格的區分,但這兩者的實質是完全不同的。
-
連接現有區塊鏈
中繼模式中,往往由中繼鏈的驗證人,負責承擔Relayer職能,轉發鏈間消息。相比雙向錨定,中繼鏈模式具有更多的擴展性,與中繼鏈相連接的鏈,我們稱為接入鏈。
為了連接既已存在的區塊鏈,需要用中繼鏈去分別適配接入鏈。盡管中繼鏈模式已經大大節約了連接成本,但依舊面臨以下挑战:
要根據不同的接入鏈的特性,制定不同的適配方案,做主動兼容,工作量較大;
不同的鏈安全性有差異,會涉及到不同接入鏈的跨鏈授信問題,以保護整個跨鏈網絡的安全;
新的區塊鏈層出不窮,如果出現新特性的接入鏈,則需要开發新的適配方案
-
通信協議簇 + 造鏈協議
與主動兼容相比,有更省事的辦法,是創造一個全新的區塊鏈造鏈標准,依據該標准开發的區塊鏈,具有相同的密碼原語(Cryptographic Primitives)、共識機制和通信架構,可以很輕易的接入中繼鏈,實現被動兼容。跨鏈雙雄Polkdot和Cosmos便實踐了這樣的思路,兩者都創建了一套造鏈標准,Polkadot創造了Substrate,Cosmos則創造了Cosmos SDK。盡管如此,對於已存在的重要區塊鏈,還是需要主動兼容。Polkadot和Cosmos中都設計了異構跨鏈模塊,用來連接以太坊鏈和BTC鏈。
通信協議簇+造鏈協議類的跨鏈項目被看好,關鍵原因在於有望一勞永逸的解決跨鏈問題。或許我們所期待的萬鏈互聯愿景,最終不是一個網狀結構,而是樹狀結構,那就是讓某個中繼鏈成為區塊鏈世界的layer0,其他的鏈,包括佔多數的同構鏈,和佔少數的異構鏈,以layer1,layer2…的形式接入。
在以中繼鏈+接入鏈的多鏈架構中,中繼鏈已經不再只是一座橋梁,而是一個中樞,我們可以稱之為“鏈樞”。鏈樞在承擔跨鏈消息傳遞的任務的同時,還需處理好鏈間消息路由,消息時序等問題。
共享驗證人
同樣作為通信協議簇+造鏈協議的Cosmos和波卡,都蕴含了中繼的思想,但稍加留意我們便發現,兩者區別十分巨大。
Cosmos的Hub和Zone之間建立的是典型的“雙向錨定”關系,Cosmos的跨鏈消息傳遞協議IBC,依舊是靠內置在接收鏈上的輕節點合約來對跨鏈消息做SPV驗證,但波卡的跨鏈消息傳遞協議XCMP中,並沒有採取輕節點式的技術來驗證跨鏈消息的合法性,而是採用了另外一種方法,Paka Labs將其提煉出來,稱之為「共享驗證人」,列為跨鏈技術的一個單獨分類。(關於XCMP和IBC的更多辨析,將在後續的舉例章節展开。)
共享驗證人方案是指多個鏈共享同一組驗證人,並由這些共同的驗證人負責驗證跨鏈消息的方案。波卡將區塊的搜集和驗證解耦為兩個職能,由兩組角色負責,分別是收集者(Collator)和驗證人(Validator),每條平行鏈都有自己的收集者,但平行鏈沒有自己的驗證者,區塊驗證由中繼鏈的驗證者負責。這相當於每條平行鏈都讓渡了共識過程的一部分給中繼鏈。因此,波卡的平行鏈間可以像同一個區塊鏈的不同分區一樣交互,不再需要額外的信任機制。
需要說明的是,波卡並沒有讓所有的驗證人驗證所有的鏈,而是採取了一個更經濟的做法。在一個具體的時刻,每條平行鏈的驗證人組是不一樣的,每條平行鏈的驗證人組由中繼鏈隨機分配,每隔一段時間都會重新分配,通過這樣隨機分配的機制,讓惡意的驗證人集難以聯合作惡。這種機制,可以拿中國古代宋朝的軍事制度來類比:兵無常將,將無常兵。
波卡的共享驗證人本質上是一種分片機制,與以太坊2.0,Harmony,Near等採用分片機制提高可擴展性的區塊鏈是類似的。但不同的是,分片鏈與信標鏈是終身一體的,而波卡的平行鏈可以和中繼鏈隨時解耦,隨時耦合,當解耦時,平行鏈是一條可獨立運行的區塊鏈。
跨鏈技術的認識框架
現今活躍的跨鏈項目有近百個,不同的跨鏈橋採用不同的跨鏈技術方案,採用相同類型技術方案的項目對系統角色有着不同的設計,和不同的叫法,有對角色職能進行拆分,創造更多角色的,也有對角色職能進行合並,省略部分角色的,還有些項目綜合使用了多個跨鏈技術,可以說是,眼花繚亂,但如果認識清楚了跨鏈技術的本質,則可以做到去僞存真,透徹理解。為此,我們需要一個理解跨鏈技術的認知框架。
我們可以從跨鏈要解決的難題說起:
如何保證跨鏈事務的原子性
這個問題指的是,一個完整的跨鏈事務,必須作為一個整體,執行成功,或者執行失敗,不能存在部分成功,部分失敗的情況,否則使用跨鏈功能的用戶將有可能面臨資產損失。有兩個思路可以實現這一點:一種就是通過密碼學手段對一個跨鏈事務中的多個子交易進行耦合,例如基於哈希時間鎖的原子交換方案;還有一種方法是讓跨鏈事務的多個子交易具有嚴格的時序性,時序性包含三層含義:
只有子交易1完全成功(完全成功意味着交易被打包進區塊,並形成最終確定性),才能進行子交易2,以此類推,只有子交易2完全成功,才能進行子交易3;
如果子交易3失敗,則保留子交易2的成功狀態,讓用戶可以反復重試子交易3;
如果子交易3始終失敗,用戶可以先後撤回子交易2和子交易1。
除了哈希時間鎖,其他跨鏈方案大多情況下都是靠後一種方法,來保障跨鏈事務的原子性的。這裏涉及到一個問題,如何判斷一筆交易,已經形成最終確定性呢?區塊鏈的共識機制有很多種,但依據其最終確定性形成機制,可以分為可證明最終性和概率最終性兩種,BFT類的區塊鏈,通過驗證人投票來確定區塊,被確定的區塊具有最終性,無法被逆轉。但非BFT類的區塊鏈,則認為最長鏈即最終鏈,但最長鏈有可能因為分叉而改變,因此,已經打包的交易可能被逆轉,面對這種情況,普遍採取的方法是等待更多的區塊確認,直到該交易所在區塊被逆轉的可能性降到極低。
由此可見,具有可證明最終性的BFT類區塊鏈,對跨鏈是更加友好的,因此,無論是Cosmos的還是Polkadot,其造鏈標准都不約而同的採用了BFT類共識機制。需要說明的是,BFT只是最終性確認的一種方式,是共識機制的一部分,盡管BFT類區塊鏈一般都是PoS共識,而非BFT類區塊鏈則一般是PoW共識,但並沒有絕對的相關關系。
如何感知另一條鏈
一個區塊鏈系統,對於另外一個區塊鏈系統來說,是封閉的,獨立的,每條鏈都是一個“Walled Garden”,無法直接感知另外一條鏈中的交易及其狀態。一條鏈對於另外一條鏈而言,是一個鏈外系統,因此一條鏈對另外一條鏈的感知,其實是個預言機問題。
因此,任何跨鏈技術,無論如何演變,都繞不开一個“中間人”的角色,系統與系統間相互獨立,那發起跨鏈交易時,目標鏈在發行映射資產之前,如何才能確認源鏈的鎖倉交易已完成呢?兩條鏈之間會由可信的“中間人”來承擔跨鏈消息的傳遞和驗證的職能。這個中間人,在見證人方案中,體現為單主體或多主體組成的見證者集,在側鏈/中繼方案中,則體現為Relayer集,在共享驗證人方案中則是共享驗證人集,只有哈希時間鎖技術在原理上是無中介的,但需要交易發起方和交易對手方同時在线,為了提高體驗,我們需要有一個中間人充當一個公共的交易對手方,或者我們稱之為流動性提供商。
在交易驗證這個環節,見證人方案中,由見證人通過運行節點或者連接其他節點來驗證交易,側鏈/中繼方案中,則通過在目標鏈上部署源鏈輕節點,來實現對源鏈消息真實性的驗證,在共享驗證人方案中,則由共享的驗證人在源鏈共識過程中完成驗證,目標鏈可以無條件信任。
如何安全的托管留置資產
留置資產托管問題,存在於跨鏈資產傳遞的場景中。如前文所述,跨鏈資產傳遞的本質是,讓資產在源鏈鎖倉留置,並在目標鏈上生成模擬資產。那么留置資產的托管安全性就是跨鏈安全性的一個重要組成部分。
有四種類型的托管地址,分別是獨立控制账戶,多方多籤账戶,多方私鑰分片账戶,合約账戶,前三者和見證人機制組合使用,形成了不同子類型的見證人機制;側鏈/中繼式的跨鏈方案中,則採取合約账戶來托管留置資產。事實上,側鏈/中繼方案,也可以和非合約账戶的托管方案組合,但幾乎不會有項目這么設計,因為合約账戶具有更高的安全性,即便有項目實際這么運行,更有可能是作為托管合約开發完成之前過渡方案。
實際上,跨鏈資產傳遞的場景中,還有一種方案是不需要托管資產的,即銷毀-鑄造(Burn-Mint)方案,源鏈上的資產不再鎖定,而是直接銷毀,進而在目標鏈上發行錨定資產。這種方案僅適用於耦合度很高的鏈,否則燃燒的資產,無法再反向鑄造出來,資產跨鏈後再也回不去了,這顯然是無法被接受的。波卡的平行鏈間進行通證跨鏈,用的便是Burn-Mint機制。
如何進行多鏈適配
側鏈方案進行多鏈適配的解決方案,便是中繼方案,通過中繼鏈,與接入鏈一一建立互為側鏈的關系,比接入鏈之間建立這種關系,其適配成本要低很多。盡管如此,中繼鏈主動兼容多個異構的接入鏈,還是很麻煩,需要分別去適配,不如一勞永逸,自上而下建立一套通信標准和造鏈標准,讓更多的新鏈成為可直接被動兼容的同構鏈。
見證人方案和哈希時間鎖方案,相比側鏈/中繼鏈方案更通用,前者只要在新的接入鏈上設立一個托管账戶,即可完成對新接入鏈的兼容,後者則只需接入鏈支持哈希鎖和時間鎖功能即可兼容。
共享驗證人方案則僅適用於同構跨鏈,無法對已存在的異構鏈進行主動兼容,如果需要兼容,還需採用其他跨鏈方案。
小結
通過上述跨鏈技術概覽5個分類:
基於哈希時間鎖的原子交換
見證人機制
輕節點式側鏈
中繼鏈
共享驗證人
以及跨鏈技術的認識的4個維度:
跨鏈事務原子性
跨鏈消息驗證
資產托管
多鏈適配
我們基本可以准確把握一個跨鏈方案的脈絡,形成框架性認識。在後面的章節中,我們將對目前的典型跨鏈項目,進行舉例介紹及技術分析。
撰文:MIDDLE.X,Paka Labs研究員
審閱:Shawn Lin, 1PAR Research創始人
鳴謝:
Bifrost 系統架構師 Buffalo
Darwinia 技術教育專家 Robin Wei
ChainX 技術負責人 徐留成
在本文寫作過程中提供了咨詢幫助
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
狗狗幣價格展望:10億美元資金湧入後的DOGE能否觸及10美元大關?
狗狗幣(DOGE)當前正處於積極的上漲軌道上,其價格穩固於0.1381美元附近,並在盤中一度觸及0...
BNB Chain 的 meme Summer$FOUR傳承 CZ “4” 文化
自 2023 年开始,一張Binance首席執行官趙長鵬 ( CZ ) 經常在其推特账號上發手比“...
幣安發錢了 BNB HODLer 空投首發「Banana Gun」 幣價飆升創新高
今日凌晨,幣安宣布了第一期HODLer 空投的代幣為BANANA,其是Banana Gun 機器人...