談談Layer2的激勵機制:Fiat-Shamir heuristic在FOX的又一次妙用
發布日期:4/28/2023
新聞視界時報-記者黃柏翰
zkRollup是非常有前景的Layer2擴容方案,通過將計算搬到鏈下並向Layer1鏈上提供零知識證明的方式來實現。在實現zkRollup的方案當中,FOX系統採用了當下主流結構,主要有兩種節點,分別是Sequencer和Folder。簡單來說,Sequencer負責對使用者提交的交易進行排序打包,並且更新Layer2鏈上狀態,Folder負責對Sequencer打包的交易生成證明並提交到Layer1。
一個有意義的問題是,Layer2的節點是否應該是去中心化的,如果是,如何設計激勵機制來保證這一點。因為可以想像,Layer1效率低的本質就是,為了實現去中心化每個節點都需要進行大量的計算和通訊。而使用了Layer2系統,將計算過程解耦,如果在這部分依然用完全等效於Layer1的去中心化模式,則又會因為同樣的原因造成Layer2的擁堵,所以這裡需要做權衡。
激勵機制的設計就是通過調整Layer2節點獲得激勵手續費的方式以及平衡支付給Layer2節點的費用,來鼓勵節點參與Layer2系統維護。本質上,Layer2節點收到的激勵費用來源與乙太坊一樣,來自於提交交易的使用者付出的Gas費。本文會探討在FOX的系統當中,FOX的節點如何參與系統收取手續費,以及這樣做的原因。
Gas的作用
首先我們來回顧Gas費在乙太坊系統當中的作用。Layer1的計算資源是有限的,使用者提交交易時候會指定交易Gas費,Gas費基本同交易的執行操作複雜度相關,而在此基礎上願意支付更高昂的Gas費的用戶可以獲得更優先的交易執行。礦工的激勵就來源於打包的區塊的Gas費總和。此外,Gas費機制還可以有效防止惡意合約(例如無限迴圈),限制區塊容量大小,這樣在一定程度上保障了安全性。
所以可以看出,對Gas費的合理利用,本質上是對鏈上計算資源的合理調度和分配,同時也是專案方、礦工和用戶的多方博弈。好的激勵機制的設計以及手續費的使用和分配對於系統運行至關重要。
{{AD}}
交易上鏈流程
使用者提交交易給FOX系統當中的交易池同時要附加一筆用來激勵FOX節點的手續費,然後系統中的Sequencer節點將從交易池中抓取交易進行打包排序,這裡每次打包的交易就構成Layer2的區塊,同時Sequencer需要執行交易計算,並將計算結果傳到Layer1的FOX合約當中,並且,Sequencer還需要將交易資料存到ZK-Ringer當中來保障資料可用性。之後,Sequencer的排序結果以及計算結果會傳給Folder節點,Folder正確計算證明(包括證明聚合部分)並傳到Layer1的合約當中。在這個過程中,Sequencer對於交易的執行結果會在執行結束之後直接更新到Layer2當中,而交易真正被Layer1共識的時間節點可以認為是Folder的證明被驗證之後。
可以看到,在這個流程當中,使用者最初附上的手續費要涵蓋幾個用途:
- 支付給Sequencer的手續費
- 支付給Folder的手續費
- Sequencer將交易結果提交到Layer1的Gas費
- Sequencer將資訊存儲到ZK-Ringer的手續費
- Folder調用合約的Gas費
為此,我們需要梳理具體的機制來激勵各方參與。
FOX的激勵機制
FOX的激勵模式比較新穎。首先,為了平衡去中心化和效率的問題,我們將節點的角色分為負責排序以及執行交易的Sequencer節點,以及負責對交易執行正確性生成證明並聚合的Folder節點。FOX的Folder節點採用了去中心化的模式,也就是說任何FOX礦工都可以接入網路擔任證明生成者,為了鼓勵更多節點的參與,成功提交正確證明到Layer1合約的Folder可以獲得代幣獎勵。與此同時,為了避免算力浪費,我們指出,並不是只有第一個證明提交者可以獲得獎勵,在第一個證明提交者成功提交之後的一個時間視窗和數量視窗內(這裡具體參數會隨系統狀況進行調整),所有正確的證明者都可以獲得獎勵。
然而在這種機制下,惡意的Folder會有一種很狡猾的攻擊。
當某一個惡意的Folder,記作Adv,在完成了證明生成之後,一方面將證明提交到Layer1中的Verifier合約進行驗證,另一方面它串通一些節點(或者就是該Folder控制的節點),將計算好的證明透露給這些節點,然後它們就可以不經過自己計算而直接將Adv計算好的證明提交,也可以領取到一部分獎勵,而這個過程之中他們沒有付出任何算力,從另一個角度來說,Adv通過較少的算力獲得了多份的收益,並且造成其它節點即便生成了正確的證明也難以爭搶過Adv。
在這個攻擊當中,產生問題的原因是Verifier無法區分每一份證明是否由該Folder獨立生成,因為證明值都是相同的。為了規避這個問題,我們需要將Folder的獨特的位址資訊加入到Folder提交的證明當中,從而使得每一個Folder提交的證明都只能是自己獨立生成的而不能是其它節點提交的。
而融入這種資訊的方法很巧妙,使用Fiat-Shamir heuristic(讀者可以參考FOX之前的文章《如何將互動式證明改造為非互動式?Fiat-Shamir Heuristic!》來瞭解技術細節)。按照生成證明的過程計算,其中一步,證明者,也就是Folder需要通過雜湊函數來生成一個隨機挑戰值,只需要要求在這個雜湊的輸入當中加入Folder的位址,就可以保證挑戰值與Folder的位址相對應,且仍然是一個Folder無法預測和控制的亂數。
嚴格說明這種方法的安全性需要用到比較深入的密碼學中理論安全的隨機函數的概念以及不可區分性等等,我們不在這裡詳細討論。簡單來說,可以認為,由於雜湊函數本身的安全性以及Fiat-Shamir heuristic結構的安全性,添加一個固定的值作為雜湊的原像並不會破壞輸出的不可預測性,所以原來zkp演算法的安全性仍然可以保證。
這樣一來,每個Folder就必須獨立進行證明生成而不能直接利用其它節點結果,從而實現了我們的目標。
結語
本文從節點手續費的重要作用角度出發,介紹了手續費與如何激勵節點參與系統維護之間的聯繫,同時指出,好的激勵機制可以有效地維護系統安全性。在此基礎之上,我們詳細討論了FOX當中採用的對於Layer2的Folder的激勵機制,並且解釋了這種做法的合理性,以及技術上如何巧妙地運用Fiat-Shamir heuristic來實現這一點。