時間:2023-04-28|瀏覽:12916
撰文:孟鉉濟,F(xiàn)ox Tech 首席科學家;康水躍,F(xiàn)ox Tech CEO
Layer1作為一種分布式系統(tǒng),為了達成共識需要高昂的通訊代價,并且大量的計算也會消耗昂貴的gas。所以,作為Layer1的擴展,Layer2的設計可以有效地提升Layer1的效率。但是從這個角度來說,Layer2的設計仍然面臨著和Layer1一樣的一大難題,就是如何平衡去中心化程度和高效性。
zkRollup是非常有前景的Layer2擴容方案,通過將計算搬到鏈下并向Layer1鏈上提供零知識證明的方式來實現(xiàn)。在實現(xiàn)zkRollup的方案當中,F(xiàn)OX系統(tǒng)采用了當下主流結構,主要有兩種節(jié)點,分別是Sequencer和Folder。簡單來說,Sequencer負責對用戶提交的交易進行排序打包,并且更新Layer2鏈上狀態(tài),F(xiàn)older負責對Sequencer打包的交易生成證明并提交到Layer1。
一個有意義的問題是,Layer2的節(jié)點是否應該是去中心化的,如果是,如何設計激勵機制來保證這一點。因為可以想象,Layer1效率低的本質(zhì)就是,為了實現(xiàn)去中心化每個節(jié)點都需要進行大量的計算和通訊。而使用了Layer2系統(tǒng),將計算過程解耦,如果在這部分依然用完全等效于Layer1的去中心化模式,則又會因為同樣的原因造成Layer2的擁堵,所以這里需要做權衡。
激勵機制的設計就是通過調(diào)整Layer2節(jié)點獲得激勵手續(xù)費的方式以及平衡支付給Layer2節(jié)點的費用,來鼓勵節(jié)點參與Layer2系統(tǒng)維護。本質(zhì)上,Layer2節(jié)點收到的激勵費用來源與以太坊一樣,來自于提交交易的用戶付出的Gas費。本文會探討在FOX的系統(tǒng)當中,F(xiàn)OX的節(jié)點如何參與系統(tǒng)收取手續(xù)費,以及這樣做的原因。
首先我們來回顧Gas費在以太坊系統(tǒng)當中的作用。Layer1的計算資源是有限的,用戶提交交易時候會指定交易Gas費,Gas費基本同交易的執(zhí)行操作復雜度相關,而在此基礎上愿意支付更高昂的Gas費的用戶可以獲得更優(yōu)先的交易執(zhí)行。礦工的激勵就來源于打包的區(qū)塊的Gas費總和。此外,Gas費機制還可以有效防止惡意合約(例如無限循環(huán)),限制區(qū)塊容量大小,這樣在一定程度上保障了安全性。
所以可以看出,對Gas費的合理利用,本質(zhì)上是對鏈上計算資源的合理調(diào)度和分配,同時也是項目方、礦工和用戶的多方博弈。好的激勵機制的設計以及手續(xù)費的使用和分配對于系統(tǒng)運行至關重要。
用戶提交交易給FOX系統(tǒng)當中的交易池同時要附加一筆用來激勵FOX節(jié)點的手續(xù)費,然后系統(tǒng)中的Sequencer節(jié)點將從交易池中抓取交易進行打包排序,這里每次打包的交易就構成Layer2的區(qū)塊,同時Sequencer需要執(zhí)行交易計算,并將計算結果傳到Layer1的FOX合約當中,并且,Sequencer還需要將交易數(shù)據(jù)存到ZK-Ringer當中來保障數(shù)據(jù)可用性。之后,Sequencer的排序結果以及計算結果會傳給Folder節(jié)點,F(xiàn)older正確計算證明(包括證明聚合部分)并傳到Layer1的合約當中。在這個過程中,Sequencer對于交易的執(zhí)行結果會在執(zhí)行結束之后直接更新到Layer2當中,而交易真正被Layer1共識的時間節(jié)點可以認為是Folder的證明被驗證之后。
可以看到,在這個流程當中,用戶最初附上的手續(xù)費要涵蓋幾個用途:
支付給Sequencer的手續(xù)費
支付給Folder的手續(xù)費
Sequencer將交易結果提交到Layer1的Gas費
Sequencer將信息存儲到ZK-Ringer的手續(xù)費
Folder調(diào)用合約的Gas費
為此,我們需要梳理具體的機制來激勵各方參與。
FOX的激勵模式比較新穎。首先,為了平衡去中心化和效率的問題,我們將節(jié)點的角色分為負責排序以及執(zhí)行交易的Sequencer節(jié)點,以及負責對交易執(zhí)行正確性生成證明并聚合的Folder節(jié)點。FOX的Folder節(jié)點采用了去中心化的模式,也就是說任何FOX礦工都可以接入網(wǎng)絡擔任證明生成者,為了鼓勵更多節(jié)點的參與,成功提交正確證明到Layer1合約的Folder可以獲得代幣獎勵。與此同時,為了避免算力浪費,我們指出,并不是只有第一個證明提交者可以獲得獎勵,在第一個證明提交者成功提交之后的一個時間窗口和數(shù)量窗口內(nèi)(這里具體參數(shù)會隨系統(tǒng)狀況進行調(diào)整),所有正確的證明者都可以獲得獎勵。
圖1:原始版本的激勵模式
然而在這種機制下,惡意的Folder會有一種很狡猾的攻擊。
當某一個惡意的Folder,記作Adv,在完成了證明生成之后,一方面將證明提交到Layer1中的Verifier合約進行驗證,另一方面它串通一些節(jié)點(或者就是該Folder控制的節(jié)點),將計算好的證明透露給這些節(jié)點,然后它們就可以不經(jīng)過自己計算而直接將Adv計算好的證明提交,也可以領取到一部分獎勵,而這個過程之中他們沒有付出任何算力,從另一個角度來說,Adv通過較少的算力獲得了多份的收益,并且造成其它節(jié)點即便生成了正確的證明也難以爭搶過Adv。
圖2:惡意Folder的攻擊方式
在這個攻擊當中,產(chǎn)生問題的原因是Verifier無法區(qū)分每一份證明是否由該Folder獨立生成,因為證明值都是相同的。為了規(guī)避這個問題,我們需要將Folder的獨特的地址信息加入到Folder提交的證明當中,從而使得每一個Folder提交的證明都只能是自己獨立生成的而不能是其它節(jié)點提交的。
而融入這種信息的方法很巧妙,使用Fiat-Shamir heuristic(讀者可以參考FOX之前的文章《如何將交互式證明改造為非交互式?Fiat-Shamir Heuristic!》來了解技術細節(jié))。按照生成證明的過程計算,其中一步,證明者,也就是Folder需要通過哈希函數(shù)來生成一個隨機挑戰(zhàn)值,只需要要求在這個哈希的輸入當中加入Folder的地址,就可以保證挑戰(zhàn)值與Folder的地址相對應,且仍然是一個Folder無法預測和控制的隨機數(shù)。
嚴格說明這種方法的安全性需要用到比較深入的密碼學中理論安全的隨機函數(shù)的概念以及不可區(qū)分性等等,我們不在這里詳細討論。簡單來說,可以認為,由于哈希函數(shù)本身的安全性以及Fiat-Shamir heuristic結構的安全性,添加一個固定的值作為哈希的原像并不會破壞輸出的不可預測性,所以原來zkp算法的安全性仍然可以保證。
這樣一來,每個Folder就必須獨立進行證明生成而不能直接利用其它節(jié)點結果,從而實現(xiàn)了我們的目標。
圖3:修改后的激勵模式
本文從節(jié)點手續(xù)費的重要作用角度出發(fā),介紹了手續(xù)費與如何激勵節(jié)點參與系統(tǒng)維護之間的聯(lián)系,同時指出,好的激勵機制可以有效地維護系統(tǒng)安全性。在此基礎之上,我們詳細討論了FOX當中采用的對于Layer2的Folder的激勵機制,并且解釋了這種做法的合理性,以及技術上如何巧妙地運用Fiat-Shamir heuristic來實現(xiàn)這一點。
《深度|迭代與競爭——以太坊的 Layer2 擴容之路》國盛區(qū)塊鏈研究院 https://www.theblockbeats.info/news/24443