By Opside Team
為什麼我們需要去中心化的prover
當前,以太坊主網上已經有多個ZK-Rollups在運行了。然而ZK-Rollup的去中心化設計仍然處於早期階段。我們目前都聚焦在Sequencer的去中心化問題上,大部分人都忽略了,實際上目前絕大部分的ZK-Rollup項目都沒有實現去中心化的prover。
對於ZK-Rollup來說,中心化的prover仍然是安全的,並且也不像中心化的sequencer那樣會帶來審查的問題。但是中心化的prover也會引發很多問題。首先,如果只有一個prover,那麼單節點宕機就會造成整個ZK-Rollup的有效性證明無法提交,從而給交易的最終確定性造成影響。其次,中心化的prover成本高昂,無法承擔未來海量的ZK-Rollup的算力需求。最後,從經濟的角度來說,中心化的prover獨享了一部分收益,這在代幣經濟學上來說,實際上是不公平的。
去中心化prover的挑戰
去中心化prover能很好地解決以上的問題,但是也帶來一些挑戰,這也是為什麼最近上線的幾個zkEVM方案採用了中心化prover方案的原因之一。例如Polygon zkEVM的beta mainnet中依靠trusted aggregator來提交ZKP,zkSync era也是類似。
從技術細節上來講,ZK-Rollup的智能合約驗證ZKP的時候,需要原始的proof數據,這就可能引發各種不同的鏈上攻擊行為。例如,某一個prover提交計算出來的ZKP到鏈上合約時,需要發一筆L1的交易。當這個prover發出的交易廣播到交易池中,攻擊者就可以看到原始proof數據,攻擊者可以設置一個更高的gas費來發交易,從而優先打包到區塊中,來獲取PoW獎勵。
此外,由於prover之間是依靠算力來競爭,沒有一個可信的身份識別機制,也很難建立一個通信機制。不同的礦工有可能做重複的工作,從而造成算力的浪費。
ZKP的兩步提交
Opside提出了一個ZKP兩步提交算法,來實現了prover的去中心化。這種算法既能夠防止ZKP搶跑攻擊,又可以讓更多的礦工獲得獎勵,從而鼓勵更多的礦工在線,並提供穩定、持續的ZKP算力。
第1步:提交hash
對於某個sequence,prover計算出ZKP之後,首先計算(proof / address)的hash,並向鏈上智能合約提交hash和address。其中,proof是某一個sequence的零知識證明,address是該prover的地址
假設在第1個prover在第T個區塊提交了hash,則在第T+10區塊以內,還可以接受其他prover提交hash,沒有數量限制。第T+11區塊及之後,不再接受新的prover提交hash
第2步:提交ZKP
第T+11區塊及之後,允許任何prover提交ZKP。只要有一個ZKP通過驗證,那麼就可以根據該ZKP對所有提交過的hash進行校驗。校驗通過的prover都可以得到PoW獎勵,獎勵金額按照礦工質押量的比例來分配。
如果在第T+20區塊之前,都沒有ZKP通過驗證,則所有提交過hash的prover都將被slash。此時該sequence重新開放,允許提交新的hash,回到第1步
舉一個例子,假設Opside中每個L2區塊的PoW獎勵是128 IDE,當前總共有64個Rollup slots,那麼每一個Rollup sequence分配到的PoW獎勵是2 IDE。如果先後有A, B, C 3個礦工為一個sequence提交了正確的ZKP,且A, B, C 3個礦工的礦工質押量(IDE)分別為200K,500K,300K。那麼,A, B, C可以獲得的PoW獎勵分別為0.4 IDE,1 IDE,0.6 IDE。
Prover的質押與懲罰
為了避免針對prover的惡意行為,prover需要在一個特殊的系統合約中註冊,並質押一定數量的token。如果當前質押數量小於閾值,則不允許提交hash和ZKP。 prover提交ZKP獲得的獎勵也將依據質押量比例來分配,從而避免prover多次提交ZKP的惡意行為。
當prover出現以下行為,會進行不同程度的懲罰
prover提交了錯誤的hash
對於某個sequence,如果沒有對應的ZKP通過驗證,則所有提交過hash的prover都將被懲罰
罰沒的token將被燒毀。
關於ZKP的兩步提交機制更多的細節與考量,請讀者參閱官方文檔。 prover質押以及懲罰的具體數字在未來可能會改動。
幾個考量
為什麼允許多個prover提交hash?如果第一個hash的提交者才能獲得獎勵,那麼第一個prover提交了hash之後,其他prover就沒有動力提交proof。如果一個惡意攻擊者提交hash之後遲遲不提交proof,那麼會阻礙整個sequence被驗證的速度。因此應當允許多個prover獨立且並行地提交hash,以避免ZKP的驗證被單個攻擊者壟斷。
為什麼需要設置一個時間窗口?假設任何人在提交了hash之後可以立即提交proof,那麼該proof仍然有可能被搶跑。因為攻擊者會立即提交一個與自己地址關聯的hash,隨後提交proof,從而獲取獎勵。設置時間窗口之後,提交過hash的prover就沒有動力在此時間窗口內提交proof,從而避免了proof被攻擊者利用的可能。
為什麼要按照質押量來分配PoW獎勵?在一個時間窗口內,允許多個prover為同一個sequence提交hash。實際上,礦工可以利用自己生成的proof提交多個hash(只需要多個地址即可),從而佔有大部分甚至所有PoW獎勵。為了避免這種攻擊行為,一個sequence的PoW獎勵將按照礦工質押量的比例來分配。
總結與規劃
本文提出的ZKP兩步提交算法,在實現了prover去中心化的同時,能很好地規避針對prover的搶跑攻擊,並鼓勵更多的礦工提供穩定、持續的ZKP算力。最初的版本將在Opside的Pre-alpha testnet上線。在未來,Opside也將在更多ZKP的挖礦領域進行更多創新。例如:
根據整個網絡的ZKP算力供需關係,動態調整PoS與PoW的獎勵分配比例
根據ZK-Rollup類型、Rollup交易數量、gas使用量等進行工作量預估,建立Rollup batch的個性化定價機制
應用開發者對所屬Rollup的ZKP生成進行補貼,以激勵礦工提供算力