一文速覽Paka Labs萬字報告:跨鏈技術及應用形態全景圖(一)

原文作者:MIDDLE.X,Paka Labs 研究員

原文編輯:Shawn Lin, 1 PAR Research 創始人

鳴謝:

Bifrost 系統架構師 Buffalo

Darwinia 技術教育專家 Robin Wei

ChainX 技術負責人 徐留成 

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

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

1 前言

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

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

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

<h2 “=””>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 等。如果區塊鏈間能夠靈活呼叫彼此功能,使用彼此的服務,那麼鏈與鏈將組合成一個巨大的服務協同網路,實現我們預期的萬鏈互聯的狀態。

現在的跨鏈技術形態,有些只是實現了通證交換,例如雜湊時間鎖和跨鏈 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 中,多籤地址是 P 2 SH 型別的地址,普通 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 上,則無法對一個 P 2 SH 多籤地址的簽名人組成員進行編輯,如果某個簽名人的私鑰洩露或者需要退出,只能重新建立一個新的 P 2 SH 多籤地址,將資產轉到新的地址裡。

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 的區塊大小為 1 M,其區塊頭只有 80 byte,直到本文釋出的時間,BTC 的歷史區塊頭大小也尚未超過 60 M(高度約 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 消耗最多的新區塊驗證環節挪到鏈下進行。參考以太坊 layer 2 的擴容方案,zkRelayer 和欺詐證明兩種方案先後被提出來。zkRelayer 採用零知識證明的方法在鏈下生成區塊驗證證明,並提交到鏈上,欺詐證明則是透過一套經濟激勵機制來激勵 Relayer 提交正確的區塊:挑戰者時刻監督 Relayer 提交的區塊,如果發現有惡意 Relayer 提交了不正確的區塊,經輕節點驗證後,挑戰者可以獲得惡意 Relayer 的押金,如果 Relayer 提交的區塊沒有被挑戰,則預設為是正確的區塊,輕節點合約直接收錄,不再做驗證。

3.4 中繼鏈

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

有時候,在雙鏈跨鏈模型中,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 鏈。

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

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

3.5 共享驗證人

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

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

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

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

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

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 個維度:

  • 跨鏈事務原子性
  • 跨鏈訊息驗證
  • 資產託管
  • 多鏈適配

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *