# LayerZero ### LayerZero為何引起關注? <blockquote class=twitter-tweet"><p lang="en" dir="ltr">First off: we did indeed buy all the tokens. We love the team and what they&#39;re doing, and we believe this space and the technology they&#39;re building is really important.</p>&mdash; Sam Trabucco (@AlamedaTrabucco) <a href="https://twitter.com/AlamedaTrabucco/status/1506306852396617732?ref_src=twsrc%5Etfw">March 22, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> **上面推文中,Alamenda Research 在 Stargate Finance 官方代幣拍賣時,掃光了所有拍賣的代幣 (10%的份額),其背後的 LayerZero 的跨鏈技術帶來的豐富想像,使大眾對這個項目充滿期待。** --- ### 簡介 **區塊鏈核心為去中心化(decentralization)、透明度(transparency)和不變性(immutability),沒有單一實體可以控制區塊鏈,區塊鏈的應用落地催生了許多不同的區塊鏈用於專業用途,因此用戶和開發人員必須在不同的區塊鏈上分配資源以及流動性。代幣在不同鏈上的交換,傳統的作法上,中心化交易所顯然違背去信任化,至於某些部份去中心化交易所(DEX),例如 AnySwap 或 THORChain 通過在鏈上進行傳輸緩解信任問題,但須將代幣轉換成特定協議的代幣,該代幣傳輸在中間共識層用以實現交易共識,中間共識層雖然相對安全,但用戶仍需信任側鏈(中間共識層),LayerZero認為這種額外成本是不需要的。LayerZero 不僅僅可以為代幣交換的應用,他是支持各種跨鏈應用的通訊語言,代幣交換只是在 LayerZero 上的其中一種實作應用。** **透過 LayerZero 鏈 A 和鏈 B 跨鏈通訊,通訊組成主要由 A 鏈上的 transaction(tA)和 A 與 B 之間的通訊協議m組成。當tA完成提交,m 才會傳輸。LayerZero 主要構想就是假設有兩個實體(Relayer 及 Oracle),可以證明 tA 的有效性,跨鏈交易就可以做到。** **兩個不串通的實體(Relayer 及 Oracle),其中一個實體提供區塊頭(block header),另一個獨立的實體對塊上的 tA 生成證明,並且區塊頭和 tA 證明實際是一樣的,通過通訊協定將 m 傳送到鏈 B,並因為已經驗證了塊頭和 tA 證明,所以可以保證 tA 在鏈 A 已經提交,過程不涉及任何中間鏈。上面的概述,LayerZero 通過兩個獨立的實體來實現,一個是提供區塊頭的Oracle,一個是提供相關證明的Relayer** **LayerZero 的接口是一個輕量化的鏈上客戶端,稱為 LayerZero 的端點(Endpoint),基本上只要擁有 LayerZero 端點的區塊鏈,都可以透過 LayerZero 進行跨鏈交易** --- ### LayerZero的優勢以及與其他方案的比較 * **以太坊(Ethereum)是擁有圖靈完備(Turing-complete)的區塊鏈,受到開發者的歡迎,但其低下的TPS(每秒15-45),是一個嚴重的擴展性瓶頸,限制了以太坊的應用普及,但這也造就 layer2 等擴展項目或其他性能更好的鏈受到關注,同時以太坊與其他鏈連接的技術也變得更加重要。LayerZero 相比其他與以太坊連接的跨鏈技術,更加去中心化以及擁有更低的使用成本。** * **Ethereum2.0 引入分片(Sharding)技術增加可擴展性,並且轉換成 PoS(Proof-of-stake),降低每筆交易的耗能,這些改變能使以太坊應用更加普及,這對 LayerZero 是好事,因為會有更多的跨鏈需求。** * **Polygon 是一個 Layer2(有些人覺得是 Side chain)網路,可以解決以太坊吞吐量的問題,專門或是需要吞吐量高的應用,可以部屬在 Polygon 側鏈上運行,並定期整併回以太坊主鏈。相比之下,LayerZero 可以實現直接的鏈間通訊,不用 Polygon 協定的複雜性。** * **Polkadot 是早期跨鏈生態系統的項目,許多並行鏈通過公共中繼鏈連接,使代幣和數據可以在鏈之間流通,然而鏈間通訊通過中繼鏈需要額外成本,相比之下,LayerZero 提供與 Polkadot 相同的底層通訊平台,跨鏈交易通過兩個實體(Relayer 及 Oracle),相比 Polkadot 通過中間人(中繼鏈)能減少額外成本。** * **THORChain 跟 AnySwap 皆是 DEX,都需要透過中間代幣(RUNE、ANY)完成跨鏈轉帳,LayerZero 提供直接的鏈間通訊,所以不須繁瑣的協定以及中間代幣。** * **Cosmos 是一種區塊鏈網路技術,允許在支持的鏈上傳送任意的訊息,Cosmos 的共識演算法是Tendermint BFT,並在這之上建立跨鏈通訊協議(Inter-Blockchain Communication, IBC),Cosmos 與 LayerZero 不同在於(1)IBC 是建立一個完整的輕節點(light node)(2) IBC 只提供直接通訊在快速終結(fast-finality)鏈上,fast-finality 下方有額外說明,IBC 的這些限制,再加上他使用中間鏈(Cosmos Hub)來促進共識,使其類似於 Anyswap、THORChain 或 Polkadot,而不是像 LayerZero 這樣的通用通訊層。Cosmos 還提供了一個與 Anyswap 或 THORChain 具有相似屬性的 DEX,稱為重力橋(Gravity Bridge)。與 Cosmos 和 IBC 相比,LayerZero 提供去信任的全鏈訊息傳遞,並且可以擴展在任何鏈上運行,包括那些提供概率確定性(probabilistic-finality)的鏈,例如以太坊和比特幣。** * **Chainlink 是一個用於構建和連接去中心化預言機網絡的框架。Chainlink 可以提供智能合約鏈下數據例如:股票價格等,DON 將智能合約的防竄改性擴展到合約所依賴的數據源和外部資源,而不用信任人和中央實體。通過利用 Chainlink DON 框架,LayerZero 協議獲得了確保在不同鏈之間進行消息傳遞的能力。Chainlink 資料來源如果沒有多人使用,提供資料來源的人少,就容易有造假的問題,所以 LayerZero 額外增加了 Relayer 降低跨鏈訊息被造假的風險。** **額外說明:** 1. **快速終結(fast-finality)** **比特幣和以太幣有最長鏈原則,當交易被包在區塊中出塊後,並不代表交易就不會被取消(回滾),需要再等待足夠的新區塊被產生,如此才能在機率上確保區塊交易不會被取消。但 Cosmos 這類的區塊鏈,其共識機制的不同,當區塊被產生後,其中的交易就會被確認(終結),不會有被取消的風險,並且為了保證快速(fast),出塊會在一定時間內完成。。** 3. **為甚麼封裝代幣被廣泛使用?** **項目方在做跨鏈轉帳的交易時,如果沒有封裝代幣就必須在各個支援的鏈上注入流動性,譬如 Ethereum 轉帳到 Polygon,沒有封裝代幣項目方就必須在 Polygon 放置一定額度的 Matic,當跨鏈轉帳交易發生時,就要在 Polygon 上把相同價值的 Matic 轉到使用者錢包,這邊會有幾個問題,第一是跨鏈支援的鏈越多,跨鏈項目方需要越多的資金放置在各鏈上。第二是這種方式如果使用者是大額轉帳,容易資金不夠。如果採用封裝代幣,項目方可以無限制的發封裝代幣給使用者,只要維持各個鏈上封裝代幣交易對的價值穩定就好,項目方還可以在不同的鏈上進行封裝代幣的交易對套利。** 5. **區塊頭(Block header) 是甚麼?** **區塊頭內的數據是唯一的,數據包括上一個區塊的雜湊值(Hash value)、用於挖礦的軟體版本、時間戳以及交易內容的 Merkle tree 雜湊值。** --- ![](https://i.imgur.com/KDeJBg8.png) 圖片來源:[LayerZero White Paper](https://layerzero.network/pdf/LayerZero_Whitepaper_Release.pdf) ### 簡單說明 **上圖最左邊是一個中心化的交易所,顯然不是一個符合區塊鏈理念的存在。中間的圖,透過DEX能避免中心化,但需要通過中間鏈或封裝代幣,這些都增加了額外的成本。最右邊的圖,LayerZero 實現鏈與鏈直接通訊,避免中心化、中間鏈以及封裝代幣等等問題。** --- ### LayerZero 定義的去中心化鏈間通訊屬性 **有效交付(Valid delivery) 是一種通訊原語(communication primitive),通過以下保證來實現跨鏈訊息傳輸:** **1. 跨鏈傳輸的 message(m),在「發送鏈」上與 transaction(t) 耦合。 2. 僅在 t 有效且已經在「發送鏈」上後,訊息 m 才會傳送給「目標鏈」。** ### 中心化交易所如何使用有效交付? **這邊會說明使用者透過中心化交易所實現跨鏈轉帳的過程,首先使用者在發送鏈上將代幣(token) 轉到中心化交易所上,這個過程,使用者需先在發送鏈上發起轉帳交易(上述第一點傳輸的訊息),轉到中心化交易所的地址,等這個交易確認提交後,交易所就會在他的資料庫上更新使用者的餘額,這時使用者去選擇要轉到的目標鏈(交易所有支援的) ,並將款項轉出,這個過程,交易所會扣掉使用者的轉出款項後,在目標鏈上發起轉帳交易,在目標鏈上將代幣轉到使用者地址,交易所在這扮演的腳色就類似上面第二點定義,交易所確認了發送鏈的交易正確提交後,再依據使用者的需求在目標鏈發起轉帳交易,將款項轉給使用者,交易所在目標鏈上發起交易的動作,就很像是將訊息 m 帶到目標鏈上。顯然這邊會有過度中心化的問題,使用者必須信任中心化交易所。** ### 去中心化交易所如何使用有效交付? **去中心化交易所例如:THORChain 或 AnySwap,在鏈與鏈之間加入共識層,這個共識層會確保來源鏈上的交易被確認,並在目標鏈上鑄造封裝代幣,但這樣的方式並不完美,因為DEX需先將要傳送的貸幣轉換成封裝代幣,在目標鏈上還要將封裝代幣換成想要的代幣,如此將增加轉換代幣的手續費。** ### 鏈間交易的理想方式 **鏈間交易的理想方式是單筆 swap 就能完成,並且不必信任任何中間實體(鏈或交易所),也就是無需信任的有效交付。LayerZero 實現了一個通用的通訊協議,這個協議提供任何訊息的傳送,不單單只是代幣傳送而已。** --- ### LayerZero 元件(component) **LayerZero 端點(Endpoints)是面向使用者的介面,參與 LayerZreo 通訊協定的鏈,自身鏈上都會有智能合約去實現 LayerZero 端點,端點目的是讓使用者使用LayerZero後端發送消息,保證有效傳遞。** **LayerZero 端點分為四個模塊(modules):** 1. **溝通者(Communicator)** 2. **驗證者(Validator)** 3. **網路(Network)** 4. **庫(Libraries)** **這四個模塊構成了端點的核心功能,如果有新的鏈加入 LayerZero,相關的程式會附加在庫中,並不會影響到其他三個模塊。** **Oracle 是第三方服務,並不是 LayerZero 的元件,其功能是將一個鏈的塊頭(Block header)送到另一個鏈上,理論上預言機(Oracle)可以是任何第三方服務,但在目前的選擇中使用得是 Chainlink,因為 Chainlink 是目前預言機的技術領先項目。** **中繼器(Relayer)是一種鏈下服務,其功能類似預言機,但它不是獲取區塊頭,而是獲取指定交易的證明,但為了不去信任任何的第三方,所以中繼器和預言機必須彼此獨立,理論上中繼器可以是使用者獨立實現的服務,這樣就不會有預言機與中繼器相互勾結的問題,這種相互的獨立性,可以使我們實現去信任的驗證交付。在本篇 Paper 的實踐中,預言機採用 Chainlink 而中繼器為 LayerZero 團隊所做。** --- ![](https://i.imgur.com/ezUlz47.png) 圖片來源:[LayerZero White Paper](https://layerzero.network/pdf/LayerZero_Whitepaper_Release.pdf) ### 上圖 LayerZero 傳遞單個訊息的詳細說明 **上圖的案例是鏈 A 上的使用者應用程式,通過 LayerZero 向鏈 B 的使用者應用程式發送單個訊息。** **第一步: 鏈 A 的使用者應用程式會執行一系列一部分交易 T 的動作,產生一個全域唯一的標識符(identifier)t 代表交易 T,該標識符的格式會因為鏈的不同而有所不同,** **在這邊假設一個場景,應用 A 正在使用圖中的 LayerZero 的配置,希望將訊息跨鏈傳送到鏈 B 的應用。** **應用 A 向 LayerZero Communicator 發送包含以下訊息的請求。** 1. **t:交易 T 的唯一標識符** 2. **目標鏈(dst):代表鏈 B 的全域唯一標識符** 3. **有效附載(payload):應用 A 要發送給應用 B 的任意訊息** 4. **中繼器參數(relayer args):描述應用 A 希望使用的中繼器參數** **第二步: Communicator 建構一個包含 dst 和 payload 的 LayerZero 數據包,稱為 Packet,並將其與 t 和relayer args 一起發送到 Validator。** **第三步: Validator 將 t 和 dst 發送到 Network。這步驟是要通知 Network 將鏈 A 的目前的塊頭,發送到鏈 B。** **第四步: Validator 將 Packet、t 和 relayer args 轉發給 Relayer ,通知 Relayer 交易 T 的交易證明需要預先索取並最終發送到鏈 B,這與第三步同時發生。** **第五步: Network 將 dst 和當前交易的塊 ID 發送給 Oracle。這個目的是通知 Oracle 獲取鏈 A 上當前區塊的區塊頭,並將其發送到鏈B,如果同一塊之中有多筆 LayerZero 交易,則步驟五只執行一次。** **第六步: Oracle 從鏈 A 讀取區塊頭。** **第七步: Relayer 從鏈 A 讀取與交易 T 相關的交易證明,如果 Relayer 是鏈下(off-chain)的則儲存相關證明。第六步和第七步是異步(asynchronously)發生的。** **第八步: Oracle 確認 blk_hdr(區塊頭)對應的塊在鏈 A 上穩定提交(等待足夠的塊出塊)後,接著將 blk_hdr 發送到鏈 B 上的 Network 。確定何時發生這種情況的機制因鏈的不同而有所不同,但通常需要等待一定數量的區塊確認。** **第九步: 鏈 B 的 Network 將指定的 blk_hdr 的區塊雜湊值(blk_hdr_hash)發送到 Validator。** **第十步: 鏈 B 的 Validator 將 blk_hdr_hash 轉發給 Relayer。** **第十一步: Relayer 接收到鏈 B 的 Validator 傳送的 blk_hdr_hash 後,Relayer 發送與 blk_hdr_hash 匹配的 Packet, t, proof 元組(tuples)列表(list)給鏈 B 的 Validator。這邊匹配的 Packets 可能有很多個,所以列表中可能有多個 Packets,因為如果多個使用者同時在同一端點發送訊息,則同一個區塊內可能存在多個 Packets 和其相關的交易證明。** **第十二步: 鏈 B 的 Validator 使用接收到的交易證明與 Network 存儲的區塊頭一起驗證關聯的交易 T 是否有效並且確認後將提交結果。如果區塊頭和交易證明不匹配,則丟棄該訊息。如果它們匹配,則將 Packets 發送到鏈 B 的 Communicator。** **第十三步: 鏈 B 的 Communicator 向鏈 B 的應用程式發送 Packets。** --- ### LayerZero 如何達成去信任(trustless)的有效交付? **在 LayerZero 的設計中僅在區塊頭和交易證明匹配時,驗證才會成功,所以只會有以下兩種場景:** 1. **Oracle 的區塊頭和 Relayer 的交易證明皆有效。** 2. **Oracle 的區塊頭和 Relayer 的交易證明無效,但能匹配成功。** **理論上,Oracle 和 Relayer 串通的機會很小,在 LayerZero 的想像中 Relayer 可以是使用者自己建構的,所以可以直覺認為這是很難串通的(自己 rug 自己?),在很難串通的情況下,接著在密碼學統計上,不可能在不知道特定區塊頭的情況下,發送針對該區塊頭的交易證明。** --- ### LayerZero 端點成本可擴展性 **許多讀者可能會有個疑問,端點在 layer1 運行智能合約的成本很高,更何況隨著交易的次數增加,需要儲存的資料量增多,費用會進一步增加,所以為了使 LayerZero 端點實用,項目團隊有將客戶端的端點盡可能輕量化(細節下一段會說明)。項目團隊觀察到不需要在端點複製和儲存塊頭,這樣會造成成本增加,所以在 LayerZero 的設計中,獲得必要塊頭和交易證明的工作,是交給 Oracle 和 Relayer 所處理的,這樣做能讓 LayerZero 的客戶端端點相當輕量化,節省相當多的交易手續費,在 Ethereum 這樣昂貴的手續費公鏈上,也能具備成本效益。** --- ### LayerZero 在 Ethereum 實現的細節 **LayerZero 在不同的鏈會有不同實現的細節,首先在 Ethereum 實現的 Oracle 採用的是 chainlink,Relayer 則是項目團隊所開發的** **LayerZero 的 packet 格式則會根據來源鏈和目標鏈的不同而有所不同,格式細節如下表所示。** | **參數** | **說明** | | ---------------- | ------------------------------------------------------------------------------------ | | **鏈 ID** | **在 LayerZero 上每條鏈的全域唯一標識符** | | **地址(address)** | **在目標鏈上要接收訊息的智能合約地址** | | **使用者參數 0 - N** | **由使用者應用所發送的有效附載(payload) , 在 Ethereum 上可以是包含 N 個 bytes 的參數** | --- ### 發送鏈的交易穩定性如何? **為了確保交易的穩定性,避免「發送鏈」的交易失敗或回朔的同時,「目標鏈」的合約卻執行「發送鏈」訊息的這種問題,LayerZero 採用預言機的固有屬性,預言機只有在觀察到一定數量的出塊後,才會通知目標鏈,例如在 Ethereum 上,區塊確認需要15個區塊,準確地說,Oracle 只有在 Ethereum 15 個區塊確認後才會執行。** --- ### LayerZero 的 Endpoint **項目方將 LayerZero Endpoint 透過一系列的智能合約實現,其模塊組成就是前面所介紹的溝通者(Communicator)、驗證者(Validator)、網路(Network)以及庫(Libraries)。其中Communicator、Validator 和 Network 分別作為單獨的智能合約來實現。Libraries 是能在 Ethereum 上使用 LayerZero 的關鍵,Libraries 需要實現如下圖可以處理相容 EVM 的 LayerZero packet,並能處理 EVM 智能合約地址信息的編碼和解碼。庫的另一個工作是處理驗證交易證明所涉及的實際計算。項目開發的 EVM 庫處理 EVM 塊上交易的 Merkle-Patricia 樹驗證,是基於 Golden Gate 的開源實現。** ![](https://i.imgur.com/RE0YOrt.png) 圖片來源:[LayerZero White Paper](https://layerzero.network/pdf/LayerZero_Whitepaper_Release.pdf) --- ### LayerZero 的實際應用 1. **去中心化跨鏈交易所** **LayerZero 項目方有在基於 LayerZero 的技術上,開發一個去中心化跨鏈交易所叫 Stargate,詳細內容可以參考我之前寫的文章 https://hackmd.io/@hugebing/Stargatem。** 2. **多鏈收益聚合器** **當前的收益聚合器通常在單鏈生態系統的範圍內運行,Yearn Finance 等項目使用單鏈策略實現收益聚合。這些單鏈收益聚合系統的一個主要弱點是,它們無法利用當前生態系統之外的任何收益機會,可能會錯過許多最佳收益。使用 LayerZero 進行跨鏈交易的收益聚合器將允許利用所有生態系統中的最佳機會的策略,增加獲得高收益的機會,並使用戶能夠利用市場低效率賺取更多收益。** 3. **多鏈借貸** **假如今天資產都在 Ethereum 的使用者,像要在 Polygon 上投資,使用者就必須將資產轉移到Polygon,或者在 Ethereum 借出,之後借入的資產再跨鏈轉到Polygon上,透過 LayerZero 就可以直接在 Ethereum 上直接借出,並在 Polygon 上直接借入,這樣就避免了中介費用,例如橋(bridge)和交換(swap)手續費。** --- ### 結論 **LayerZero 透過兩個實體(Relayer 及 Oracle)達到去中心化的跨鏈交易,並且通過這種方式不需要中間鏈等額外的開銷,白皮書中還描繪了三種未來應用的場景,包括去中心化跨鏈交易所、多鏈收益聚合器以及多鏈借貸,使跨鏈應用充滿想像。LayerZero 是一種技術,不是一個可投資的項目,因為其組成的元件 Relayer 及 Oracle,並不限制使用 LayerZero 所做的,如果讀者想投資,可以關注 LayerZero 其衍生的應用。** --- ### 參考文獻 [LayerZero White Paper](https://layerzero.network/pdf/LayerZero_Whitepaper_Release.pdf) --- **作者:hugebing 協作人:y.w. 審稿人:狸貓(bill)** ### 以上文章內容不構成投資建議 ###### tags: `Blockchain Articles`