header-langage
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
掃碼下載APP

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

2023-07-05 15:00
閱讀本文需 15 分鐘
总结 AI 總結
看總結 收起


一、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 V2.0 整體架構


ZK-PoW V2.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 V2.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 的提交時間窗口 T1,在之後 T1 個區塊內礦工都有資格提交該 sequence,且 T1 區塊後才能提交 proof。


第 2 步:提交 proof,T1 后區塊後,開啟 proof 提交,且限定在 T2 個區塊內提交。如果 T2 區塊後,所有礦工提交 proof 都沒驗證通過,則之前所有提交過 proofHash 的礦工都被被懲罰。如果在 T1 時間窗口能成功提交了 proofHash,但是在 T2 時間窗口內未能成功提交 proof,且 T2 窗口內其他礦工成功提交了 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,如果符合上鍊條件(在 T1 條件內),則將 proofHash 上鍊,同時將 proofHash 交易放入到 monitPHTxCache 中。


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


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


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


三、總結


與 Version1.0 對比


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


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


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


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


壓測結果:


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


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


本文來自投稿,不代表 BlockBeats 觀點


歡迎加入律動 BlockBeats 官方社群:

Telegram 訂閱群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方帳號:https://twitter.com/BlockBeatsAsia

本平台現已全面集成Farcaster協議, 如果您已有Farcaster帳戶, 可以登錄 後發表評論
選擇文庫
新增文庫
取消
完成
新增文庫
僅自己可見
公開
保存
糾錯/舉報
提交