科普 | 一文理清跨layer與跨鏈方式

來源:機械鐘

撰文:李畫

受訪人:p0n1,安比實驗室研究員;王東,路印協議創始人;劉毅,Cdot 創始人;John,Poly Network 創始成員

layer跨鏈、不同跨layer的方式、不同跨鏈的方式,看上去紛繁蕪雜令人迷惑,但它們背後的邏輯是簡單的,本文對各種跨layer與跨鏈方式做了簡要總結,希望能讓「跨」這件事看上去清晰些。

這篇文章更像一個索引,圍繞下圖展開,每種方式的具體實現如果以前文章討論過,便只做關鍵內容的引用,如果你對此了解便可跳過;如果未討論過,便會詳細展開。

科普 | 一文理清跨layer與跨鏈方式

01 跨layer

Layer 2與側鏈(包括其他公鏈)是兩種不同的主體,跨Layer與跨鏈是兩件截然不同的事情。以比喻來做說明:

古希臘的神廟用麥子為公民記賬,假設「主神廟」太忙記不過來,便讓其他神廟幫它記,這些神廟記賬后需要定期彙報給主神廟知道,而不管公民的賬被記在哪個神廟,也不管這些神廟是否發生變故,公民想取出資產時總能拿到屬於他的麥子,這是跨Layer。

假設有另一片大陸,一個聰明人為兩地的商人提供一項服務,使大家在古希臘賬本上的資產能跨到這片大陸的賬本上使用,某個人把資產跨過來后,這片大陸為他記賬時是不會把賬目信息彙報給主神廟知道的;此外,這片大陸是不產麥子的,它的記賬單位也不是麥子,如果這個人想在這片大陸取出資產,他拿到的不是麥子,這是跨鏈。他能拿到什麼取決於不同的跨鏈方式。

跳出比喻來說就是:Layer 2為子賬本,跨Layer 是一套賬本體系下具體的記賬地方發生了變化,Layer 2和Layer 1的記賬單位相同,Layer 2記的賬需要告知Layer 1;鏈是不同的賬本,跨鏈是從一套賬本體系到另一套賬本體系,側鏈和主鏈的記賬單位不同,側鏈記的賬不會告知主鏈。

Rollup

在區分Layer 2與跨鏈后,來看Layer 2。Rollup 是最主流也最有發展潛力的Layer 2,目前階段似乎只需要關注它。Rollup 是什麼

“Rollup 指先在鏈下進行複雜的計算和狀態維護,再將與狀態更改相關的數據通過合約調用的方式,利用更便宜的CALLDATA 在鏈上保存。

任何人都能根據鏈上保存的數據復原出全局的狀態,從而消除因數據可用性問題帶來的安全風險。Rollup將大量交易捲起/匯總成為一個交易,在保證數據可用性的前提下提高 TPS。”

通俗來講就是:Rollup 負責處理具體的記賬事宜,但它的賬是如何記得是要彙報並記錄在以太坊上的,這會使以太坊承認Rollup 記的賬。具體而言,Rollup 以如下方式工作(以ZK Rollup 為例):

“有一個技術的東西叫Merkle Tree,它是把不同的數據一層一層的哈希,最後變成一個簡單的哈希值,這個值就叫樹的根。這個根實際上能代表樹裡邊一切的狀態,雖然不知道具體的狀態是什麼。

這棵樹本身是要能夠在某個地方找到的,如果沒有這棵樹,只有根,那這個賬戶也是不安全的。ZK Rollup 就是在Layer 2 維護這樣一棵樹。它最開始的時候非常簡單,裡邊什麼都沒有,然後當你交易或支付時,就會改這棵樹裡邊的數據,這個改動本身是要放到以太坊上去的,作為一個數據存到以太坊上。(註:並不是把這棵樹放在以太坊上,這棵樹在Layer 2,但要把對這棵樹的改動的數據放在以太坊上)

因此,你可以通過以太坊把這棵樹在任何一個時間點的歷史狀態全部恢復出來,恢復出來之後,你可以通過樹根來驗證你恢復的數據是不是對的。任何一個用戶都可以把從葉子節點到根的一串數據拿過來,這一串的數據叫默克爾證明。

把這個證明扔到以太坊的路印協議的智能合約里,合約就會算這個默克爾證明能不能證明你確實是在這棵樹裡面,如果能證明你在這棵樹里,就會把這棵樹里標記的你有多少錢從以太坊的智能合約里解鎖出來,直接轉到你的以太坊賬號里。這就是在最不理想的情況下提現的方式。”

——王東,《專訪王東:關於路印新版本的一切》

Rollup 實現擴容的原理如下(以ZK Rollup 為例):

“為什麼ZK Rollup 能夠擴容,能夠變得那麼快、那麼省錢,與對這棵Merkle Tree 的更新涉及到的一些計算相關。

比如一個人的賬戶狀態改了,那要怎麼改Merkle Tree 的根?需要一層一層的去算,算到那個根。所以一筆交易可能要改大約4、5個葉子節點,一筆轉賬大概要改3個葉子節點,這些改動是非常多的。

但現在,這些改動跟以太坊沒有關係,它不用去做這些改動過程的計算,計算都是在Merkle Tree 上面,在中繼裡邊做的,以太坊上只要把零知識證明驗證一下就行了,可能就花費10萬gas 還是多少gas,大概是這樣。

比如說做1000筆交易,改動可能是大約4000個葉子節點,可能要算幾萬次哈希算出一個根,但這些數據都在Layer 2,最後扔到以太坊上的數據其實就是三種:第一個是對各個葉子怎麼改的;第二個是對根怎麼改的;第三個是一個證明來證明前兩者的一致性。

零知識證明做什麼呢?零知識證明就是驗證改這棵樹裡邊這麼多數據的時候,這個根的計算跟各種改動是能夠匹配得上的。零知識證明只是做了這麼一件事,就是證明數據的一致性。它對應的也不是每一筆交易怎麼去證明,而是說一大堆交易打成一個包/塊,如何去證明這個包,它是一個批處理的過程。“

——王東,《專訪王東:關於路印新版本的一切》

通俗來講就是:Rollup 幫主鏈幹活,那麼幹活的人多了,能同時乾的活也就多了。

ZK Rollup 與Optimistic Rollup

在理解Rollup 后,來看ZK Rollup 與Optimistic Rollup,兩者的核心區別如下

ZK Rollup 方案的關鍵在於ZK,它的每一次的狀態轉變都需要提供零知識證明,並由主鏈上的合約進行驗證,只有驗證通過才能更改狀態。即,ZK Rollup 的狀態轉變嚴格依賴於密碼學證明。

Optimistic Rollup 方案中,每次狀態轉變無需嚴格驗證,它是先樂觀地假設每次轉變都是正確的,然後在一定時限內可以對某次轉變進行挑戰,如果挑戰成功就證明之前的提交有問題,會懲罰提交者並將狀態回滾。即,Optimistic Rollup 的狀態轉變依賴於經濟激勵和博弈。

——p0n1,《時髦有趣且有用:這12個以太坊新事物你不能錯過》

ZK Rollup 的突出問題在於對可編程性的實現上,這是因零知識證明而起,如果你對此感興趣可以看《徹底讀懂零知識證明及其實現方法:解析zk-SNARK》一文,它介紹了如何實現零知識證明,從中能了解它為何難以實現可編程性。不過,zkSync(Matter Labs)的VM 及相關設計能夠讓可編程性落地,值得期待。

Optimistic Rollup 最被關注的問題似乎是當資金從Layer 2返回時,因為挑戰期帶來的延時問題,但可以有中間商提供墊付服務曲線救國,所以這一點也許不會成為困擾。

以上是關於跨layer 的全部,它是在子賬本記賬,記的賬要成批的彙報給以太坊知道;ZK Rollup 用密碼學的方法杜絕假賬,Optimistic Rollup 用監督舉報的方法避免假賬。

02 跨鏈

跨鏈是從一套賬本體系到另一套賬本體系,不管參與方是哪兩條鏈,也不管以何種方式跨鏈,當跨鏈發生時,都需要一個第三者在兩條鏈之間傳話,不然兩條鏈都不會知道對方鏈發生了什麼,跨鏈也就無從談起。

一個完整的跨鏈過程如下(以鎖定+鑄造方式為例):

“跨鏈橋很形象,它有兩個橋墩和一個橋樑。兩個橋墩就是兩套智能合約,一個運行在A鏈,一個運行在B鏈;中間是橋樑,橋樑是鏈下進程,負責監控兩邊這兩套智能合約的事件。

假設現在有一個ERC20 的代幣,比如說是UNI,它發行在以太坊上,我們想把它跨到PlatON上去。那麼以太坊這邊要有一個智能合約,比如叫Vault 合約,它是跨鏈橋的一個橋墩;跨鏈的用戶要發給Vault 合約Lock 方法,把要鎖定的幣種和數量作為參數傳進去,然後還要提供一個PlatON 的地址,說我鎖500個UNI 是為了在這個地址上鑄造出500個UNI 的替代品。

這個時候,Vault 合約就會去調用UNI 合約做UNI 的轉移,把UNI 從用戶地址轉到Vault 合約的地址上,也就是把UNI 鎖住。鎖完之後,Vault 合約就會發一個事件,比如叫AssetLock 事件。

鏈下進程是通過RPC 接口連在以太坊節點上的,它會訂閱Vault 合約的AssetLock 事件,這個事件只要一出現在日誌里,鏈下進程就得到這個事件了,這個事件里包含相關參數,比如鎖定的是哪個幣,鎖了多少,另一條鏈上的受益人是誰。鏈下進程也有一個連接PlatON 的RPC接口,它會提交一筆交易到PlatON,假設這筆交易叫Mint。

PlatON 上也會有一個合約,比如叫Control 合約,它是跨鏈橋的另一個橋墩;Control 合約事先會創建一個類似ERC20 的合約,比如叫EUNI。Control 合約收到Mint 請求后,驗證這個請求確實來自於見證人,就會調用EUNI 合約的Mint 方法,告訴它給某個地址鑄造500 個EUNI 代幣;EUNI 鑄造出來后,就會放在用戶之前提供的地址上,用戶就可以用了。

假設用戶把EUNI 轉給了另外一個用戶,新用戶想要以太坊上的UNI,那他要做的操作是調用Control 合約的Redeem 方法,燒掉比如說100 個EUNI,並釋放一個事件叫AssetBurn。

鏈下進程監控到Control 合約的AssetBurn 事件,就會給以太坊Vault 合約發一個交易請求,調用Release 接口,以太坊驗證這個交易是來自於見證人後,就會把UNI 從Vault 合約的地址上轉移到指定的用戶地址上,用戶就得到了原始的UNI。這就是一個完整的跨鏈過程。”

——劉毅,《一文詳解跨鏈的技術點及難點:從完美跨鏈談起》

簡單而言,跨鏈是先在A鏈上做一個操作,然後由一個傳話的人把這個消息告訴B鏈,之後B鏈做一個對應的操作。從中也可見側鏈與Layer 2方式的不同,側鏈只在跨鏈發生時與主鏈通消息,而Layer 2定期要與Layer 1通消息。

雖然跨鏈說的是把資產從A鏈跨到B鏈,但B鏈是沒有真正的A鏈資產的(沒有麥子),比如,比特幣鏈之外的任何鏈上都不會有真正的BTC,以太坊之外的任何鏈上都不會有真正的ETH。用戶在B鏈上收到的是什麼取決於不同的跨鏈實現方式。

鎖定+鑄造

鎖定+鑄造方式這樣工作:在A鏈鎖定資產,在B鏈鑄造出對應的資產;在B鏈銷毀鑄造出的資產,在A鏈解鎖對應的資產。

用戶在B鏈收到的,是他使用的跨鏈協議鑄造出來的資產,比如使用Ren 跨鏈協議,收到的便是renBTC,它類似於BTC 的某種等值兌換券。只要跨鏈協議和B鏈不出問題,這種兌換券便不會有問題。

鎖定+解鎖

假如有一種代幣叫test,其發行方在A鏈和B鏈都發行了代幣,那針對這種代幣就可以使用鎖定+解鎖方式:在A鏈鎖定資產,在B鏈釋放等額資產;在B鏈鎖定資產,在A鏈釋放等額資產。

在這種情況下,用戶在B鏈收到的不是類似於兌換券的「假」資產,而是「真」資產。用戶不用擔心跨鏈橋出問題,因為不再需要依賴跨鏈橋把資產跨回源鏈兌現,鎖定+解鎖方式對跨鏈橋的使用可以是單方向、一次性的。(文中的真、假並無褒貶意,只為清晰區分不同的跨鏈方式)

這種跨鏈方式安全、利落,但只適用於在多條鏈上都做了發行的token,且需要發行方與跨鏈協議合作。它也許是最優選擇,但單獨使用時是不具有普適性的。

跨鏈池:兌換

兌換的方式需要引入跨鏈池這個新主體。跨鏈池既不位於源鏈,也不位於目標鏈,它位於提供跨鏈服務的協議的鏈上,其工作方式如下圖所示(以Poly Network為例):

科普 | 一文理清跨layer與跨鏈方式

用戶的USDT 從以太坊跨鏈到BSC 的過程如下:先在以太坊上鎖定USDT,然後在Poly 上釋放PUSDT,之後在跨鏈池中把PUSDT 兌換為PBUSD,接着在Poly 上鎖定PBUSD,最後在BSC 上釋放BUSD。

這個過程看上去比較複雜,有兩次跨鏈操作加一次交易操作,不過對跨鏈用戶而言該過程是無感的,他放入以太坊上的USDT,得到BSC 上的BUSD。在兌換方式下,用戶在目標鏈收到的是「真」資產,因此也不用擔心跨鏈橋出問題。

這種跨鏈方式之所以被發明並開始變得流行,是因為它能帶來兩個好處:

1.隨意跨token。用戶可以在以太坊上放入任意token,獲得BSC 上他希望的任意token。在下圖的例子中,用戶放入ETH,獲得BNB。

科普 | 一文理清跨layer與跨鏈方式

相比對應幣種的跨鏈,該跨鏈過程需要多一次的交易操作,此交易並不是發生在跨鏈協議的交易池裡,而是發生在源鏈或目標鏈本來的交易協議中,跨鏈協議在此處分別提供源鏈和目標鏈的DEX 聚合器功能,為用戶尋找源鏈或目標鏈上最好的交易價格。

至於交易是發生在源鏈還是目標鏈,取決於哪種跨鏈路徑上的價格更好,比如該跨鏈過程也可以是:ETH-PETH-PBETH-BETH-(BETH:BNB)-BNB。

更進一步,假設用戶想把ETH 換為USDT,此時BSC 上的交易價格好於以太坊,那麼一種可能的交易路徑是:ETH-PETH-PBETH-BETH-(BETH:BUSD)-BUSD-PBUSD-PUSDT-USDT。有一些協議稱打通不同鏈的流動性,我想很大程度上便是指這件事情,這種跨鏈架構能夠通過交易路徑的選擇,給用戶提供多條鏈上最好的交易價格

2.隨意跨鏈。鎖定+解鎖方式是兩條鏈的直連:跨鏈協議在以太坊與BSC 之間建了一條跨鏈橋,在以太坊與Polygon 之間建了一條跨鏈橋,這時候如果想實現BSC 與Polygon 之間的跨鏈,就需要在BSC 與Polygon 之間再新建一條跨鏈橋。

兌換方式通過跨鏈池把多條鏈連接起來,可實現該架構中任意兩條鏈之間的跨鏈:跨鏈協議接入了以太坊和BSC,這時候如果它接入Polygon,就可以提供Polygon 與以太坊、Polygon 與BSC 間的跨鏈,無需再一一建橋。其結構如下圖所示:

科普 | 一文理清跨layer與跨鏈方式

「跨鏈池:兌換」方式可能會催生一個或多個跨鏈底層協議:各個想要在自己應用中提供跨鏈功能的協議,只需接入這些跨鏈協議即可支持跨鏈;而另一方面,「跨鏈池:兌換」也是應用自己做鏈的方式,已有一些DeFi 應用聲明將要做鏈,它們的鏈並不是像公鏈一樣支持各種應用的鏈,而很大可能是上文所述的這樣一條維護它自己的多鏈的流動性池的鏈。

要注意的是,兌換方式與鎖定+鑄造方式並不一種取代對方的關係,它們解決不同的問題。兌換方式的跨鏈是基於兩條鏈上已經存在的資產的,它不能把目標鏈上沒有的資產從源鏈「帶」過去,當需要在目標鏈鑄造源鏈資產時,需要使用鎖定+鑄造的方式。

跨鏈的其他分類維度

跨鏈需要第三者在兩條鏈之間傳話,上述3種跨鏈方式都不例外。這個傳話的第三者可以是許可式的,比如由跨鏈協議組建的聯盟;也可以是非許可式的,比如由無需許可進入的節點。因此便有3×2=6 種跨鏈方式。

跨鏈還可以分為見證人跨鏈和中繼跨鏈,它們的區別是:

“當目標鏈收到一個消息后,如果是見證人跨鏈,驗證的是這條消息來自於見證人,如果相信見證人,就執行該執行的操作;如果是中繼跨鏈,驗證的不是這條消息來自於哪個中繼,驗證的是這條消息是不是來自於源鏈,如果是,就執行該執行的操作。

也就是說,見證人可以看做是需要被信任的中繼,中繼可以看做是無需被信任的見證人。這就是兩者的核心區別,中繼顯然比見證人更符合trustless 的原則。”

——劉毅,《一文詳解跨鏈的技術點及難點:從完美跨鏈談起》

中繼跨鏈優於見證人跨鏈,在這種方式中,負責傳話的第三者是無法作惡的,但該方式需要兩條鏈上互有對方鏈的輕客戶端,而有些鏈是沒有辦法實現別的鏈的輕客戶端的,比如比特幣。

因此這種分類方法不會帶來6×2=12 種跨鏈方式,而是:如果有條件實現中繼跨鏈,跨鏈協議都會去實現它或者以實現它為目標;如果沒有條件實現中繼跨鏈,也只能以見證人的方式跨鏈。

以上是關於跨鏈的全部。跨鏈是跨到另一個賬本記賬,有3種不同的跨鏈方法,不同的方法決定了當跨到目標鏈后你擁有的是什麼,也決定了對跨鏈橋的不同的依賴程度。

結束語:

提到跨鏈,我們還會談論波卡與Cosmos。但實際上波卡並不是為跨鏈服務的,它是一個以鏈為單位的結構體,它的跨鏈是指這個結構體內部的鏈與鏈的交互;Cosmos 則是為跨鏈服務的,它做的是鏈之間的通信標準,採用其標準的鏈易於實現跨鏈,但前提是要採用其標準。

最後想要表達的是,雖然現在有一批發展中的公鏈,但其中的絕大部分與以太坊是相似的,真希望未來能出現一些與以太坊不太一樣的公鏈,不是在性能上的不一樣,而是在能做的事情上的不一樣。

本文鏈接:https://www.8btc.com/article/6647580

轉載請註明文章出處

(0)
上一篇 2021-06-10 14:45
下一篇 2021-06-10 15:38

相关推荐