深度報告 | 將孤島連成大陸:跨鏈技術及應用形態全景圖(1)

買賣虛擬貨幣

撰文:MIDDLE.X,Paka Labs研究員

審閱:Shawn Lin, 1PAR Research創始人

鳴謝:

Bifrost 系統架構師 Buffalo

Darwinia 技術教育專家 Robin Wei

ChainX 技術負責人 徐留成

在本文寫作過程中提供了諮詢幫助

本篇為全篇的第一部分,約14000字,建議閱讀時間35分鐘;全篇共四部分,將陸續釋出。

1 前言

跨鏈技術被認為是區塊鏈領域的聖盃,是實現萬鏈互通的關鍵技術。人們往往將其重要性和網際網路的TCP/IP進行類比。正是因為 TCP/IP協議簇 提供了點對點連結的機制,將資料應該如何封裝、定址、傳輸、路由以及在目的地如何接收,都加以標準化,才使得全球的終端連成了一張網,演變成了我們今天所稱的網際網路。

隨著區塊鏈行業的迅猛發展,各類公鏈,許可鏈不斷湧現,百花齊放。然而,絕大多數鏈與鏈之間由於技術、生態、競爭等原因無法連線互通,這帶來了使用者、資產、應用、資料的割裂,形成了「孤島效應」。從根本上講,形成這種局面的原因主要是:使用者需求的多樣化和區塊鏈擴充套件性的限制。

為了將孤島連成大陸,業界對跨鏈技術展開了積極的探索。本文將對當前跨鏈的主要技術形態進行闡述和分析,並對當前致力於解決跨鏈問題的典型區塊鏈專案進行舉例。關於跨鏈的研究報告已經有很多,但本文會在前人的研究基礎上,力求做到深入技術本質,辨析易混淆概念,把握脈絡框架,囊括最新進展。

2 跨鏈究竟要跨什麼?

2.1 通證交換

每條區塊鏈上都有自己的原生通證。通證因其封裝了某種權益,而成為價值的載體。鏈內的通證可以進行可信的交換,然而鏈間的通證交換卻“隔鏈如隔山”。只有實現鏈間通證的可信交換,才能實現區塊鏈作為“價值網際網路”的重要作用。

目前透過中心化交易所可以實現跨鏈通證交換,例如將BTC充值到交易所,換成ETH之後,再提現到ETH錢包。但人們不滿足於中心化的方案,希望能夠直接在鏈上進行可信交換,例如使用者A想要用BTC,交換使用者B持有的ETH,這個過程會有個問題,如果兩人約定了交易,但A進行了轉賬後,B食言而肥怎麼辦?這就需要用到跨鏈技術,透過系統的撮合,讓兩筆轉賬能夠同步進行。基於雜湊時間鎖的原子交換,是實現這一場景的典型技術。

2.2 通證傳遞

通證傳遞是指,一條鏈上的原生資產,流通到另外的鏈上。這是無法直接實現的,任何通證都只能依附於其宿主鏈。一般而言,通證傳遞是靠在源鏈上鎖定原生資產,同時在目標鏈上發行等量模擬原生資產的錨定資產來實現的。如何保證這一過程的安全可靠,是跨鏈技術的一大挑戰。

通證傳遞和通證交換,都可以解決鏈間價值交換的問題,但這兩者不完全是一回事。如果A想用1個BTC交換B的10個ETH,這個過程只需實現通證交換,但如果A想要將這1個BTC拿到以太坊上使用,則需要通證傳遞。通證傳遞除了解決價值交換的問題,還有額外的效用。我們可以透過通證傳遞,實現鏈A上的資產參與鏈B上的DeFi應用,構建一個更普惠的開放金融,也可以將通證從一個昂貴的鏈,轉移到一個經濟鏈,節省交易費用,或者從一個緩慢的鏈轉移到快速的鏈,實現擴容,亦或者,從一個非隱私鏈,轉移到一個隱私鏈,實現交易隱私。可以說,通證傳遞能解決的問題,是通證交換所能解決的問題的超集。

2.3資訊傳遞

完全意義上的跨鏈其實應該能讓鏈間的任何訊息進行可靠的傳遞。任何跨鏈事務本質上都是一連串跨鏈訊息傳遞組合而成的,例如,通證傳遞作為一類跨鏈事務,是由兩次跨鏈訊息傳遞組成的,先後是:

源鏈鎖倉通證,並將鎖倉的訊息及其證明,傳遞給目標鏈;

目標連結收到資訊,驗證其真實性之後鑄造對映通證,並將回執傳送回源鏈。

因此,我們可以說,跨鏈資訊傳遞包含了跨鏈通證傳遞。跨鏈資訊傳遞所解決的問題是跨鏈通證傳遞的超集。

透過跨鏈資訊傳遞,一條鏈可以讀取和驗證另外一條鏈的狀態和資訊,一條鏈的智慧合約可以將其他鏈的某個狀態和資訊作為執行的觸發條件。因此,透過跨鏈資訊傳遞,可以實現豐富的跨鏈功能,例如跨鏈借貸,跨鏈眾籌,跨鏈支付,跨鏈衍生品,跨鏈DAO等。如果區塊鏈間能夠靈活呼叫彼此功能,使用彼此的服務,那麼鏈與鏈將組合成一個巨大的服務協同網路,實現我們預期的萬鏈互聯的狀態。

3.跨鏈技術概覽

現在的跨鏈技術形態,有些只是實現了通證交換,例如雜湊時間鎖和跨鏈DEX;有些則透過建立一組鏈上角色來轉發訊息,驗證狀態,有些是提出了一套通訊協議, 實現區塊鏈間的通訊;有些是提出了新的系統架構和造鏈協議, 支援更多區塊鏈的接入。

由於鏈和鏈之間互相獨立,無法建立直接連線,鏈之間無法直接感知對方狀態變更。因此需要搭建通訊橋樑。在通訊橋樑選擇上,通常來說分為五大類技術形態,分別是基於雜湊時間鎖的原子交換,見證人,輕節點側鏈,中繼鏈,共享驗證人,在3.1-3.5小節將展開敘述:

3.1 基於雜湊時間鎖的原子交換

雜湊時間鎖是一套密碼學方法,該方法可以實現去信任的跨鏈資產交易。比如我用的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,建立帶有雜湊時間鎖的交易,在底層是透過建立兩筆交易完成的,由於底層機制比較複雜,在前文所述的交易過程中被簡化表述為了一筆交易。如果交易成功,兩筆交易都要上鍊,需要多付手續費。

實際交易中,會存在匯率問題,交易對手方可以根據匯率是否有利於自己來選擇是否完成交易。尤其在金額較大時,交易對手方有很強的動力這麼做,這導致原子交易可能不適用於大額交易。

另外,在跨鏈的實現程度上,雜湊時間鎖有其侷限性,只能實現跨鏈的通證原子交換,無法實現通證傳遞及更廣泛的跨鏈資訊傳遞,因此在實際跨鏈應用中,往往和其他跨鏈技術組合使用。

3.2 見證人

見證人,英文為Notary,有時也被譯為公證人,是為傳遞跨鏈資訊,託管跨鏈資產而設定的一個特殊角色。2012年Ripple釋出了InterLedge Protocol(ILP),首次透過第三方見證人的方式實現了跨鏈轉賬,在此之後,見證人機制陸續被應用在以BTC錨定資產為主的諸多跨鏈專案中。

不同的跨鏈專案對見證人有不同的設定:見證人可能是單個主體,但大多數情況下是多個主體;見證人的產生方式可能是許可式的,也可能是自由准入的;為了實現資產跨鏈,見證人將不得不管理一個託管賬戶,管理託管賬戶的方法可能是獨立控制或是多方控制;使用者對見證人的信任基礎,可能來源於見證人自身的信用,也可能來源於見證人做了超額抵押。

3.2.1 見證人產生方式

最簡單的方式是組建一個許可式的見證人組,成員基本固定,成員的加入與退出,則由當前成員稽覈表決。這種方式是相對中心化的,比較去中心化的方式是自由准入的方式,任何主體,只需符合既定的條件,例如抵押相應資產,即可成為見證人。自由准入帶來了額外的風險敞口,可能帶來惡意見證人,產生串通作惡的風險。因此,有的跨鏈協議選擇加入一個隨機抽取機制:每次的操作,不是由所有見證人簽名,而是從符合條件的見證人集中隨機抽取一組見證人,如此一來,可以增加見證人串通作惡的成本。

3.2.2 使用者對見證人的信任基礎

見證人可以透過超額抵押來獲取信任,這意味著見證人抵押的價值,必須大於託管的賬戶資產價值,如果託管的資產發生損失,使用者將從抵押金中獲得賠償。超額抵押使得使用者託管的資產具有極高的安全性,但是超額抵押給見證人帶來了資金成本,見證人的資金成本將轉化為高昂的跨鏈手續費用。

見證人也可以靠自己的商譽來背書,儘管含有信任假設,但其優勢是跨鏈費用低廉,甚至可以做到免費,因此還是吸引了大批使用者。

3.2.3 資產託管方式:獨立控制地址與多方控制地址

見證人可能各自控制一個獨立控制地址,形成託管地址矩陣,來承接使用者的託管委託。需要注意的是獨立控制地址不一定是單簽名地址,見證人出於安全考慮,可能會採用多籤和私鑰分片技術來管理獨立控制地址,例如,某個見證人在鏈下是一家人數眾多的公司,該見證人的地址有可能會由公司的多名高管或股東透過多籤和私鑰分片共同管理。然而,不管使用什麼技術來管理地址,只要是由單個主體控制的地址,我們都稱為獨立控制地址。

更多的情況下,託管地址是由多方共同控制的地址。有可能是所有見證人共同管理一個地址,也有可能是將見證人分組,每個組共同管理一個地址。這種情況則必須用到多籤或者私鑰分片這樣的多方控制技術。

3.2.3.1 多籤

多籤,或稱多重簽名,英文為Muti-Sig,是由多個私鑰共同控制一個賬戶的技術,多籤技術可以實現一個地址必須由M-of-N個簽名人簽名才能轉賬,1≤M≤N。

在BTC中,多籤地址是P2SH型別的地址,普通BTC地址是由公鑰雜湊後得到的,而多籤地址則是基於指令碼雜湊。該類地址對N值有一個限制,N≤15;在以太坊等具有圖靈完備性的區塊鏈中,則可以透過智慧合約來實現多籤地址,N值也可以無限大。

3.2.3.2 私鑰分片

私鑰分片技術,也稱分散式金鑰技術,是一個具有更高理論安全度的多方控制技術,該技術脫胎於圖靈獎獲得者姚期智先生提出的安全多方計算(sMPC,Secure Muti-Party Computation),結合門限技術(TSS),也可以實現M-of-N 簽名管理。該技術支援將一個賬戶的私鑰拆分成若干個碎片,分配給多個簽名人,當已簽名的碎片私鑰數達到閾值時,即可對賬戶資產進行操作。具體實現上,私鑰分片有多種技術實現方式,涉及到複雜的密碼學知識,本文不展開。

私鑰分片之所以更加安全,是因為分片是不斷重新整理的,也就是每隔一段時間,分片會重新進行,給到每個人的碎片會產生變化。惡意者如果想要透過獲取所有人的分片來盜取資產,必須獲取到不同簽名人在同一個時間單元裡的私鑰,否則驢脣不對馬嘴,無法合成完整私鑰。

3.2.3.3 簽名人組成員管理

無論是多籤還是私鑰分片,簽名人組都不可能是一個成員始終固定的群組,所以會涉及到簽名人組的成員增減。在私鑰分片技術中,只需要重新分片,把碎片分發給增減後產生的新簽名人組即可。在多籤技術中,則分為兩種情況:

在以太坊等圖靈完備的區塊鏈上,可以透過智慧合約程式設計來設定簽名人組成員管理規則,例如超過2/3的現有簽名人簽名同意,即可批准新的簽名人的加入,或者批准剔除某個老的簽名人。

在BTC上,則無法對一個P2SH多籤地址的簽名人組成員進行編輯,如果某個簽名人的私鑰洩露或者需要退出,只能重新建立一個新的P2SH多籤地址,將資產轉到新的地址裡。

3.2.4 向去中心化方向改進

整體上,見證人模式是一種相對容易實現,且通用性強,適配成本低的跨鏈方式。見證人模式的最初版本是相對中心化的,但人們不滿足於此,於是透過各種方法對其進行了改進,使其具有去中心化的特性,例如使用更加去中心化的見證人准入機制和分組機制,使用更加分散式的資產託管地址等。由此,產生了各種各樣的改進方案。這些改進方案在實現去中心化的同時,也帶來了一定的複雜性。

3.3 輕節點式側鏈

側鏈的產生,源於人們對於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從源鏈搬運交易資訊到目標鏈時,用輕節點上的區塊頭資訊驗證交易資訊的正確性。

3.3.1 雙向錨定

我們需要理解的是,主鏈和側鏈的關係是相對的,兩條鏈可以互為側鏈。我們在前文中提到的“源鏈”和“目標鏈”也是相對概念,在一個跨鏈訊息傳遞事件中,訊息的源起方往往被稱為源鏈,訊息的接收方則被稱為目標鏈。

跨鏈雙方透過互埋對方輕節點,即可實現互相讀取對方鏈上的資訊,互聯互通,這種形態被稱為雙向錨定(Two-Way-Pegging),這種形態下,兩條鏈成為了彼此的側鏈。兩個方向都有Relayer組負責向對方傳遞資訊,當然,兩組Relayer(B→A Relayer & A→B Reayer)也有可能是同一批人,被合併為同一個角色,兼負責雙向的資訊傳遞。

3.3.2 側鏈與子鏈

談到側鏈,有必要和另外一個容易混淆的概念做一下辨析,那就是子鏈。子鏈沒有自己的共識機制和原生通證,其安全性完全依託於主鏈,具有單向性。而側鏈本身是一條獨立執行的區塊鏈,側鏈與主鏈的關係,是相對概念,具有雙向性。

以太坊的擴容鏈,有些是側鏈形態,有些則是子鍊形態。採用Plasma方法和側鏈方法的擴容鏈是以太坊的側鏈(Plasma側鏈是另一種側鏈形式,不是輕節點式側鏈),而採用狀態通道和Rollup方法的擴容鏈,則是以太坊的子鏈。

子鏈透過將交易從主鏈挪到子鏈進行,並定期向主鏈同步最終狀態來實現對主鏈效能的擴容,所以,子鏈也被稱為「提交鏈」,提交鏈的叫法比子鏈的叫法更貼近其技術本質。

子鏈的目的是為了擴容,擴容的本質是節省主鏈的資源,因此主鏈不會花費計算資源對子鏈提交的交易進行驗證。子鏈自身需要一個機制在提交時證明其所提交內容的真實性。其中,狀態通道,Optimistic Rollup,Arbitrum Rollup採用欺詐證明的方式來證明,而Zk Rollup,Validium則採用零知識證明的方式生成有效性證明。

子鏈和主鏈之間,這種單向的資訊提交式互動,在有些文獻中,也被認為是跨鏈技術的一種形態,但Paka Labs認為,儘管側鏈和子鏈都誕生於對區塊鏈擴容的努力,但子鏈相關的技術只能用於建立擴容鏈,無法應用於兩條獨立區塊鏈之間的跨鏈,不應歸類為跨鏈技術。

3.3.3 輕節點側鏈的優越性

如果說見證人機制重在Trust(信任),那麼輕節點側鏈技術則重在Verify(驗證)! 透過區塊頭驗證交易資訊,其可靠性是在密碼學上被保障的,交易是否存在,一驗即知,確定無疑。

Relayers傳遞的區塊頭也不可能造假,因為輕節點合約可以像全節點一樣,對區塊進行嚴格的驗證,虛假的區塊頭無法透過驗證。輕節點的驗證程式和源鏈網路中的礦工節點驗證程式是完全相同的,以BTC為例,需要經過以下步驟驗證:

區塊的資料結構語法上有效;

驗證工作量證明,區塊頭的雜湊值小於目標難度(確認包含足夠的工作量證明);

區塊時間戳早於驗證時刻未來兩個小時(允許時間錯誤);

驗證區塊大小在長度限制之內,即看區塊大小是否在設定範圍之內;

第一個交易(且只有第一個)是coinbase交易,即一個區塊,礦工只能給自己獎勵一次;

驗證區塊內的交易並確保它們的有效性:驗證MerkleRoot是否是由區塊體中的交易得到的,即重構區塊Merkle樹得到的樹根,看是否和區塊頭中的hashMerkleRoot值相等。

惡意的Relayers如果串通作惡,唯一可行的方法是傳遞一個分叉鏈上的區塊的區塊頭,但對於一個健康的網路,分叉鏈最終不會成為最長鏈,輕節點合約只需等待足夠多個區塊的確認即可(對於BTC輕節點,等待6個區塊即可)。對於BFT類的鏈,輕節點合約只需驗證區塊的簽名數即可知區塊是否具備最終性。

只有源鏈或者目標鏈的本身出現重組,才會影響到輕節點合約的安全性。Relayer能夠給網路造成的危害最多止於集體罷工,讓網路停止服務。

此外,Relayer不負責管理託管資產,惡意的Relayer無法像惡意的見證人那樣,有盜取託管資產的可能。因跨鏈而鎖定的資產託管在合約中,合約中託管的資產,如果合約程式碼沒有問題,其安全性就是合約所在鏈級別的。

由於Relayer作惡的條件苛刻,且危害性較小,輕節點式側鏈中的Relayer並不需要像見證人那樣做超額抵押。可以用更小的代價實現更多的跨鏈錨定資產發行。

由此可見,輕節點側鏈方案,在跨鏈的成本上和安全性上,比見證人方案更有優勢,是實現兩條鏈之間跨鏈優先要採用的技術方案。但是有的鏈不支援智慧合約,無法部署輕節點合約和託管合約,這種情況,只能退而求其次,採用見證人方案。

3.3.4 輕節點技術的發展:“瘦身”與“減負”

我們知道BTC的區塊大小為1M,其區塊頭只有80byte,直到本文釋出的時間,BTC的歷史區塊頭大小也尚未超過60M(高度約69萬),但誕生較晚的以太坊的歷史區塊頭加起來已經超過了5個G(高度約1300萬),隨著區塊鏈的多元化發展,部分新興區塊鏈更側重於高TPS,出塊速度極快,其歷史區塊頭的體積將可能很快超過以太坊。

這樣的趨勢,給輕節點式側鏈帶來了挑戰,主要體現在兩方面:

較大的區塊頭,將使得輕節點合約變得笨重,佔用目標鏈的巨大儲存空間;

源鏈較快的出塊速度,將導致輕節點合約需要頻繁的同步和驗證新區塊

這兩者,都將造成輕節點合約在目標鏈上巨大的Gas消耗,嚴重時會使得采用輕節點側鏈技術實現跨鏈變得不具備經濟可行性。

怎麼辦?回到見證人方案嗎?但輕節點式側鏈技術的優越性如此誘人,我們還是希望繼續使用它。有沒有辦法讓輕節點合約在不喪失其SPV驗證能力的前提下,對其進行改造和擴容?

區塊鏈行業的研究者們在兩個方向上對輕節點側鏈技術做了改進。首先是對輕節點合約進行“瘦身”,使其體積變得更小,且不隨區塊增加而線性增長,其次是對輕節點合約進行“減負”,將區塊驗證環節挪到鏈下,讓輕節點合約只做交易的SPV驗證。

3.3.4.1 輕節點合約的“瘦身”

我們需要了解一個新的協議,名為“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值的區塊鏈,將對跨鏈開發更加友好。

3.3.4.2 輕節點合約的“減負”

對於輕節點合約,對最新區塊頭的驗證是消耗Gas最多的環節,該環節的消耗和使用者的跨鏈請求次數沒有關係,只與源鏈的出塊速度有關係。如果源鏈出塊速度快,該環節的Gas消耗量將可能大到不可接受。

研究者們想到了透過將Gas消耗最多的新區塊驗證環節挪到鏈下進行。參考以太坊layer2的擴容方案,zkRelayer和欺詐證明兩種方案先後被提出來。zkRelayer採用零知識證明的方法在鏈下生成區塊驗證證明,並提交到鏈上,欺詐證明則是透過一套經濟激勵機制來激勵Relayer提交正確的區塊:挑戰者時刻監督Relayer提交的區塊,如果發現有惡意Relayer提交了不正確的區塊,經輕節點驗證後,挑戰者可以獲得惡意Relayer的押金,如果Relayer提交的區塊沒有被挑戰,則預設為是正確的區塊,輕節點合約直接收錄,不再做驗證。

3.4 中繼鏈

為了建立更廣泛的跨鏈網路,我們更多時候,需要連線的不止是兩條鏈,而是很多鏈,如果在每兩條鏈之間建立上述這種雙向楔入,互為側鏈的關係,其連線數和適配成本隨著鏈的數量的增加,將會呈指數級增加,因此中繼的思路被提出來:建立一條中繼鏈,其他所有鏈都與中繼鏈建立連線,就像家裡的終端裝置都和路由器連線一樣。如此一來,成本立即從 n(n-1)/2 下降到了n(n為鏈的數量)。

中繼方案是側鏈方案的變體,和側鏈歸為一類技術方案,也是合理的。中繼方案具有很高的擴充套件性,是當前最被廣泛應用的跨鏈方案,本文為了將中繼方案充分展開闡述,將其單獨列了出來。

有時候,在雙鏈跨鏈模型中,Relayers會作為一條獨立區塊鏈的驗證者而執行,該獨立鏈被視為一個整體承擔區塊頭搬運和跨鏈訊息搬運的職能,Relayers則在其內部對搬運的資訊達成共識。這類獨立區塊鏈往往被稱為橋接鏈,但它不是中繼鏈。例Polygon的PoS橋,Near的PoA彩虹橋,都只是橋接鏈,不是中繼鏈。

區分兩者的關鍵,在於其跨鏈通訊路徑的不同:

可以把橋接鏈理解為只是Relayers的容器,其職能依舊是搬運區塊頭和跨鏈訊息,而中繼鏈則是與各接入鏈都建立互為側鏈關係的訊息中轉站。很多文獻並沒有對這兩個概念做嚴格的區分,但這兩者的實質是完全不同的。

3.4.1 連線現有區塊鏈

中繼模式中,往往由中繼鏈的驗證人,負責承擔Relayer職能,轉發鏈間訊息。相比雙向錨定,中繼鏈模式具有更多的擴充套件性,與中繼鏈相連線的鏈,我們稱為接入鏈。

為了連線既已存在的區塊鏈,需要用中繼鏈去分別適配接入鏈。儘管中繼鏈模式已經大大節約了連線成本,但依舊面臨以下挑戰:

要根據不同的接入鏈的特性,制定不同的適配方案,做主動相容,工作量較大;

不同的鏈安全性有差異,會涉及到不同接入鏈的跨鏈授信問題,以保護整個跨鏈網路的安全;

新的區塊鏈層出不窮,如果出現新特性的接入鏈,則需要開發新的適配方案

3.4.2 通訊協議簇 + 造鏈協議

與主動相容相比,有更省事的辦法,是創造一個全新的區塊鏈造鏈標準,依據該標準開發的區塊鏈,具有相同的密碼原語(Cryptographic Primitives)、共識機制和通訊架構,可以很輕易的接入中繼鏈,實現被動相容。跨鏈雙雄Polkdot和Cosmos便實踐了這樣的思路,兩者都建立了一套造鏈標準,Polkadot創造了Substrate,Cosmos則創造了Cosmos SDK。儘管如此,對於已存在的重要區塊鏈,還是需要主動相容。Polkadot和Cosmos中都設計了異構跨鏈模組,用來連線以太坊鏈和BTC鏈。

通訊協議簇+造鏈協議類的跨鏈專案被看好,關鍵原因在於有望一勞永逸的解決跨鏈問題。或許我們所期待的萬鏈互聯願景,最終不是一個網狀結構,而是樹狀結構,那就是讓某個中繼鏈成為區塊鏈世界的layer0,其他的鏈,包括佔多數的同構鏈,和佔少數的異構鏈,以layer1,layer2…的形式接入。

在以中繼鏈+接入鏈的多鏈架構中,中繼鏈已經不再只是一座橋樑,而是一箇中樞,我們可以稱之為“鏈樞”。鏈樞在承擔跨鏈訊息傳遞的任務的同時,還需處理好鏈間訊息路由,訊息時序等問題。

3.5 共享驗證人

同樣作為通訊協議簇+造鏈協議的Cosmos和波卡,都蘊含了中繼的思想,但稍加留意我們便發現,兩者區別十分巨大。

Cosmos的Hub和Zone之間建立的是典型的“雙向錨定”關係,Cosmos的跨鏈訊息傳遞協議IBC,依舊是靠內建在接收鏈上的輕節點合約來對跨鏈訊息做SPV驗證,但波卡的跨鏈訊息傳遞協議XCMP中,並沒有採取輕節點式的技術來驗證跨鏈訊息的合法性,而是採用了另外一種方法,Paka Labs將其提煉出來,稱之為「共享驗證人」,列為跨鏈技術的一個單獨分類。(關於XCMP和IBC的更多辨析,將在後續的舉例章節展開。)

共享驗證人方案是指多個鏈共享同一組驗證人,並由這些共同的驗證人負責驗證跨鏈訊息的方案。波卡將區塊的蒐集和驗證解耦為兩個職能,由兩組角色負責,分別是收集者(Collator)和驗證人(Validator),每條平行鏈都有自己的收集者,但平行鏈沒有自己的驗證者,區塊驗證由中繼鏈的驗證者負責。這相當於每條平行鏈都讓渡了共識過程的一部分給中繼鏈。因此,波卡的平行鏈間可以像同一個區塊鏈的不同分割槽一樣互動,不再需要額外的信任機制。

需要說明的是,波卡並沒有讓所有的驗證人驗證所有的鏈,而是採取了一個更經濟的做法。在一個具體的時刻,每條平行鏈的驗證人組是不一樣的,每條平行鏈的驗證人組由中繼鏈隨機分配,每隔一段時間都會重新分配,透過這樣隨機分配的機制,讓惡意的驗證人集難以聯合作惡。這種機制,可以拿中國古代宋朝的軍事制度來類比:兵無常將,將無常兵。

波卡的共享驗證人本質上是一種分片機制,與以太坊2.0,Harmony,Near等採用分片機制提高可擴充套件性的區塊鏈是類似的。但不同的是,分片鏈與信標鏈是終身一體的,而波卡的平行鏈可以和中繼鏈隨時解耦,隨時耦合,當解耦時,平行鏈是一條可獨立執行的區塊鏈。

4. 跨鏈技術的認識框架

現今活躍的跨鏈專案有近百個,不同的跨鏈橋採用不同的跨鏈技術方案,採用相同型別技術方案的專案對系統角色有著不同的設計,和不同的叫法,有對角色職能進行拆分,創造更多角色的,也有對角色職能進行合併,省略部分角色的,還有些專案綜合使用了多個跨鏈技術,可以說是,眼花繚亂,但如果認識清楚了跨鏈技術的本質,則可以做到去偽存真,透徹理解。為此,我們需要一個理解跨鏈技術的認知框架。

我們可以從跨鏈要解決的難題說起:

4.1 如何保證跨鏈事務的原子性

這個問題指的是,一個完整的跨鏈事務,必須作為一個整體,執行成功,或者執行失敗,不能存在部分成功,部分失敗的情況,否則使用跨鏈功能的使用者將有可能面臨資產損失。有兩個思路可以實現這一點:一種就是透過密碼學手段對一個跨鏈事務中的多個子交易進行耦合,例如基於雜湊時間鎖的原子交換方案;還有一種方法是讓跨鏈事務的多個子交易具有嚴格的時序性,時序性包含三層含義:

只有子交易1完全成功(完全成功意味著交易被打包進區塊,並形成最終確定性),才能進行子交易2,以此類推,只有子交易2完全成功,才能進行子交易3;

如果子交易3失敗,則保留子交易2的成功狀態,讓使用者可以反覆重試子交易3;

如果子交易3始終失敗,使用者可以先後撤回子交易2和子交易1。

除了雜湊時間鎖,其他跨鏈方案大多情況下都是靠後一種方法,來保障跨鏈事務的原子性的。這裡涉及到一個問題,如何判斷一筆交易,已經形成最終確定性呢?區塊鏈的共識機制有很多種,但依據其最終確定性形成機制,可以分為可證明最終性和概率最終性兩種,BFT類的區塊鏈,透過驗證人投票來確定區塊,被確定的區塊具有最終性,無法被逆轉。但非BFT類的區塊鏈,則認為最長鏈即最終鏈,但最長鏈有可能因為分叉而改變,因此,已經打包的交易可能被逆轉,面對這種情況,普遍採取的方法是等待更多的區塊確認,直到該交易所在區塊被逆轉的可能性降到極低。

由此可見,具有可證明最終性的BFT類區塊鏈,對跨鏈是更加友好的,因此,無論是Cosmos的還是Polkadot,其造鏈標準都不約而同的採用了BFT類共識機制。需要說明的是,BFT只是最終性確認的一種方式,是共識機制的一部分,儘管BFT類區塊鏈一般都是PoS共識,而非BFT類區塊鏈則一般是PoW共識,但並沒有絕對的相關關係。

4.2 如何感知另一條鏈

一個區塊鏈系統,對於另外一個區塊鏈系統來說,是封閉的,獨立的,每條鏈都是一個“Walled Garden”,無法直接感知另外一條鏈中的交易及其狀態。一條鏈對於另外一條鏈而言,是一個鏈外系統,因此一條鏈對另外一條鏈的感知,其實是個預言機問題。

因此,任何跨鏈技術,無論如何演變,都繞不開一個“中間人”的角色,系統與系統間相互獨立,那發起跨鏈交易時,目標鏈在發行對映資產之前,如何才能確認源鏈的鎖倉交易已完成呢?兩條鏈之間會由可信的“中間人”來承擔跨鏈訊息的傳遞和驗證的職能。這個中間人,在見證人方案中,體現為單主體或多主體組成的見證者集,在側鏈/中繼方案中,則體現為Relayer集,在共享驗證人方案中則是共享驗證人集,只有雜湊時間鎖技術在原理上是無中介的,但需要交易發起方和交易對手方同時線上,為了提高體驗,我們需要有一箇中間人充當一個公共的交易對手方,或者我們稱之為流動性提供商。

在交易驗證這個環節,見證人方案中,由見證人透過執行節點或者連線其他節點來驗證交易,側鏈/中繼方案中,則透過在目標鏈上部署源鏈輕節點,來實現對源鏈訊息真實性的驗證,在共享驗證人方案中,則由共享的驗證人在源鏈共識過程中完成驗證,目標鏈可以無條件信任。

4.3 如何安全的託管留置資產

留置資產託管問題,存在於跨鏈資產傳遞的場景中。如前文所述,跨鏈資產傳遞的本質是,讓資產在源鏈鎖倉留置,並在目標鏈上生成模擬資產。那麼留置資產的託管安全性就是跨鏈安全性的一個重要組成部分。

有四種型別的託管地址,分別是獨立控制賬戶,多方多籤賬戶,多方私鑰分片賬戶,合約賬戶,前三者和見證人機制組合使用,形成了不同子型別的見證人機制;側鏈/中繼式的跨鏈方案中,則採取合約賬戶來託管留置資產。事實上,側鏈/中繼方案,也可以和非合約賬戶的託管方案組合,但幾乎不會有專案這麼設計,因為合約賬戶具有更高的安全性,即便有專案實際這麼執行,更有可能是作為託管合約開發完成之前過渡方案。

實際上,跨鏈資產傳遞的場景中,還有一種方案是不需要託管資產的,即銷燬-鑄造(Burn-Mint)方案,源鏈上的資產不再鎖定,而是直接銷燬,進而在目標鏈上發行錨定資產。這種方案僅適用於耦合度很高的鏈,否則燃燒的資產,無法再反向鑄造出來,資產跨鏈後再也回不去了,這顯然是無法被接受的。波卡的平行鏈間進行通證跨鏈,用的便是Burn-Mint機制。

4.4 如何進行多鏈適配

側鏈方案進行多鏈適配的解決方案,便是中繼方案,透過中繼鏈,與接入鏈一一建立互為側鏈的關係,比接入鏈之間建立這種關係,其適配成本要低很多。儘管如此,中繼鏈主動相容多個異構的接入鏈,還是很麻煩,需要分別去適配,不如一勞永逸,自上而下建立一套通訊標準和造鏈標準,讓更多的新鏈成為可直接被動相容的同構鏈。

見證人方案和雜湊時間鎖方案,相比側鏈/中繼鏈方案更通用,前者只要在新的接入鏈上設立一個託管賬戶,即可完成對新接入鏈的相容,後者則只需接入鏈支援雜湊鎖和時間鎖功能即可相容。

共享驗證人方案則僅適用於同構跨鏈,無法對已存在的異構鏈進行主動相容,如果需要相容,還需採用其他跨鏈方案。

4.5 小結

透過上述跨鏈技術概覽5個分類:

基於雜湊時間鎖的原子交換

見證人機制

輕節點式側鏈

中繼鏈

共享驗證人

以及跨鏈技術的認識的4個維度:

跨鏈事務原子性

跨鏈訊息驗證

資產託管

多鏈適配

我們基本可以準確把握一個跨鏈方案的脈絡,形成框架性認識。在後面的章節中,我們將對目前的典型跨鏈專案,進行舉例介紹及技術分析。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读