Opside ZK-PoW V2.0:支持多鏈多Rollup的ZKP挖礦

星球君的朋友们
本文约2554字,阅读全文需要约10分钟
在多礦工的場景下,Opside ZK-PoW V2.0 已實現將ZKP的計算縮短至不到一分鐘,極大地加快了ZK-Rollup的確認時間。

一、Opside ZK-PoW 介紹

Opside 是一個去中心化的ZK-RaaS (ZK-Rollup as a Service)平台,也是業內領先的ZKP(零知識證明)挖礦網絡。 ZK-RaaS (ZK-Rollup as a Service) 可以為任何人提供一鍵生成ZK-Rollup 的服務。 Opside 提供通用的ZK-Rollup launchbase,開發者可以通過launchbase 輕鬆地部署不同類型的ZK-Rollup 到不同的base chain 上。

  • Base chain,包括Ethereum/Opside chain/BNB chain/Polygon PoS 等公鏈。

  • ZK-Rollup 類型,包括zkSync、Polygon zkEVM、Scroll、StarkNet 等zkEVMs,以及其他種類的ZK-Rollups。

Opside ZK-PoW Cloud 會部署到多鏈上,包括但不限於Ethereum、BNB Chain、Polygon PoS 以及Opside Chain 本身。在Opside 的設計中,開發者可以在上述不同的base chain 上部署ZK-Rollups。隨著ZK-Rollup 技術的逐漸成熟,未來可能會誕生成百上千個ZK-Rollups,這將帶來極大的ZKP 算力需求。 Opside 使用ZK-PoW 機制來激勵Miner 提供ZKP 算力,從而為ZK-Rollup 提供完整的硬件設施。

二、ZK-PoW V 2.0 整體架構

ZK-PoW V 2.0 的整體架構包括幾個關鍵組件:

  • ZK-PoW Cloud:這是Opside 提供的用於ZKP 計算的雲基礎設施。它部署在多個鏈上,包括Ethereum、BNB Chain、Polygon PoS 和Opside Chain。 ZK-PoW Cloud 負責協調和管理ZKP 計算任務。

  • 礦工節點:這些是由礦工操作的節點,他們貢獻自己的計算能力來執行ZKP 計算。礦工可以通過在他們的挖礦硬件上運行專用軟件來參與ZK-PoW 網絡。

  • ZKP 任務分發:ZK-PoW Cloud 將ZKP 計算任務分發給礦工節點。分發是以去中心化方式進行的,以確保公平性和效率性。 ZKP 任務包括為各種ZK-Rollup 生成和驗證零知識證明。

  • ZKP 計算:礦工節點接收ZKP 計算任務,並進行必要的計算來生成所需的證明。這涉及執行密碼學算法和進行複雜的計算。

  • 證明提交和驗證:一旦ZKP 計算完成,礦工節點將生成的證明提交給ZK-PoW Cloud 進行驗證。雲基礎設施驗證證明的正確性,以確保其有效性和完整性。

  • 激勵機制:礦工通過為他們的計算貢獻獲得獎勵來激勵他們參與ZK-PoW 網絡。獎勵系統旨在激勵礦工並維護網絡的安全性和穩定性。

總的來說,ZK-PoW V 2.0 將礦工的計算資源與雲基礎設施相結合,為各種ZK-Rollup 提供高效且可擴展的ZKP 計算能力。

Aggregator 是Prover 的重要組成模塊, 它負責分發ZKP 證明任務並接收任務結果即ZKP 證明,管理ZKP 證明以及將ZKP 證明提交到Base Chain 以此獲取獎勵。因此基於功能將新版Aggregator 分為三個子模塊,分別為:Proof Generator, Proof Manager, Proof Sender。

如上圖虛線框內Proof Generator 模塊將負責給prover(PoW 礦機) 發布證明任務並接受任務結果:ZKP 證明,然後將ZKP 證明保存到DB 數據庫中。 Proof Manager 負責管理完成是ZKP 證明,將要上鍊的ZKP 證明封裝成發送任務轉交給模塊Proof Sender。模塊Proof Sender 完成ZKP 證明上鍊,即提交證明給部署在Base Chain 上的zkevm contract。

下面分別介紹這三個模塊:

Proof generator

Rollup Chain 將一定數量交易,打包成一個batch,然後將若干個(依據交易的頻繁性等多個因數)batch 打包成一個sequence,然後將其提交到Base Chain,因此我們可以說每次上鍊數據單位是sequence。每個sequence 包括1 個以上batch,而ZKP 證明是證明已提交的sequence 的合法性,所以batch 是證明任務最小單位。

依據sequence 包含的batch 不同,需要完成的證明任務也不同,具體如下:

  • batch 數目等於1 , 證明流程BatchProofTask ----> FinalProofTask,需要依次完成BatchProofTask,FinalProofTask 證明任務。

  • sequence 包含batch 數目大於1 , 證明流程多個BatchProofTask ---->AggregatorproofTask ---> FinalProofTask,需要依次完成多個BatchProofTask ,AggregatorproofTask,FinalProofTask 證明任務。

為了盡可能提高證明產生的效率,也為了提高PoW 礦工收益,我們盡可能並發生成證明。具體表現在以下兩方面:

  • 各個sequence 證明生成沒有上下文或者狀態上依賴,可以並發進行。

  • 同一個sequence 裡多個BatchProofTask 可以並發進行。

以此更好的發揮prover 的算力資源,從而能更高效的生成證明。

Proof manager

該模塊主要負責管理ZKP 證明,控制ZKP 證明上鍊驗證。主要分為三個模塊

  • submitPendingProof: 該模塊只在Aggregator 每次啟動時執行一次,目的是將上一次Aggregator 服務停止前未完成的ZKP 證明提交完成。這裡是針對proofHash 提交了且其他礦工提交了proof 的情況。關於proofHash, proof 的介紹參考Proof Sender。

  • tryFetchProofToSend: 在協程執行,將最新生成的ZKP 證明且該證明對應的sequence 未被驗證加入到Proof Sender 的緩存中等待上鍊。

  • processResend: 在協程執行,目的讓超過時間窗口沒驗證成功的sequence 重新提交上鍊。

Proof sender

Opside提出了一個ZKP 兩步提交算法,來實現了prover 的去中心化。這種算法既能夠防止ZKP 搶跑攻擊,又可以讓更多的礦工獲得獎勵,從而鼓勵更多的礦工在線,並提供穩定、持續的ZKP 算力。

  • 第1 步:對於某個sequence 生產PoW 證明記為proof,首先計算Hash(proof / address), 記為proofHash,並向合約提交,若該sequence 之前沒有提交過proofHash,則開啟proofHash 的提交時間窗口T 1 , 在之後T 1 個區塊內礦工都有資格提交該sequence,且T 1 區塊後才能提交proof。

  • 第2 步:提交proof, T 1 後區塊後,開啟proof 提交,且限定在T 2 個區塊內提交。如果T 2 區塊後,所有礦工提交proof 都沒驗證通過,則之前所有提交過proofHash 的礦工都被被懲罰。如果在T 1 時間窗口能成功提交了proofHash,但是在T 2 時間窗口內未能成功提交proof,且T 2 窗口內其他礦工成功提交了proof,則仍然可以繼續提交該proof。除了以上場景外,重新走兩步提交流程。

如下圖,Proof Sender 基於三個線程安全且優先級排序緩存來實現兩步提交,這三個緩存基於sequence 的起始高度進行排序,保證每次從這個三個緩存獲取元素對應的sequence 高度都是最低的,同時這三個緩存中元素是去重的。對應sequence 的高度越低越需要優先處理。

  • finalProofMsgCahce: 存放的是Proof Manager 發送來finalProof 消息,也就是完成ZKP 證明。

  • monitPHTxCache: 存儲要監控proofHash 交易。

  • ProofHashCache: 存儲proof 消息,用於proof 上鍊。

如下圖:

Proof Sender 模塊啟動後會啟動3 個協程,分別消費這三個緩存數據。

簡單流程是:

  1. 協程1 負責消費finalProofMsgCahce 中的finalProof 消息,計算proofHash ,如果符合上鍊條件(在T 1 條件內),則將proofHash 上鍊,同時將proofHash 交易放入到monitPHTxCache 中。

  2. 協程2 消費monitPHTxCache 的proofHash 交易消息,如果在T 2 時間窗口內,滿足proof 上鍊條件,這構造proof 消息,存放到ProofHashCache。

  3. 協程3 消費proof 消息,proof 上鍊。

相對舊模塊,結構更加清晰,節省資源開銷。

三、總結

與Version 1.0 對比

  • V 2.0 拆分了原有服務為三個子模塊,三個模塊分別負責證明產生,證明管理,證明上鍊,結構更加清晰,三個模塊耦合性低,魯棒性強。

  • 證明產生模塊Proof Generator 相對舊版添加了startBatch 參數方便新加入礦工能更快跟上挖礦進度。

  • 證明管理模塊Proof Manager 相對舊版更好改進:對於礦工重啟服務或者其他原因導致proof 未提交或者提交失敗會第一時間重發proof,保證礦工利益;同時重發機制不僅針對proof 提交失敗情況,也針對所有proof 提交失敗或者未提交,重啟時間窗口,保證Rollup Chain 安全性。

  • 證明發送模塊Proof Sender 基於三個線程安全優先級緩存來實現交易兩步式提交,相對之前版本減少全局鎖使用,保證了低高度的proof 能第一時間提交,保證了礦工的利益。同時,整個服務流程更清晰,減少了線程數量,減少了程序執行中資源的消耗。

壓測結果:

  • Version 2.0 使用10 台64 核機器,完成batch 證明566 個,耗時7 小時38 分40 秒,平均48.62 秒完成一個證明。在多礦工場景下,相較於V 1.0 ,V 2.0 的zk proof 生成效率整體提高了50%

總之,Opside ZK-PoW V 2.0 優化了多礦工參與ZKP 計算的流程,提升了硬件利用率,提高了服務可用性,對礦工更加友好。更重要的是,在多礦工的場景下,將ZKP 的計算縮短到不到一分鐘,極大地加快了ZK-Rollup 的確認時間。