區(qū)塊鏈最強(qiáng)大的功能之一是允許任何人都可以在計(jì)算機(jī)上運(yùn)行節(jié)點(diǎn)并驗(yàn)證該鏈?zhǔn)欠裾_。即使 95% 的節(jié)點(diǎn)都同意更改規(guī)則并開始根據(jù)新規(guī)則生成區(qū)塊,運(yùn)行全節(jié)點(diǎn)的每個(gè)誠實(shí)個(gè)體都有會(huì)拒絕接受該鏈。不屬于此類陰謀集團(tuán)的權(quán)益持有者會(huì)自動(dòng)匯聚在一起并繼續(xù)構(gòu)建一條遵循舊規(guī)則的鏈,并且完全驗(yàn)證的用戶將遵循該鏈。
這是區(qū)塊鏈和中心化系統(tǒng)之間的一個(gè)關(guān)鍵區(qū)別。然而,如果要保持這一特性,運(yùn)行一個(gè)全節(jié)點(diǎn)需要足夠簡(jiǎn)單,這樣才能確保大多數(shù)人有機(jī)會(huì)運(yùn)行節(jié)點(diǎn)。這既適用于質(zhì)押者(如果質(zhì)押者沒有驗(yàn)證鏈,他們實(shí)際上并沒有為執(zhí)行協(xié)議規(guī)則做出貢獻(xiàn)),也適用于普通用戶。如今,在筆記本電腦上運(yùn)行節(jié)點(diǎn)已成為可能,真正做到還是很困難。The Verge 希望改變這一點(diǎn),讓鏈的完整驗(yàn)證成本變得更低,以至于每個(gè)手機(jī)錢包、瀏覽器錢包,甚至智能手表都可以成為驗(yàn)證節(jié)點(diǎn)。
TheVerge,2023年路線圖
- Verkle tree 是一種更緊湊證明的樹形結(jié)構(gòu),可實(shí)現(xiàn)以太坊區(qū)塊的無狀態(tài)驗(yàn)證。節(jié)點(diǎn)可以在硬盤上不擁有任何以太坊狀態(tài)(賬戶余額、合約代碼、存儲(chǔ)......)的情況下驗(yàn)證以太坊區(qū)塊,但需要花費(fèi)幾百千字節(jié)的證明數(shù)據(jù)和幾百毫秒的額外時(shí)間來驗(yàn)證證明。而如今 Verge 愿景已經(jīng)變得更為宏大,Verge 希望實(shí)現(xiàn)以太坊鏈的最大資源效率驗(yàn)證,其中不僅包括無狀態(tài)驗(yàn)證技術(shù),還包括使用 SNARK 驗(yàn)證所有以太坊執(zhí)行。
除了需要長期關(guān)注對(duì)整個(gè)鏈進(jìn)行的 SNARK 驗(yàn)證之外,還需要考慮另一個(gè)問題,即Verkle tree 是否是最好的技術(shù)。Verkle tree 容易受到量子計(jì)算機(jī)的攻擊,因此如果我們用 Verkle tree 替換當(dāng)前的,我們以后將不得不再次替換樹。Merkle 樹的自然替代方案是直接使用中 Merkle 分支的。從歷史上看,由于開銷和技術(shù)復(fù)雜性,這被認(rèn)為是不可行的。然而,最近我們看到 Starkware 在筆記本電腦上使用每秒等技術(shù),從中可以感覺到,更「?jìng)鹘y(tǒng)」哈希值的證明時(shí)間也在迅速改善。
在過去的一年里,Verge 正變得更加開放,并且展現(xiàn)出了豐富的可能性。
The Verge:關(guān)鍵目標(biāo)
無狀態(tài)客戶端:完全驗(yàn)證客戶端和質(zhì)押節(jié)點(diǎn)不需要超過幾 GB 的存儲(chǔ)空間
未來,能夠?qū)崿F(xiàn)在智能手表進(jìn)行鏈的驗(yàn)證(共識(shí)和執(zhí)行)。即只要下載一些數(shù)據(jù),驗(yàn)證 SNARK,就可以完成。
無狀態(tài)驗(yàn)證:Verkle 或 STARK
我們要解決什么問題?
如今,以太坊客戶端需要存儲(chǔ)才能驗(yàn)證區(qū)塊,而且這一數(shù)量每年都在增加。原始狀態(tài)數(shù)據(jù),各個(gè)客戶端必須在其上存儲(chǔ)一些額外數(shù)據(jù)才能有效地更新 trie。
這減少了可以運(yùn)行完全驗(yàn)證的以太坊節(jié)點(diǎn)的用戶數(shù)量:盡管只要有足夠大的硬盤就可以存儲(chǔ)多年的所有以太坊狀態(tài)甚至歷史記錄,但人們默認(rèn)購買的計(jì)算機(jī)往往只有幾百 GB 的存儲(chǔ)空間。狀態(tài)大小也給首次設(shè)置節(jié)點(diǎn)的過程帶來了很大的阻力:節(jié)點(diǎn)需要下載整個(gè)狀態(tài),這可能需要數(shù)小時(shí)或數(shù)天的時(shí)間。這會(huì)產(chǎn)生各種連鎖反應(yīng)。例如,它使質(zhì)押者升級(jí)其質(zhì)押設(shè)置變得更加困難。從技術(shù)上講,可以在不停機(jī)的情況下做到這一點(diǎn) - 啟動(dòng)一個(gè)新客戶端,等待它同步,然后關(guān)閉舊客戶端并傳輸密鑰 - 但在實(shí)踐中這一技術(shù)很復(fù)雜。
無狀態(tài)驗(yàn)證是什么以及它是如何運(yùn)行的?
無狀態(tài)驗(yàn)證是一種允許節(jié)點(diǎn)在不掌握完整狀態(tài)的情況下驗(yàn)證區(qū)塊的技術(shù)。相反,每個(gè)區(qū)塊都帶有一個(gè)見證,其中包括 (i)區(qū)塊將訪問的狀態(tài)中特定位置的值(例如代碼、余額、存儲(chǔ)),以及 (ii)這些值正確的加密證明。
實(shí)際上,實(shí)現(xiàn)無狀態(tài)驗(yàn)證需要更改以太坊狀態(tài)樹結(jié)構(gòu)。這是因?yàn)楫?dāng)前的 Merkle Patricia 樹對(duì)于實(shí)現(xiàn)任何加密證明方案都極其不友好,尤其是在最壞的情況下。對(duì)于「原始」Merkle 分支以及將 Merkle 分支「包裝」在 STARK 中的可能性都是如此。關(guān)鍵困難源于 MPT 的兩個(gè)弱點(diǎn):
它是十六叉樹(即每個(gè)節(jié)點(diǎn)有 16 個(gè)子節(jié)點(diǎn))。這意味著平均而言,大小為 N 的樹中的證明有32 * (16 - 1) * log16(N) = 120 * log2(N)
字節(jié),或者在 2 (32)項(xiàng)樹中大約有 3840 字節(jié)。使用二叉樹,您只需要32 * (2 - 1) * log2(N) = 32 * log2(N)
字節(jié),或者大約 1024 字節(jié)。
代碼未經(jīng)過默克爾化。這意味著證明任何賬戶代碼的訪問都需要提供整個(gè)代碼,最多 24000 字節(jié)。
我們可以計(jì)算的最壞情況如下:
30,000,000 gas / 2,400 ("cold" account read cost) * (5 * 480 24,000) = 330,000,000
字節(jié)
分支成本略有下降(5 * 480
而不是8 * 480
),因?yàn)楫?dāng)分支數(shù)量較多時(shí),分支的頂部會(huì)重復(fù)。但即便如此,這也意味著在一個(gè) slot 內(nèi)下載的數(shù)據(jù)量完全不切實(shí)際。如果我們嘗試將其包裝在 STARK 中,我們會(huì)遇到兩個(gè)問題:(i)KECCAK 相對(duì)不利于 STARK,(ii)330 MB 的數(shù)據(jù)意味著我們必須證明對(duì) KECCAK 輪函數(shù)的 500 萬次調(diào)用,這在除最強(qiáng)大的消費(fèi)級(jí)硬件之外的所有硬件上都太多了,即使我們可以讓 STARK 證明的 KECCAK 更加高效。
如果我們只是用二叉樹替換十六叉樹,并且我們另外對(duì)代碼進(jìn)行默克爾化,那么最壞的情況大約是 14 個(gè)字節(jié)(14 是 ~2 (14 個(gè))30,000,000 / 2,400 * 32 * (32 - 14 8) = 10,400,000
分支的冗余位的減法,8 是塊中葉子節(jié)點(diǎn)的證明長度)。請(qǐng)注意,這需要改變 gas 成本,以收取訪問每個(gè)單獨(dú)的代碼塊的費(fèi)用;就是這樣做的。10.4 MB 要好得多,但對(duì)于許多節(jié)點(diǎn)來說,在一個(gè) slot 內(nèi)下載的數(shù)據(jù)仍然太多。所以我們需要引入一些更強(qiáng)大的技術(shù)。為此,有兩種領(lǐng)先的解決方案:Verkle tree和STARKed 二叉哈希樹。
Verkle trees
Verkle tree 使用基于橢圓曲線的向量承諾來做出更短的證明。關(guān)鍵在于,無論樹的寬度是多少,與每個(gè)父子關(guān)系相對(duì)應(yīng)的證明部分只有 32 個(gè)字節(jié)。樹寬度的唯一限制是,如果樹太寬,證明的計(jì)算效率就會(huì)降低。以太坊提出的實(shí)現(xiàn)寬度為 256。
因此,證明中單個(gè)分支的大小為32 * log256(N) = 4 * log2(N)
字節(jié)。因此,理論上的最大證明大小大約為30,000,000 / 2,400 * 32 * (32 - 14 8) / 8 = 1,300,000
字節(jié)(由于狀態(tài)塊分布不均勻,實(shí)際計(jì)算結(jié)果略有不同,但作為初步近似值,這沒問題)。
另外需要注意的是,在上述所有示例中,這種「最壞情況」并不完全是最糟糕的情況:更糟糕的情況是攻擊者故意「挖掘」兩個(gè)地址,使樹中有一個(gè)較長的公共前綴,并從其中一個(gè)地址讀取,這可以將最壞情況分支長度再延長約 2 倍。但即使有了這個(gè)警告,Verkle tree 也能讓我們獲得約 2.6 MB 的最壞情況證明,這與當(dāng)今最壞情況的 calldata 大致相當(dāng)。
我們還利用這個(gè)警告來做另一件事:我們讓訪問「相鄰」存儲(chǔ)變得非常便宜:要么是同一合約的許多代碼塊,要么是相鄰的存儲(chǔ)槽。EIP提供了相鄰的定義,并且相鄰訪問僅收取 200 gas。對(duì)于相鄰訪問,最壞情況下的證明大小變?yōu)?code>30,000,000 / 200 * 32 = 4,800,800字節(jié),這仍然大致在容差范圍內(nèi)。如果我們希望出于安全考慮降低此值,我們可以稍微增加相鄰訪問成本。
STARK 型二叉哈希樹
這里的技術(shù)非常不言自明:你創(chuàng)建一個(gè)二叉樹,取出證明區(qū)塊中值所需的最大 10.4 MB 證明,并用該證明的 STARK 替換該證明。這樣,證明本身就只包含要證明的數(shù)據(jù),加上實(shí)際 STARK 的約 100-300 kB 固定開銷。
這里的主要挑戰(zhàn)是驗(yàn)證時(shí)間。我們可以進(jìn)行與上述基本相同的計(jì)算,只是我們計(jì)算哈希值而不是字節(jié)數(shù)。10.4 MB 的區(qū)塊意味著 330,000 個(gè)哈希值。如果我們加上攻擊者「挖掘」樹中具有較長公共前綴的地址的可能性,那么真正的最壞情況就是大約 660,000 個(gè)哈希值。因此,如果我們每秒可以驗(yàn)證約 200,000 個(gè)哈希值,那就沒問題了。
的消費(fèi)級(jí)筆記本電腦上達(dá)到 ,該函數(shù)專為 STARK 友好性而設(shè)計(jì)。然而,Poseidon 相對(duì)不成熟,因此許多人還不相信它的安全性。因此,有兩條現(xiàn)實(shí)的前進(jìn)道路:
快速對(duì) Poseidon 進(jìn)行大量安全分析,并熟悉如何在 L1 上部署它
使用更「保守」的哈希函數(shù),例如 SHA256 或 BLAKE
在撰寫本文時(shí),Starkware 的圓形 STARK 證明器在證明保守哈希函數(shù)的情況下,在消費(fèi)級(jí)筆記本電腦上每秒只能證明約 10-30k 個(gè)哈希值。然而,STARK 技術(shù)正在迅速改進(jìn)。即使在今天,基于 GKR 的技術(shù)也有望將其提高到約 100-200k 的范圍。
除了驗(yàn)證區(qū)塊之外的見證人的用例
除了驗(yàn)證區(qū)塊之外,還有另外三個(gè)更高效的無狀態(tài)驗(yàn)證關(guān)鍵用例:
內(nèi)存池:當(dāng)交易被廣播時(shí),p2p 網(wǎng)絡(luò)中的節(jié)點(diǎn)需要在重新廣播之前驗(yàn)證交易是否有效。目前,驗(yàn)證涉及驗(yàn)證簽名,還涉及檢查余額是否足夠以及隨機(jī)數(shù)是否正確。在未來(例如使用本機(jī)帳戶抽象,如),這可能涉及運(yùn)行一些 EVM 代碼,這些代碼會(huì)進(jìn)行一些狀態(tài)訪問。如果節(jié)點(diǎn)是無狀態(tài)的,則交易將需要附帶證明狀態(tài)對(duì)象的證明。
包含列表:這是一項(xiàng),允許(可能規(guī)模較小且不太復(fù)雜的)權(quán)益證明驗(yàn)證者強(qiáng)制下一個(gè)區(qū)塊包含交易,而不管(可能規(guī)模較大且比較復(fù)雜的)區(qū)塊構(gòu)建者的意愿如何。這將降低強(qiáng)大參與者通過延遲交易來操縱區(qū)塊鏈的能力。但是,這要求驗(yàn)證者有辦法驗(yàn)證包含列表中交易的有效性。
輕客戶端:如果我們希望用戶通過錢包(例如 Metamask、Rainbow、Rabby……)訪問區(qū)塊鏈而不信任中心化參與者,他們需要運(yùn)行輕客戶端(例如)。核心 Helios 模塊為用戶提供經(jīng)過驗(yàn)證的狀態(tài)根。但是,為了獲得完全無需信任的體驗(yàn),用戶需要為他們進(jìn)行的每個(gè) RPC 調(diào)用提供證明(例如,對(duì)于,用戶需要提供調(diào)用期間訪問的所有狀態(tài)的證明)
所有這些用例都有一個(gè)共同點(diǎn),那就是它們需要相當(dāng)多的證明,但每個(gè)證明都很小。因此,STARK 證明實(shí)際上對(duì)它們來說沒有意義;相反,直接使用 Merkle 分支是最現(xiàn)實(shí)的。Merkle 分支的另一個(gè)優(yōu)點(diǎn)是它們是可更新的:給定一個(gè)狀態(tài)對(duì)象 X 的證明,根植于區(qū)塊 B,如果您收到一個(gè)帶有其見證的子區(qū)塊 B2,您可以更新該證明以使其根植于區(qū)塊 B2。Verkle 證明本身也是可更新的。
與現(xiàn)有研究有哪些聯(lián)系?
Verkle樹:
John Kuszmaul 的原始 Verkle tree 論文:
Starkware 證明數(shù)據(jù):
Poseidon2 論文:
Ajtai(基于格硬度的替代快速哈希函數(shù)):
Verkle.info:https://verkle.info/
還剩下什么要做?有哪些需要權(quán)衡?
剩下要做的主要工作是:
(無國籍 gas 成本變化)后果的更多分析
完成和測(cè)試過渡程序需要做更多工作,這是無國籍 EIP 復(fù)雜性的很大一部分
對(duì) Poseidon、Ajtai 和其他「STARK 友好型」哈希函數(shù)的更多安全性分析
針對(duì)「保守」(或「?jìng)鹘y(tǒng)」)哈希函數(shù)的超高效 STARK 協(xié)議的更多開發(fā),例如基于或的想法。
我們很快就會(huì)有一個(gè)決策點(diǎn),選擇以下三個(gè)選項(xiàng):(i)Verkle tree,(ii)STARK 友好哈希函數(shù),以及(iii)保守哈希函數(shù)。它們的屬性可以粗略地總結(jié)在下表中:
除了這些「總體數(shù)字」之外,還有其他一些重要考慮因素:
如今,Verkle tree 代碼已經(jīng)相當(dāng)成熟。使用除 Verkle 之外的任何代碼實(shí)際上都會(huì)延遲部署,很可能是一次硬分叉。這沒關(guān)系,特別是如果我們無論如何都需要額外的時(shí)間來進(jìn)行哈希函數(shù)分析或證明器實(shí)現(xiàn),并且如果我們有其他重要功能希望更早地包含在以太坊中。
使用哈希更新狀態(tài)根比使用 Verkle tree 更快。這意味著基于哈希的方法可以縮短全節(jié)點(diǎn)的同步時(shí)間。
Verkle tree 具有有趣的見證更新屬性- Verkle tree 見證是可更新的。此屬性對(duì)于內(nèi)存池、包含列表和其他用例非常有用,并且還可能有助于提高實(shí)現(xiàn)效率:如果狀態(tài)對(duì)象已更新,您甚至可以在不讀取最后一級(jí)的情況下更新倒數(shù)第二級(jí)的見證。
Verkle tree 更難通過 SNARK 證明。如果我們想將證明大小一直減少到幾千字節(jié),Verkle 證明會(huì)帶來一些困難。這是因?yàn)?Verkle 證明的驗(yàn)證引入了大量 256 位操作,這要求證明系統(tǒng)要么有大量開銷,要么本身具有自定義內(nèi)部構(gòu)造,其中 256 位部分用于 Verkle 證明。這對(duì)無狀態(tài)性本身來說不是問題,但會(huì)在以后帶來更多困難。
如果我們希望以量子安全且合理高效的方式實(shí)現(xiàn) Verkle 見證可更新性,另一種可能的途徑是。
如果證明系統(tǒng)在最壞情況下效率不夠高,我們可以使用另一個(gè)「出其不意」的辦法來彌補(bǔ)這種不足,那就是gas:對(duì)(i)調(diào)用數(shù)據(jù)、(ii)計(jì)算、(iii)狀態(tài)訪問以及可能的其他不同資源設(shè)置單獨(dú)的 gas 限制。多維 gas 增加了復(fù)雜性,但作為交換,它更嚴(yán)格地限制了平均情況和最壞情況之間的比率。使用多維 gas ,理論上需要證明的最大分支數(shù)可能會(huì)從30,000,000 / 2400 = 12,500
3000 減少到 3000。這樣的話,即使是如今的 BLAKE3 也足夠了,無需對(duì) proof 進(jìn)行進(jìn)一步改進(jìn)。
另一個(gè)「出乎意料」的是將狀態(tài)根計(jì)算延遲到區(qū)塊之后的slot。這將給我們整整 12 秒的時(shí)間來計(jì)算狀態(tài)根,這意味著即使在最極端的情況下,也只有 ~60,000 哈希/秒的證明時(shí)間就足夠了,這再次使我們處于 BLAKE3 的范圍內(nèi),這才勉強(qiáng)夠用。
這種方法的缺點(diǎn)是它會(huì)增加輕客戶端延遲,不過這種技術(shù)還有更巧妙的版本,可以將延遲減少到證明生成延遲。例如,只要任何節(jié)點(diǎn)生成證明,就可以在網(wǎng)絡(luò)上廣播,而不必等待下一個(gè)區(qū)塊。
它如何與路線圖的其他部分互動(dòng)?
解決無狀態(tài)問題極大地提高了 SOLo 質(zhì)押的便利性。如果能夠降低 solo 質(zhì)押最低余額的技術(shù)(例如 Orbit SSF 或等應(yīng)用層策略)可用,這將變得更有價(jià)值。
如果同時(shí)引入 EOF,多維 gas 會(huì)變得更加容易。這是因?yàn)閳?zhí)行在于處理不傳遞父調(diào)用的全部 gas 的子調(diào)用,而 EOF 只需使此類子調(diào)用非法即可使這個(gè)問題變得微不足道(并且本機(jī)帳戶抽象將為當(dāng)前部分 gas 子調(diào)用的主要用例提供協(xié)議內(nèi)替代方案)。
另一個(gè)重要的協(xié)同作用是無狀態(tài)驗(yàn)證和歷史過期之間的協(xié)同作用。如今,客戶端必須存儲(chǔ)近 1TB 的歷史數(shù)據(jù);這些數(shù)據(jù)比狀態(tài)大幾倍。即使客戶端是無狀態(tài)的,除非我們能夠減輕客戶端存儲(chǔ)歷史的責(zé)任,否則幾乎無存儲(chǔ)客戶端的夢(mèng)想也無法實(shí)現(xiàn)。這方面的第一步是,它還意味著將歷史數(shù)據(jù)存儲(chǔ)在 torrent 或 Portal 網(wǎng)絡(luò)中。
EVM 執(zhí)行的有效性證明
我們要解決什么問題?
以太坊區(qū)塊驗(yàn)證的長期目標(biāo)很明確:您應(yīng)該能夠通過以下方式驗(yàn)證以太坊區(qū)塊:(i)下載區(qū)塊,或者甚至僅下載區(qū)塊的一小部分(使用數(shù)據(jù)可用性采樣);(ii)驗(yàn)證小型 proof。這將是一項(xiàng)資源消耗極低的操作,可以在移動(dòng)客戶端、瀏覽器錢包內(nèi)甚至(沒有數(shù)據(jù)可用性部分)在另一條鏈中完成。
要達(dá)到這一點(diǎn),需要有 (i)共識(shí)層(即權(quán)益證明)和 (ii)執(zhí)行層(即 EVM)的 SNARK 或 STARK 證明。前者本身就是一個(gè)挑戰(zhàn),應(yīng)該在進(jìn)一步改進(jìn)共識(shí)層(例如,single slot 最終性)的過程中加以解決。后者需要 EVM 執(zhí)行的證明。
EVM 執(zhí)行有效性證明是什么以及它是如何工作的?
在以太坊規(guī)范中,EVM 被定義為狀態(tài)轉(zhuǎn)換函數(shù):你有一些預(yù)狀態(tài)S
,一個(gè)區(qū)塊B
,并且你正在計(jì)算一個(gè)后狀態(tài)S' = STF(S, B)
。如果用戶正在使用輕客戶端,他們沒有S
和S'
甚至B
全部;相反,他們有一個(gè)前狀態(tài)根R
,一個(gè)后狀態(tài)根R'
和一個(gè)區(qū)塊哈希H。需要證明的完整陳述大致如下:
公共輸入:前狀態(tài)根R
、后狀態(tài)根R'
、區(qū)塊哈希H
私有輸入:區(qū)塊主體B
,區(qū)塊訪問的狀態(tài)中的對(duì)象Q
,執(zhí)行區(qū)塊之后的相同對(duì)象Q'
,狀態(tài)證明(例如 Merkle 分支)P
聲明 1:是包含以下部分狀態(tài)的P
有效證明 :QR
聲明 2:如果在 上運(yùn)行 STFQ
,則 (i) 執(zhí)行僅訪問內(nèi)部的對(duì)象Q
,(ii) 該塊有效,并且 (iii) 結(jié)果是Q'
聲明 3Q'
:如果你使用和中的信息重新計(jì)算新的狀態(tài)根,P
你將得到R'
如果存在這種情況,您可以擁有一個(gè)完全驗(yàn)證以太坊 EVM 執(zhí)行情況的輕量級(jí)客戶端。這已經(jīng)使客戶端的資源占用非常低。要獲得真正完全驗(yàn)證以太坊客戶端,您還需要對(duì)共識(shí)端進(jìn)行同樣的操作。
EVM 計(jì)算的有效性證明實(shí)現(xiàn)已經(jīng)存在,并被 layer2 大量使用。然而,要使 EVM 有效性證明適用于 L1,還有很多工作要做。
與現(xiàn)有研究有哪些聯(lián)系?
EF PSE ZK-EVM(現(xiàn)已停用,因?yàn)橛懈玫倪x擇):
Zeth 的工作原理是將 EVM 編譯到 RISC-0 ZK-VM 中:
ZK-EVM 形式化驗(yàn)證項(xiàng)目:
還剩下什么要做?有哪些需要權(quán)衡?
目前,EVM 的有效性證明在兩個(gè)方面存在不足:安全性和證明時(shí)間。
安全的有效性證明涉及確保 SNARK 確實(shí)驗(yàn)證了 EVM 計(jì)算,并且其中沒有錯(cuò)誤。提高安全性的兩種主要技術(shù)是和。multi-provers 意味著擁有多個(gè)獨(dú)立編寫的有效性證明實(shí)現(xiàn),就像有多個(gè)客戶端一樣,并且如果這些實(shí)現(xiàn)中足夠大的子集證明了某個(gè)塊,則客戶端會(huì)接受該塊。形式驗(yàn)證涉及使用常用于證明數(shù)學(xué)定理的工具(例如)來證明有效性證明僅接受正確執(zhí)行底層 EVM 規(guī)范的輸入(例如,用 python 編寫的或)。
足夠快的證明時(shí)間意味著任何以太坊區(qū)塊都可以在不到 4 秒的時(shí)間內(nèi)完成證明。今天,我們距離這個(gè)目標(biāo)還很遠(yuǎn),盡管我們比兩年前想象的要近得多。為了實(shí)現(xiàn)這一目標(biāo),我們需要在三個(gè)方向上取得進(jìn)展:
并行化- 目前最快的 EVM 證明器可以在約 15 秒內(nèi)對(duì)一個(gè)普通的以太坊區(qū)塊完成證明。它通過在數(shù)百個(gè) GPU 之間并行化,然后在最后將它們的工作聚合在一起來實(shí)現(xiàn)這一點(diǎn)。從理論上講,我們確切地知道如何制作一個(gè)可以在 O(log(N)) 時(shí)間內(nèi)證明計(jì)算的 EVM 證明器:讓一個(gè) GPU 執(zhí)行每個(gè)步驟,然后創(chuàng)建一個(gè)「聚合樹」:
實(shí)現(xiàn)這一點(diǎn)存在挑戰(zhàn)。即使在最壞的情況下,即一筆非常大的交易占據(jù)了整個(gè)區(qū)塊,計(jì)算的拆分也不能是按交易進(jìn)行的;它必須是按操作碼進(jìn)行的(EVM 或像 RISC-V 這樣的底層 VM)。一個(gè)關(guān)鍵的實(shí)現(xiàn)挑戰(zhàn)使得這一點(diǎn)并不完全簡(jiǎn)單,那就是需要確保 VM 的「內(nèi)存」在證明的不同部分之間是一致的。然而,如果我們可以做出這種遞歸證明,那么我們知道,至少證明延遲問題已經(jīng)得到解決,即使沒有對(duì)任何其他軸進(jìn)行任何改進(jìn)。
證明系統(tǒng)優(yōu)化、、等新的證明系統(tǒng)可能會(huì)再次大幅減少通用計(jì)算的證明時(shí)間。
EVM gas 成本其他變化- EVM 中的許多內(nèi)容可以進(jìn)行優(yōu)化,以更加方便證明者,尤其是在最壞的情況下。如果攻擊者可以構(gòu)建一個(gè)區(qū)塊,讓證明者的時(shí)間阻塞十分鐘,那么能夠在 4 秒內(nèi)證明一個(gè)普通的以太坊區(qū)塊是不夠的。所需的 EVM 更改大致可分為兩類:
gas 成本變化- 如果一個(gè)操作需要很長時(shí)間才能證明,那么即使計(jì)算速度相對(duì)較快,其 gas 成本也應(yīng)該很高。EIP是針對(duì)這方面最嚴(yán)重的違規(guī)者提出的一項(xiàng) EIP:它顯著增加了(傳統(tǒng))哈希函數(shù)的 gas 成本,這些哈希函數(shù)以相對(duì)便宜的操作碼和預(yù)編譯的形式公開。為了補(bǔ)償這些 gas 成本的增加,我們可以降低證明成本相對(duì)較低的 EVM 操作碼的 gas 成本,從而保持平均吞吐量不變。
數(shù)據(jù)結(jié)構(gòu)替換- 除了用更適合 STARK 的替代方案替換狀態(tài)樹之外,我們還需要替換交易列表、收據(jù)樹和其他證明成本高昂的結(jié)構(gòu)。Etan Kissling 的 EIP 將交易和收據(jù)結(jié)構(gòu)移至 SSZ()是朝這個(gè)方向邁出的一步。
除此之外,上一節(jié)中提到的兩只「帽子里變出來的兔子」(多維 gas和延遲狀態(tài)根)也可以在這里提供幫助。然而,值得注意的是,與無狀態(tài)驗(yàn)證不同,使用帽子里變出來的兔子意味著我們有足夠的技術(shù)來完成我們今天需要做的事情,即使使用這些技術(shù),完整的 ZK-EVM 驗(yàn)證也會(huì)需要更多的工作(它只需要更少的工作)。
上面沒有提到的一件事是證明器硬件:使用 GPU、FPGA 和 ASIC 來更快地生成證明。Fabric、和是三家正在推動(dòng)這一進(jìn)程的公司。這對(duì)于 layer2 來說將非常有價(jià)值,但它不太可能成為 layer1 的決定性考慮因素,因?yàn)槿藗儚?qiáng)烈希望保持 layer1 的高度去中心化,這意味著證明生成必須在相當(dāng)大一部分以太坊用戶的能力范圍內(nèi),而不應(yīng)受到單個(gè)公司硬件的限制。 layer2 可以做出更積極的權(quán)衡。
以下每個(gè)領(lǐng)域仍有許多工作要做:
并行化證明需要證明系統(tǒng),其中證明的不同部分可以「共享內(nèi)存」(例如查找表)。我們知道實(shí)現(xiàn)這一點(diǎn)的技術(shù),但它們需要實(shí)現(xiàn)。
我們需要進(jìn)行更多分析來找出理想的 gas 成本變化,以最大限度地減少最壞情況的驗(yàn)證時(shí)間。
我們需要在證明系統(tǒng)方面做更多的工作
這里可能的權(quán)衡包括:
安全性與證明時(shí)間:可以通過選擇更積極的哈希函數(shù)、更復(fù)雜或更積極的安全假設(shè)的證明系統(tǒng)或其他設(shè)計(jì)選擇來縮短證明時(shí)間。
去中心化與證明時(shí)間:社區(qū)需要就其所針對(duì)的證明硬件的「規(guī)格」達(dá)成一致。要求證明者是大型實(shí)體可以嗎?我們是否希望高端消費(fèi)筆記本電腦能夠在 4 秒內(nèi)證明以太坊區(qū)塊?介于兩者之間?
破壞向后兼容性的程度:其他領(lǐng)域的不足可以通過進(jìn)行更激進(jìn)的 gas 成本變更來彌補(bǔ),但這更有可能不成比例地增加某些應(yīng)用程序的成本,并迫使開發(fā)人員重寫和重新部署代碼以保持經(jīng)濟(jì)可行性。同樣,「帽子里的兔子」也有其自身的復(fù)雜性和缺點(diǎn)。
它如何與路線圖的其他部分互動(dòng)?
實(shí)現(xiàn) layer1 的 EVM 有效性證明所需的核心技術(shù)與其他兩個(gè)領(lǐng)域高度共享:
layer2 的有效性證明(即「ZK rollups」)
「STARK 二進(jìn)制哈希證明」 無國籍方法
在 layer1 成功實(shí)施有效性證明可實(shí)現(xiàn)極致輕松的solo 質(zhì)押:即使是最弱的計(jì)算機(jī)(包括手機(jī)或智能手表)也能夠進(jìn)行質(zhì)押。這進(jìn)一步增加了解決solo 質(zhì)押的其他限制(例如最低 32 ETH)的價(jià)值。
此外,L1 的 EVM 有效性證明可以顯著提高 L1 的 gas 限制。
共識(shí)的有效性證明
我們要解決什么問題?
如果我們希望使用 SNARK 完全驗(yàn)證以太坊區(qū)塊,那么 EVM 執(zhí)行并不是我們需要證明的唯一部分。我們還需要證明共識(shí):系統(tǒng)中處理存款、取款、簽名、驗(yàn)證者余額更新以及以太坊權(quán)益證明部分的其他元素的部分。
該共識(shí)比 EVM 簡(jiǎn)單得多,但它面臨的挑戰(zhàn)是,我們沒有 layer2 EVM rollup,這也是大部分工作無論如何都要完成的原因。因此,任何證明以太坊共識(shí)的實(shí)現(xiàn)都需要「從頭開始」,盡管證明系統(tǒng)本身是可以在此基礎(chǔ)上構(gòu)建的共享工作。
它是什么以及它是如何工作的?
信標(biāo)鏈被,就像 EVM 一樣。狀態(tài)轉(zhuǎn)換函數(shù)由三件事主導(dǎo):
ECADD(用于驗(yàn)證 BLS 簽名)
配對(duì)(用于驗(yàn)證 BLS 簽名)
SHA256 哈希(用于讀取和更新狀態(tài))
在每個(gè)區(qū)塊中,我們需要為每個(gè)驗(yàn)證者證明 1-16 個(gè) BLS12-381ECADD(可能不止一個(gè),因?yàn)楹灻梢园诙鄠€(gè)聚合中)。這可以通過子集預(yù)計(jì)算技術(shù)來補(bǔ)償,因此總的來說,我們可以說每個(gè)驗(yàn)證者有一個(gè) BLS12-381 ECADD。今天,每個(gè) slot 中有大約 30,000 個(gè)驗(yàn)證者簽名。在未來,隨著單 slot 的終結(jié),這可能會(huì)朝任何一個(gè)方向改變(請(qǐng)參閱):如果我們采取「蠻力」路線,這可能會(huì)增加到每個(gè) slot 100 萬個(gè)驗(yàn)證者。同時(shí),使用 Orbit SSF,它將保持在 32,768,甚至減少到 8,192。
BLS 聚合的工作原理。驗(yàn)證聚合簽名僅需要每個(gè)參與者進(jìn)行一次 ECADD,而不是 ECMUL。但 30,000 次 ECADD 仍有大量工作需要證明。
對(duì)于配對(duì),目前每個(gè) slot 最多有 128 個(gè)證明,這意味著需要驗(yàn)證 128 個(gè)配對(duì)。隨著和進(jìn)一步的變更,這個(gè)數(shù)字可能會(huì)減少到每個(gè) slot 16 個(gè)。配對(duì)數(shù)量很少,但成本極高:每個(gè)配對(duì)的運(yùn)行時(shí)間(或證明時(shí)間)是 ECADD 的數(shù)千倍。
證明 BLS12-381 操作的一個(gè)主要挑戰(zhàn)是,沒有方便的曲線,其曲線階數(shù)等于 BLS12-381 字段大小,這會(huì)給任何證明系統(tǒng)增加相當(dāng)大的開銷。另一方面,為以太坊提出的 Verkle tree 是用構(gòu)建的,這使得 BLS12-381 本身成為 SNARK 系統(tǒng)中用來證明 Verkle 分支的自然曲線。一個(gè)相當(dāng)簡(jiǎn)單的實(shí)現(xiàn)可以證明每秒約 100 個(gè) G1 加法;幾乎肯定需要像 GKR 這樣的巧妙技術(shù)來使證明足夠快。
對(duì)于SHA256 哈希值,目前最糟糕的情況是 epoch 轉(zhuǎn)換塊,其中整個(gè)驗(yàn)證器短余額樹和大量驗(yàn)證器余額都會(huì)更新。驗(yàn)證器短余額樹每個(gè)驗(yàn)證器占一個(gè)字節(jié),因此大約有 1 MB 的數(shù)據(jù)被重新哈希。這相當(dāng)于 32,768 次 SHA256 調(diào)用。如果一千個(gè)驗(yàn)證器的余額高于或低于需要更新驗(yàn)證器記錄中的有效余額的閾值,這相當(dāng)于一千個(gè) Merkle 分支,因此可能還需要一萬個(gè)哈希值。需要每個(gè)驗(yàn)證器 90 位(因此需要 11 MB 數(shù)據(jù)),但這可以在一個(gè) epoch 的過程中隨時(shí)計(jì)算。在single slot 最終性的情況下,這些數(shù)字可能會(huì)根據(jù)細(xì)節(jié)再次增加或減少。改組變得沒有必要,盡管 Orbit 可能會(huì)在一定程度上重新需要改組。
另一個(gè)挑戰(zhàn)是需要讀取所有驗(yàn)證器狀態(tài)(包括公鑰)才能驗(yàn)證區(qū)塊。僅讀取公鑰就需要 4800 萬字節(jié)(100 萬個(gè)驗(yàn)證器,加上 Merkle 分支)。這需要每個(gè)時(shí)期數(shù)百萬個(gè)哈希值。如果我們今天必須證明權(quán)益證明的驗(yàn)證,那么一種現(xiàn)實(shí)的方法將是某種形式的增量可驗(yàn)證計(jì)算:在證明系統(tǒng)內(nèi)存儲(chǔ)一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)針對(duì)高效查找進(jìn)行了優(yōu)化,并證明對(duì)該結(jié)構(gòu)的更新。
總而言之,有很多挑戰(zhàn)。
要最有效地解決這些挑戰(zhàn),可能需要對(duì)信標(biāo)鏈進(jìn)行深度重新設(shè)計(jì),這可能與切換到 single slot 最終性同時(shí)發(fā)生。此重新設(shè)計(jì)的特點(diǎn)可能包括:
哈希函數(shù)更改:今天,使用「完整」SHA256 哈希函數(shù),因此由于填充,每次調(diào)用都對(duì)應(yīng)兩個(gè)底層壓縮函數(shù)調(diào)用。至少,通過切換到 SHA256 壓縮函數(shù),我們可以獲得 2 倍的收益。如果我們切換到 Poseidon,我們可以獲得潛在的約 100 倍的收益,這可以完全解決我們所有的問題(至少對(duì)于哈希而言):以每秒 170 萬個(gè)哈希(54 MB)的速度,即使一百萬個(gè)驗(yàn)證器記錄也可以在幾秒鐘內(nèi)「讀入」證明中。
如果是 Orbit,則直接存儲(chǔ)打亂的驗(yàn)證者記錄:如果您選擇一定數(shù)量的驗(yàn)證者(例如 8,192 或 32,768)作為給定 slot 的委員會(huì),則將它們直接放入彼此相鄰的狀態(tài)中,這樣就需要最少量的哈希來將所有驗(yàn)證者公鑰讀入證明。這還將允許高效地完成所有余額更新。
簽名聚合:任何高性能簽名聚合方案實(shí)際上都會(huì)涉及某種遞歸證明,其中簽名子集的中間證明將由網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)進(jìn)行。這自然會(huì)將證明負(fù)載分?jǐn)偟骄W(wǎng)絡(luò)中的許多節(jié)點(diǎn)上,從而使「最終證明者」的工作量大大減少。
其他簽名方案:對(duì)于 Lamport Merkle 簽名,我們需要 256 32 個(gè)哈希值來驗(yàn)證簽名;乘以 32,768 個(gè)簽名者可得到 9,437,184 個(gè)哈希值。對(duì)簽名方案的優(yōu)化可以通過一個(gè)小的常數(shù)因子進(jìn)一步改善這一點(diǎn)。如果我們使用 Poseidon,這在單個(gè) slot 內(nèi)即可證明。但實(shí)際上,使用遞歸聚合方案可以更快地完成這一過程。
與現(xiàn)有研究有哪些聯(lián)系?
簡(jiǎn)潔的以太坊共識(shí)證明(僅同步委員會(huì)):
簡(jiǎn)潔,SP1 內(nèi)的 Helios:
簡(jiǎn)潔的 BLS12-381 預(yù)編譯:
基于 Halo2 的 BLS 聚合簽名驗(yàn)證:
還剩下什么要做?有哪些需要權(quán)衡?
實(shí)際上,我們需要數(shù)年時(shí)間才能證明以太坊共識(shí)的有效性。這大致與我們需要實(shí)現(xiàn) single slot 最終性、Orbit、簽名算法更改以及潛在安全分析的時(shí)間相同,這些安全分析需要足夠自信地使用像 Poseidon 這樣的「激進(jìn)」哈希函數(shù)。因此,解決這些其他問題是最有意義的,并且在進(jìn)行這些工作時(shí)要牢記 STARK 友好性。
主要的權(quán)衡可能在于操作順序,即在改革以太坊共識(shí)層的更漸進(jìn)方法和更激進(jìn)的「一次進(jìn)行許多更改」方法之間。對(duì)于 EVM,漸進(jìn)方法是有意義的,因?yàn)樗畲笙薅鹊販p少了對(duì)向后兼容性的破壞。對(duì)于共識(shí)層,向后兼容性問題較小,并且更「全面」地重新思考信標(biāo)鏈構(gòu)建的各種細(xì)節(jié)是有好處的,從而最大限度地優(yōu)化 SNARK 友好性。
它如何與路線圖的其他部分互動(dòng)?
在以太坊權(quán)益證明共識(shí)的長期重新設(shè)計(jì)中,STARK 友好性需要成為主要關(guān)注點(diǎn),最值得注意的是 single slot 最終性、Orbit、簽名方案的更改以及簽名聚合。
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。