比特幣 Layer2 網路Merlin已經成為最大且最受關注的網路,擁有數十億美元的總鎖定價值(TVL)。本文將專注於Merlin Chain的技術方案,解讀其公開文件和協議設計思路,以便讀者更好地理解這個「頂級比特幣 Layer2」的運作方式。
Merlin的去中心化預言機網路:開放性的鏈下DAC委員會
安全模型分析:樂觀的ZKRollup+Cobo的MPC服務
基於Lumoz的兩步驗證式ZKP提交方案
Merlin的幻影:多鏈互操作
總結
從2023年的銘文之夏開始,比特幣 Layer2一直是Web3的關鍵議題。儘管它的興起比以太坊 Layer2晚,但由於其POW的獨特魅力和現貨ETF的成功推出,比特幣在短短半年內就吸引了數十億美元的資本關注,而且不需要擔心「證券化」風險。
在比特幣 Layer2領域中,Merlin毫無疑問是最大且最受關注的網路。憑藉著明確的質押激勵和可觀的收益率,Merlin在短短幾個月內突然崛起,創造了一個超越Blast的生態神話。隨著Merlin的熱度不斷上升,關於其技術方案的討論也越來越受到關注。
在本文中,我們將聚焦於Merlin Chain的技術方案,解讀其已公開的文件和協議設計思路。我們致力於讓更多人理解Merlin的工作流程,對其安全模型有更清晰的認知,以更直觀的方式來理解這個「頂級比特幣 Layer2」的運作方式。
Merlin的去中心化預言機網路:開放性的鏈下DAC委員會
對於所有的Layer2來說,無論是以太坊 Layer2還是比特幣 Layer2,數據可用性(DA)和數據釋出成本都是最需要解決的問題之一。由於比特幣網路本身存在諸多問題,無法支援大量數據的傳輸,如何利用有限的DA空間成為Layer2項目想像力的考驗。
有一個結論是顯而易見的:如果Layer2直接將未經處理的交易數據釋出到比特幣區塊中,既無法實現高吞吐量,也無法實現低手續費。最主流的解決方案之一是通過高度壓縮數據,將數據大小壓縮到最小,然後上傳到比特幣鏈中,或者將數據直接釋出在比特幣鏈下。
採用第一種思路的Layer2中,最著名的可能是Citrea。他們計劃將一段時間內Layer2的狀態變化(state diff),也就是多個帳戶上的狀態變更結果,連同對應的ZK證明一起上傳到比特幣鏈上。這樣可以將上鏈數據的大小壓縮90%以上。
儘管這種方法可以極大程度地壓縮數據大小,但瓶頸仍然存在。如果在短時間內有大量帳戶發生狀態變化,Layer2需要將這些帳戶的變化情況全部上傳到比特幣鏈上,最終的數據釋出成本無法降低,這在許多以太坊ZK Rollup上非常明顯。
許多比特幣Layer2選擇走第二種路徑:直接使用比特幣鏈下的DA解決方案,要麼自己搭建一個DA層,要麼使用Celestia、EigenDA等。B^Square、BitLayer和Merlin等都採用了這種鏈下的DA擴容方案。
B^2直接模仿Celestia,在鏈下搭建了一個支援數據取樣功能的DA網路,稱為B^2 Hub。交易數據或state diff等「DA數據」存放於比特幣鏈下,只向比特幣主網上傳datahash/merkle root。
這實際上將比特幣視為一個去中心化的公告板:任何人都可以從比特幣鏈上讀取datahash。當你從鏈下的數據提供者那裡獲取DA數據後,可以檢查它和鏈上的datahash是否對應,即hash(data1) == datahash1?如果兩者對應,說明鏈下的數據提供者給你的數據是正確的。
上述流程可以確保鏈下節點提供給你的數據與Layer1上的某些「線索」相關聯,防止DA層提供虛假數據。然而,如果數據的源頭(Sequencer)根本沒有發布對應的數據,只將datahash發布到比特幣鏈上,並故意扣留對應的數據,那該怎麼辦?
類似的情況包括但不限於:只釋出ZK Proof和StateRoot,而不釋出對應的DA數據(state diff或transaction data)。儘管人們可以驗證ZK Proof,確定Prev_Stateroot到New_Stateroot的計算過程是有效無誤的,但卻不知道有哪些帳戶的狀態發生了變化。
在這種情況下,儘管用戶的資產是安全的,但大家根本無法確定網路的實際狀態,不知道有哪些交易被打包上鏈,哪些合約的狀態發生了更新。這時的Layer2基本上等同於停機。
這實際上就是「數據扣留」,以太坊基金會的Dankrad曾在2023年8月在推特上討論過類似的問題,主要針對的是名為「DAC」的東西。
許多以太坊Layer2採用鏈下DA方案時,通常會設定幾個具有特殊許可權的節點,組成一個委員會,稱為Data Availability Committee(DAC)。這個DAC委員會充當擔保人的角色,對外聲稱:Sequencer在鏈下發布了完整的DA數據(transaction data或state diff)。然後DAC節點集體生成一個多簽,只要多簽滿足閾值要求(例如2/4),Layer1上的相關合約就會預設Sequencer通過了DAC委員會的檢查,如實地在鏈下發布了完整的DA數據。
以太坊Layer2的DAC委員會通常遵循POA模式,只允許少數通過KYC或官方指定的節點加入,這使得DAC成為「中心化」和「聯盟鏈」的代名詞。此外,在某些採用DAC模式的以太坊Layer2中,排序器只將DA數據發送給DAC成員節點,幾乎不會再上傳到其他地方,任何人要獲取DA數據都必須得到DAC委員會的許可,與聯盟鏈沒有本質上的區別。
毫無疑問,DAC應該是去中心化的,Layer2可以不將DA數據直接上傳到Layer1,但是DAC委員會的准入許可權應該對外開放,這樣才能防止少數人串謀作惡。Celestia此前提出的BlobStream本質上是用Celestia取代中心化的DAC,以太坊Layer2的排序器可以將DA數據發布到Celestia鏈上,如果有2/3的Celestia節點簽名,以太坊上部署的Layer2專屬合約就認為排序器如實地發布了DA數據,這實際上是讓Celestia節點充當擔保人。考慮到Celestia擁有上百個驗證節點,可以認為這個大型DAC是相對去中心化的。
Merlin採用的DA解決方案與Celestia的BlobStream相似,都是通過POS的形式開放DAC的准入許可權,使其趨向去中心化。只要質押足夠的資產,任何人都可以運行一個DAC節點。在Merlin的文件中,將上述DAC節點稱為Oracle,並指出將支援BTC、MERL甚至BRC-20代幣的資產質押,實現靈活的質押機制,並支援類似於Lido的代理質押。預言機的POS質押協議是Merlin接下來的核心敘事之一,提供的質押利率等都比較高。
在這裡,我們簡要介紹一下Merlin的工作流程(下圖):
1. 排序器Sequencer接收到大量交易請求後,將其彙總並生成數據批次(data batch),傳給Prover節點和Oracle節點(去中心化的DAC)。
2. Merlin的Prover節點是去中心化的,使用了Lumoz的Prover as a Service服務。Prover礦池在收到多個數據批次後,會生成對應的零知識證明(ZKP),然後將ZKP發送給Oracle節點進行驗證。
3. Oracle節點將驗證Lumoz的ZK礦池發來的ZK Proof,看是否與Sequencer發來的數據批次相對應。如果兩者可以對應且沒有其他錯誤,則通過驗證。在此過程中,去中心化的Oracle節點將通過門限簽名生成多簽,對外宣稱——排序器完整地發布了DA數據並且對應的ZKP是有效的,通過了Oracle節點的驗證。
4. 排序器從Oracle節點收集多簽結果,當簽名數量滿足閾值要求時,將多簽信息發布到比特幣鏈上,附帶數據批次的datahash,供外界讀取和確認。
5. Oracle節點對其驗證ZK Proof的計算過程進行特殊處理,生成承諾(Commitment),並將其發送到比特幣鏈上,允許任何人對「承諾」進行挑戰。
此外,Merlin還提到了一個有趣的點,即他們正在探索如何實現多鏈互操作性,這將使Merlin在不同的區塊鏈之間進行資產轉移和交互操作。
總而言之,Merlin Chain作為比特幣 Layer2網路,通過採用去中心化的預言機網路和開放的鏈下DAC委員會,解決了數據可用性和數據釋出成本的問題,提供了一個安全且高效的Layer2解決方案。通過質押機制和POS的驗證過程,Merlin確保了數據的可信度和去中心化。這個「頂級比特幣 Layer2」的運作方式為我們提供了更多洞察力和理解。這裡面的流程和bitVM的詐欺證明協議基本一致!如果挑戰成功,則釋出Commitment的Oracle節點將受到經濟懲罰。當然,Oracle要釋出到比特幣鏈上的資料,還包括當前Layer2狀態的hash——StateRoot,以及ZKP本身,都要釋出到比特幣鏈上,讓外界檢測。
這裡面還有幾個需要闡述的細節,首先Merlin路線圖中提到,未來會讓Oracle把DA資料備份到Celestia上,這樣一來,Oracle節點可以適當的淘汰掉本地的歷史資料,不需要把資料永存在本地。同時,Oracle Network生成的Commitment,其實是一棵Merkle Tree的root,光對外披露root還不行,要把Commitment對應的完整資料集全部公開,這就需要尋找一個第三方的DA平臺,這個平臺可以是Celestia或EigenDA,也可以是其他的DA層。
安全模型分析:樂觀的ZKRollup+Cobo的MPC服務
上面我們簡述了Merlin的工作流程,相信大家已經對其基本構造有所掌握。我們不難看出,Merlin與B^Square、BitLayer、Citrea,基本都遵循相同的安全模型——樂觀的ZK-Rollup。
初讀這個詞,可能讓很多以太坊愛好者感到怪異,什麼叫「樂觀的ZK-Rollup」?在以太坊社群的認知裡,ZK Rollup的「理論模型」完全建立在密碼學計算的可靠性上,不需要引入信任假設,而樂觀一詞,恰恰就引入了信任假設,這意味著,人們在大多數時候,要樂觀的認為Rollup沒有出現錯誤,是可靠的。而一旦出現錯誤,可以通過詐欺證明的方式去懲罰Rollup執行者,這就是樂觀Rollup——Optimistic Rollup,又名OP Rollup的命名由來。
對於Rollup大本營的以太坊生態而言,樂觀的ZK-Rollup可能有些不倫不類,但這恰恰貼合了比特幣Layer2的現狀。由於技術上的限制,比特幣鏈上無法完整的驗證ZK Proof,只能在特殊情況下驗證ZKP的某一步計算過程,在這種前提下,比特幣鏈上實際只能支援詐欺證明協議,人們可以指出ZKP在鏈下驗證過程中,某一個計算步驟有錯誤,並通過詐欺證明的方式進行挑戰,當然這無法向以太坊式的ZK Rollup看齊,但已經是目前比特幣Layer2所能企及的最可靠、最穩妥的安全模型。
在上述樂觀的ZK-Rollup方案下,假設Layer2網路中存在N個有許可權發起挑戰的人,只要這N個挑戰者中有1人是誠實可靠的,隨時能夠檢測出錯誤並發起詐欺證明,Layer2的狀態轉換就是安全的。當然,完成度比較高的樂觀Rollup需要確保其提款橋也受到詐欺證明協議的保護,而目前幾乎所有的比特幣Layer2都無法實現這個前提,需要依賴於多籤/MPC,那麼該如何選用多籤/MPC方案,就成為了與Layer2安全性息息相關的問題。
Merlin在橋接方案上選擇了Cobo的MPC服務,採用冷熱錢包隔離等措施,橋接資產由Cobo和Merlin Chain共同管理,任何提款行為需要Cobo和Merlin Chain的MPC參與者共同處理,本質上是通過機構的信用背書來保障提款橋的可靠性。當然這只是目前階段的權宜之計,隨著專案的逐漸完善,提款橋可以通過引入BitVM與詐欺證明協議來更替為1/N信任假設的「樂觀橋」,只是這樣做的落地難度會比較大(目前幾乎所有的Layer2官方橋都依賴於多籤)。
整體來看,我們可以梳理下,Merlin引入了基於POS的DAC、基於BitVM的樂觀ZK-Rollup、基於Cobo的MPC資產託管方案,通過開放DAC許可權來解決DA問題;通過引入BitVM及詐欺證明協議來保障狀態轉換的安全;通過引入知名資產託管平臺Cobo的MPC服務來保證提款橋的可靠性。
基於Lumoz的兩步驗證式ZKP提交方案
前面我們梳理了Merlin的安全模型,介紹了樂觀ZK-rollup的概念。在Merlin的技術路線圖中,還談到了去中心化Prover。眾所周知,Prover是ZK-Rollup架構中的一個核心角色,它負責為Sequencer釋出的Batch生成ZKProof,而零知識證明的生成過程恰恰是非常消耗硬體資源的,是一個很棘手的問題。
要加速ZK證明的生成,將任務並行化切分處理,是一個最基本的操作。所謂的並行化,其實就是把ZK證明的生成任務切分為不同的部分,由不同的Prover來分別完成,最後再由Aggregator聚合者把多段Proof聚合為一個整體。
為了加速ZK證明的生成過程,Merlin將採用Lumoz的Prover as a service方案,實際上就是把大量的硬體裝置聚在一起組建出一個礦池,然後把計算任務分配給不同的裝置,並分配對應的激勵,和POW挖礦有些類似。
在這種去中心化的Prover方案中,存在一類攻擊場景,俗稱搶跑攻擊:假設某個聚合者Aggregator組建好了ZKP,它把ZKP傳送出去以期獲得獎勵。其他聚合者看到了ZKP的內容後,搶跑在他前面釋出相同的內容,聲稱這個ZKP是自己先生成的,這種情況該怎麼解決?
可能大家想到的一個最本能的解決方案,就是給每個Aggregator分配指定的任務號碼,比如說,任務1只有Aggregator A可以接,其他人就算完成了任務1也拿不到獎勵。但這種方法存在一個問題,就是不能抵禦單點風險。假如Aggregator A出現了效能故障或是掉線了,任務1就一直卡著沒法完成。而且,這種把任務分配給單一實體的做法,無法以競爭性的激勵機制提升生產效率,不是一個很好的辦法。
Polygon zkEVM曾在一篇部落格中提出名為Proof of efficiency的方法,其中指出,應該以競爭性的手段促使不同的Aggregator之間展開競爭,以先到先得的方式來分配激勵,最先把ZK-Proof提交上鏈的Aggregator可以獲得獎勵。當然他這裡面沒有提到該怎麼解決MEV搶跑問題。
Lumoz採用了兩步驗證的ZK證明提交方式,某個Aggregator生成了ZK證明後,先不用把完整的內容發出去,而只發布ZKP的hash,換言之,釋出hash(ZKP+Aggregator Address)。這樣一來,就算其他人看到了hash值,也不知道對應的ZKP內容,無法直接搶跑;如果有人乾脆把整個hash複製一份搶先發布出去,也沒有意義,因為hash裡面包含了特定聚合者X的地址,聚合者A就算搶先發布這個hash,等hash的原像被揭露時,大家也會看到其中包含的聚合者地址是X的,而不是A的。
通過這種兩步驗證式的ZKP提交方案,Merlin(Lumoz)可以解決ZKP提交過程中存在的搶跑問題,進而實現高度競爭性的零知識證明生成激勵,從而提高ZKP的生成速度。
Merlin’s Phantom:多鏈互操作
按照Merlin的技術路線圖,他們還會支援Merlin與其他EVM鏈之間的互操作,其實現路徑與此前Zetachain的思路基本一致,假如以Merlin作為源鏈,其他EVM鏈作為目標鏈,當Merlin節點感知到使用者發出的跨鏈互操作請求後,會在目標鏈上觸發後續的工作流程。
比如,可以在Polygon上部署一個由Merlin網路控制的EOA帳戶,當用戶在Merlin Chain上釋出跨鏈互操作指令後,Merlin網路先解析其內容,生成一筆在目標鏈上執行的交易資料,再由Oracle Network對該筆交易進行MPC簽名處理,生成交易的數位簽名。之後Merlin的Relayer節點在Polygon上釋放這筆交易,通過Merlin在目標鏈上EOA帳戶中的資產完成後續操作如。
當用戶要求的操作完成後,對應的資產將直接轉發給使用者在目標鏈上的地址,理論上也可以直接跨到Merlin Chain中。這種方案有一些比較明顯的好處:可以避免傳統資產跨鏈時與跨鏈橋合約產生的手續費磨損,而且是直接由Merlin的Oracle Network保障跨鏈操作的安全性,不需要再依賴於外部的基礎設施。只要使用者信任Merlin Chain,就可以預設此類跨鏈互操作行為是沒有問題的。