hao86下載站:值得大家信賴的游戲下載站!
網(wǎng)站導(dǎo)航
【#區(qū)塊鏈# #Vitalik: ZK-EVM 封裝到以太坊 L1 會(huì)怎樣?#】
原文:https://notes.ethereum.org/@vbuterin/enshrined_zk_evm
譯者:登鏈社區(qū)[1] 翻譯小組
建立在以太坊之上的 Layer2 EVM 協(xié)議,包括 Optimistic Rollups 和 ZK Rollups,都依賴于 EVM 驗(yàn)證。然而,這需要它們信任龐大的代碼庫(kù),如果代碼庫(kù)中存在漏洞,這些虛擬機(jī)就有被黑客攻擊的風(fēng)險(xiǎn)。此外,即便是想要與 L1 EVM 完全等效的 ZK-EVM,也需要某種形式的治理機(jī)制,以便將 L1 EVM 的更改復(fù)制到其自身的 EVM 實(shí)現(xiàn)中。
這種情況并不理想,因?yàn)檫@些項(xiàng)目在復(fù)制已存在于以太坊協(xié)議中的功能,并且以太坊治理已經(jīng)負(fù)責(zé)升級(jí)和修復(fù)錯(cuò)誤的地方:ZK-EVM 基本上做的是驗(yàn)證 Layer1 以太坊區(qū)塊的工作!此外,在未來(lái)幾年中,我們預(yù)計(jì) 輕客戶端[2] 會(huì)變得越來(lái)越強(qiáng)大,很快就會(huì) 使用 ZK-SNARKs 完全驗(yàn)證 L1 EVM 執(zhí)行 。到那時(shí), 以太坊網(wǎng)絡(luò)將有效地?fù)碛袃?nèi)置的 ZK-EVM 。因此,一個(gè)問(wèn)題就出現(xiàn)了:為什么不讓ZK-EVM原生地用于rollup呢?
本文將介紹幾個(gè)可以實(shí)施的封裝 ZK-EVM的版本 ,并詳細(xì)介紹權(quán)衡和設(shè)計(jì)挑戰(zhàn),以及不采取特定方向的原因。實(shí)施協(xié)議特性的優(yōu)勢(shì)應(yīng)該與留給生態(tài)系統(tǒng)并保持基礎(chǔ)協(xié)議簡(jiǎn)單性的好處進(jìn)行權(quán)衡。
基本功能:驗(yàn)證以太坊區(qū)塊 。協(xié)議特性(暫未確定是否為操作碼、預(yù)編譯或其他機(jī)制)應(yīng)接受(至少)一個(gè)預(yù)狀態(tài)根、一個(gè)區(qū)塊和一個(gè)后狀態(tài)根作為輸入,并驗(yàn)證后狀態(tài)根實(shí)際上是在預(yù)狀態(tài)根上執(zhí)行區(qū)塊的結(jié)果。
與以太坊多客戶端理念的兼容性[3],這意味著我們希望避免使用單一的證明系統(tǒng),而是允許不同的客戶使用不同的證明系統(tǒng)。這反過(guò)來(lái)又意味著幾點(diǎn):
數(shù)據(jù)可用性要求:對(duì)于通過(guò)封裝的 ZK-EVM 進(jìn)行的任何 EVM 執(zhí)行,我們希望能 保證底層數(shù)據(jù)可用性[4] ,這樣使用不同證明系統(tǒng)的證明者可以重新證明執(zhí)行,并且依賴該證明系統(tǒng)的客戶端可以驗(yàn)證新生成的證明。
證明存放在 EVM 和區(qū)塊數(shù)據(jù)結(jié)構(gòu)之外:ZK-EVM 功能不會(huì)將 SNARK 直接作為 EVM 輸入,因?yàn)椴煌蛻舳似谕煌愋偷?SNARK。相反,它可能 類似于 blob 驗(yàn)證 :交易可以包括(預(yù)狀態(tài)、區(qū)塊主體、后狀態(tài))需要證明的聲明,一個(gè)操作碼或預(yù)編譯可以訪問(wèn)這些聲明的內(nèi)容,客戶端共識(shí)規(guī)則將分別檢查數(shù)據(jù)可用性和區(qū)塊中所作每個(gè)聲明的證明的存在。
可審計(jì)性:如果任何執(zhí)行被證明,我們希望底層數(shù)據(jù)可用,以便用戶和開(kāi)發(fā)者可以檢查。實(shí)際上,這又增加了一個(gè)數(shù)據(jù)可用性要求很重要的原因。
可升級(jí)性:如果發(fā)現(xiàn)某個(gè)特定的 ZK-EVM 方案存在漏洞,我們希望能夠迅速修復(fù),而 不需要硬分叉 。這又增加了 證明存放在 EVM 和區(qū)塊數(shù)據(jù)結(jié)構(gòu)之外的重要性 。
支持almost - EVMs:L2 的吸引力之一是在執(zhí)行層面進(jìn)行創(chuàng)新 ,并對(duì) EVM 進(jìn)行擴(kuò)展 。如果給定 L2 的虛擬機(jī)與 EVM 僅略有不同,那么當(dāng) L2 與 EVM 相同的部分仍然可以使用原生的協(xié)議內(nèi) ZK-EVM 時(shí),這將是很好的,只有對(duì)于與 EVM 不同的部分才會(huì)依賴他們自己的代碼。這可以通過(guò)設(shè)計(jì) ZK-EVM 功能的方式來(lái)完成,使其允許調(diào)用者指定位域(bitfield)、操作碼或地址列表,由外部提供的表來(lái)處理而不是由 EVM 本身。我們還可以在有限的范圍內(nèi)使 gas 成本可定制。
多客戶端理念可能是上述列表中最有主張的要求 。有放棄它并專注于一個(gè) ZK-SNARK 方案的選擇,這將簡(jiǎn)化設(shè)計(jì),但代價(jià)是成為以太坊更大的理念轉(zhuǎn)向(因?yàn)樗鼘?shí)際上是放棄以太坊長(zhǎng)期以來(lái)的多客戶端理念),并引入更大的風(fēng)險(xiǎn)。在長(zhǎng)期的未來(lái),例如形式驗(yàn)證技術(shù)變得更加完善時(shí),可能更好的做法是走這條路線,但目前看來(lái)風(fēng)險(xiǎn)似乎太大。
另一種選擇是 封閉的多客戶端系統(tǒng) ,在協(xié)議中已知一組固定的證明系統(tǒng)。例如,我們可能決定使用三個(gè) ZK-EVM:PSE ZK-EVM[5] ,Polygon ZK-EVM[6] 和 Kakarot[7]。一個(gè)區(qū)塊需要來(lái)自這三個(gè)中的兩個(gè)的證明才能被視為有效。這比單一證明系統(tǒng)要好,但它使系統(tǒng)更少適應(yīng)性,因?yàn)橛脩舯仨毦S護(hù)每個(gè)證明系統(tǒng)的驗(yàn)證器,必然會(huì)對(duì)納入新證明系統(tǒng)的政治治理程序等產(chǎn)生影響。
這促使 我傾向于開(kāi)放的多客戶端系統(tǒng) ,其中證明被放置在「區(qū)塊之外」并由客戶端單獨(dú)驗(yàn)證。個(gè)體用戶將使用他們想要的客戶端來(lái)驗(yàn)證區(qū)塊,只要有一個(gè)證明者為該證明系統(tǒng)創(chuàng)建證明就可以。證明系統(tǒng)通過(guò)說(shuō)服用戶運(yùn)行它們來(lái)獲得影響力,而不是通過(guò)說(shuō)服協(xié)議治理流程。然而,這種方法的復(fù)雜性成本更高,正如我們將看到的那樣。
除了正確功能和安全性的基本保證外, 最重要的特性是速度 。雖然可以設(shè)計(jì)一個(gè)異步的協(xié)議內(nèi) ZK-EVM 功能,僅在經(jīng)過(guò) N 個(gè)槽之后才返回每個(gè)聲明的答案,但如果我們能夠可靠的保證可以在幾秒鐘內(nèi)生成證明,那么問(wèn)題就會(huì)變得容易的多,因此每個(gè)塊鐘發(fā)生的任何事情都是獨(dú)立的。
雖然今天為以太坊區(qū)塊生成證明需要很多分鐘甚至小時(shí),但我們知道沒(méi)有理論上的理由阻止大規(guī)模并行化:我們總是可以組裝足夠多的 GPU 來(lái)分別證明區(qū)塊執(zhí)行的不同部分 ,然后使用遞歸 SNARKs 將證明合并在一起。此外,通過(guò) FPGA 和 ASIC 的硬件加速可以幫助優(yōu)化證明。然而,要實(shí)現(xiàn)這一點(diǎn)是一個(gè)重大的工程挑戰(zhàn),不應(yīng)低估。
類似于 EIP-4844 blob 交易[8],我們引入了一種包含 ZK-EVM 聲明的新交易類型:
與 EIP-4844 類似,傳播于內(nèi)存池中的對(duì)象將是交易的修改版本:
后者可以轉(zhuǎn)換為前者,但反之則不然。我們還擴(kuò)展了區(qū)塊 side car 對(duì)象(在 EIP-4844[9] 中引入)以包含區(qū)塊中所做聲明的證明列表。
請(qǐng)注意,在實(shí)際操作中,我們很可能希望將 sidecar 分為兩個(gè)獨(dú)立的 sidecars,一個(gè)用于 blob,另一個(gè)用于證明,并為每種類型的證明設(shè)立一個(gè)獨(dú)立的子網(wǎng)(另外還有一個(gè)子網(wǎng)用于 blobs)。
在共識(shí)層上,我們添加了一個(gè)驗(yàn)證規(guī)則 :只有當(dāng)客戶端看到區(qū)塊中每個(gè)聲明的有效證明后,才能接受該區(qū)塊。證明必須是一個(gè) ZK-SNARK,證明了 transaction_and_witness_blobs
的串聯(lián)是(Block, Witness)對(duì)的序列化,以及使用 Witness(i)在 pre_state_root
上執(zhí)行區(qū)塊是有效的,并且(ii)輸出了正確的 post_state_root
。潛在地,客戶端可以選擇等待多種類型證明的 M-of-N。
在這里要提及的一個(gè)哲學(xué)觀點(diǎn)是,區(qū)塊執(zhí)行本身可以被視為簡(jiǎn)單地是需要與 ZKEVMClaimTransaction
對(duì)象中提供的三元組一起檢查的 (σpre,σpost,Proof) 三元組之一。因此,用戶的 ZK-EVM 實(shí)現(xiàn)可以替換他們的執(zhí)行客戶端;執(zhí)行客戶端仍將由(i)證明者和區(qū)塊構(gòu)建者使用,以及(ii)關(guān)心本地使用索引和存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn)使用。
假設(shè)有兩個(gè)以太坊客戶端,其中一個(gè)使用 PSE ZK-EVM,另一個(gè)使用 Polygon ZK-EVM。假設(shè)到目前為止,這兩個(gè)實(shí)現(xiàn)都已經(jīng)進(jìn)化到可以在 5 秒內(nèi)證明以太坊區(qū)塊執(zhí)行的程度,并且對(duì)于每種證明系統(tǒng),都有足夠多的獨(dú)立志愿者運(yùn)行硬件來(lái)生成證明。
不幸的是,由于個(gè)體證明系統(tǒng)沒(méi)有被納入,因此它們無(wú)法在協(xié)議中獲得激勵(lì);然而,我們預(yù)計(jì)與研究和開(kāi)發(fā)相比,運(yùn)行證明者的成本將較低, 因此我們可以簡(jiǎn)單地通過(guò)用于公共產(chǎn)品資助的通用機(jī)構(gòu)來(lái)資助證明者 。
假設(shè)有人發(fā)布了 ZKEvmClaimNetworkTransaction,但只發(fā)布了 PSE ZK-EVM 的 proof 版本。Polygon ZK-EVM 的證明節(jié)點(diǎn)看到了這一情況,計(jì)算并重新發(fā)布了具有 Polygon ZK-EVM proof 的對(duì)象。
這增加了最早接受區(qū)塊的誠(chéng)實(shí)節(jié)點(diǎn)和最后接受同一區(qū)塊的最新誠(chéng)實(shí)節(jié)點(diǎn)之間的總最大延遲,從 δ 到 2δ+Tprove(在這里假設(shè) Tprove
然而,好消息是, 如果我們采用單個(gè)槽最終確定性,我們幾乎可以肯定地將這種額外延遲與 SSF 中固有的多輪共識(shí)延遲一起"管道化"處理。 例如,在這個(gè) 4 子槽提案[10] 中,"頭投票"步驟可能只需要檢查基本區(qū)塊的有效性,但"凍結(jié)并確認(rèn)"步驟需要存在一個(gè)證明。
ZK-EVM 功能的一個(gè)理想目標(biāo)是 支持almost-EVMs:他是是具有一些額外特性的 EVM 。這可能包括新的預(yù)編譯器、新的操作碼、有選項(xiàng)可以用 EVM 或完全不同的 VM(例如 Arbitrum Stylus[11] 中的情況)方式來(lái)編寫合約,甚至具有同步交叉通信的多個(gè)并行 EVM。
一些修改可以以簡(jiǎn)單方式支持:我們可以定義一種語(yǔ)言,允許 ZKEVMClaimTransaction
傳遞修改后的 EVM 規(guī)則的完整描述。這可以應(yīng)用于:
自定義 gas 成本表(用戶不允許減少 gas fee,但可以增加)
禁用特定操作碼
設(shè)置區(qū)塊編號(hào)(這將意味著根據(jù)硬分叉而有不同的規(guī)則)
設(shè)置激活專門用于 L2 但不用于 L1 的一整套 EVM 變更的標(biāo)志,或者其他簡(jiǎn)單的變更
為了允許用戶通過(guò)引入新的預(yù)編譯器(或操作碼)以更加開(kāi)放地引入新功能,我們可以在以下位置添加預(yù)編譯的輸入/輸出腳本,其作為 ZKEVMClaimNetworkTransaction 中 blob 的一部分包含在:
EVM 執(zhí)行將進(jìn)行修改。一個(gè)數(shù)組 inputs
將被初始化為空。第 i 次調(diào)用 used_precompile_addresses
中的地址時(shí),我們向 inputs
添加 InputsRecord(callee_address, gas, input_calldata)
,并將調(diào)用的 RETURNDATA
設(shè)置為 outputs[i]
。最后,我們檢查 used_precompile_addresses
總共被調(diào)用了 len(outputs)
次,以及 inputs_commitments
是否與對(duì) inputs
的 SSZ 序列化產(chǎn)生的 blob 承諾的結(jié)果相匹配。暴露 inputs_commitments
的目的是為了便于外部 SNARK 證明輸入與輸出之間的關(guān)系。
請(qǐng)注意輸入(存儲(chǔ)在哈希中)和輸出(以字節(jié)形式存儲(chǔ))之間的不對(duì)稱性。這是因?yàn)閳?zhí)行需要能夠由只看到輸入并理解 EVM 的客戶端完成。EVM 執(zhí)行已經(jīng)為它們生成了輸入,因此它們只需要檢查生成的輸入是否與聲稱的輸入匹配,這只需要進(jìn)行哈希檢查。然而,輸出必須完整提供給它們,因此必須具有數(shù)據(jù)可用性。
另一個(gè)有用的特性可能是 允許"特權(quán)交易" ,可以從任意發(fā)送方帳戶進(jìn)行調(diào)用。這些交易可以在兩個(gè)其他交易之間運(yùn)行,或者在另一個(gè)(可能也是特權(quán)的)交易中調(diào)用預(yù)編譯器時(shí)運(yùn)行。這可以用于允許非 EVM 機(jī)制回調(diào)到 EVM。
此設(shè)計(jì)可以修改以支持新的或修改后的操作碼 ,除了新的或修改后的預(yù)編譯器。即使只有預(yù)編譯器,這種設(shè)計(jì)也非常強(qiáng)大。例如:
通過(guò)將 used_precompile_addresses
設(shè)置為包含在狀態(tài)中具有某些標(biāo)志的常規(guī)帳戶地址列表,并生成一個(gè) SNARK 證明以證明其正確構(gòu)造,你可以支持像 Arbitrum Stylus[12]風(fēng)格的特性,其中合約可以在 EVM 或 WASM(或其他 VM)中編寫其代碼。特權(quán)交易可用于允許 WASM 帳戶回調(diào)到 EVM。
通過(guò)添加外部檢查來(lái)驗(yàn)證多個(gè) EVM 執(zhí)行的輸入/輸出記錄和特權(quán)交易以正確方式匹配,你可以證明一種多個(gè) EVM 的并行系統(tǒng),這些系統(tǒng)通過(guò)同步通道進(jìn)行通信。
Type 4 的 ZK-EVM[13]可以通過(guò)多個(gè)實(shí)現(xiàn)來(lái)運(yùn)行:一種將 Solidity 或其他更高級(jí)別的語(yǔ)言直接轉(zhuǎn)換為 SNARK 友好的 VM 的實(shí)現(xiàn),并另一種將其編譯為 EVM 代碼并在內(nèi)置的 ZK-EVM中執(zhí)行。第二種(不可避免地更慢)實(shí)現(xiàn)只能在出現(xiàn)故障證明者發(fā)送交易斷言存在漏洞的情況下運(yùn)行,并在提供一個(gè)兩處處理不同的交易時(shí),則收取賞金。
可以通過(guò)使所有調(diào)用返回零并將調(diào)用映射到添加到區(qū)塊末尾的特權(quán)交易來(lái)實(shí)現(xiàn)純異步 VM。
上述設(shè)計(jì)的一個(gè)挑戰(zhàn)是它完全是無(wú)狀態(tài)的,這使得它數(shù)據(jù)效率低下。使用理想的數(shù)據(jù)壓縮,與僅使用無(wú)狀態(tài)壓縮相比,一個(gè) ERC20 發(fā)送在使用有狀態(tài)壓縮時(shí),空間效率最高可提高 3 倍。
除此之外,有狀態(tài)的 EVM 不需要提供見(jiàn)證數(shù)據(jù)。在兩種情況下,原則都是相同的:要求數(shù)據(jù)可用是一種浪費(fèi),因?yàn)槲覀円呀?jīng)知道該數(shù)據(jù)是可用的,因?yàn)樗窃谙惹暗?EVM 執(zhí)行中輸入或生成的。
如果我們想使 ZK-EVM 功能有狀態(tài),則有兩種選擇:
要求 σpre 為空 ,或者是一個(gè)的預(yù)先聲明的鍵和值數(shù)據(jù)可用列表,或者是先前執(zhí)行 σpost的某個(gè)列表
向(σpre,σpost,Proof)元組添加一個(gè)與區(qū)塊生成的 receipt R 的 blob 承諾。 在 ZKEVMClaimTransaction 中可以引用任何先前生成或使用的 blob 承諾,包括代表區(qū)塊、見(jiàn)證、receipt,甚至常規(guī)的 EIP-4844 blob 交易,或許還有一些時(shí)間限制,可以在其執(zhí)行期間訪問(wèn)(可能通過(guò)一系列指令:「在區(qū)塊+見(jiàn)證數(shù)據(jù)的位置 j 插入承諾 i 的字節(jié) N...N+k-1」)
(1) 基本是說(shuō):與其無(wú)狀態(tài) EVM 驗(yàn)證納入其中(封裝),不過(guò)將 EVM 子鏈納入其中(封裝)。(2)本質(zhì)上是創(chuàng)建了一個(gè)最小的內(nèi)置有狀態(tài)壓縮算法,該算法使用先前使用或生成的 blobs 作為字典。這兩種方式都會(huì)給證明節(jié)點(diǎn)增加負(fù)擔(dān),并且只有證明節(jié)點(diǎn)才能存儲(chǔ)更多信息;在情況(2)中,比情況(1)更容易使該負(fù)擔(dān)有時(shí)間限制。
封閉式多證明系統(tǒng),其中具有 M-of-N 結(jié)構(gòu)的固定數(shù)量的證明系統(tǒng),避免了上述許多復(fù)雜性。 封閉式多證明者系統(tǒng)特別是不需要擔(dān)心確保數(shù)據(jù)在鏈上的問(wèn)題。此外,封閉式多證明者系統(tǒng)將允許 ZK-EVM 證明鏈下執(zhí)行;這使其與 EVM Plasma 解決方案[14]兼容。
然而, 封閉式多證明者系統(tǒng)增加了治理復(fù)雜性并消除了可審計(jì)性 ,這些是需要權(quán)衡帶來(lái)這些好處的高成本。
當(dāng)前由 Layer2 團(tuán)隊(duì)實(shí)現(xiàn)的 EVM 驗(yàn)證功能將由協(xié)議處理,但 Layer2 項(xiàng)目仍將負(fù)責(zé)許多重要功能:
快速預(yù)確認(rèn) :?jiǎn)蝹€(gè)槽最終性可能會(huì)使 Layer1 槽(slot)變慢,而 Layer2 項(xiàng)目已經(jīng)為其用戶提供了由 Layer2 自身安全性支持的「預(yù)確認(rèn)」,延遲遠(yuǎn)低于一個(gè)槽。這項(xiàng)服務(wù)將繼續(xù)純粹由 Layer2 負(fù)責(zé)。
MEV 緩解策略 :這可能包括加密內(nèi)存池、基于聲譽(yù)的序列選擇以及 Layer1 不愿意實(shí)施的其他功能。
對(duì) EVM 的擴(kuò)展 :Layer2 項(xiàng)目可以包含對(duì) EVM 的重要擴(kuò)展,為其用戶提供巨大價(jià)值。這包括alomost-EVM 和諸如 Arbitrum Stylus[15]的 WASM 支持以及 SNARK-friendly Cairo(https://www.cairo-lang.org/)語(yǔ)言等完全不同的方法。
面向用戶和開(kāi)發(fā)者的便利性 :Layer2 團(tuán)隊(duì)致力于吸引用戶和項(xiàng)目進(jìn)入其生態(tài)系統(tǒng)并使其感到受歡迎;他們通過(guò)在其網(wǎng)絡(luò)內(nèi)捕獲 MEV 和擁堵費(fèi)用來(lái)獲得補(bǔ)償。這種關(guān)系將繼續(xù)存在。
小編推薦下載
相關(guān)推薦
相關(guān)文章
更多>>資訊排行
同類軟件下載
以太坊錢包 金融理財(cái)
1號(hào)坊 購(gòu)物優(yōu)惠
ZK ivision 拍照攝影
以太生態(tài) 金融理財(cái)
Android L 鍵盤(Android L Keyboard) 學(xué)習(xí)工具
以太森林 金融理財(cái)
以太貓 金融理財(cái)
以太未來(lái) 金融理財(cái)
怎樣殺死僵尸 動(dòng)作冒險(xiǎn)
ZK.MAXX 生活實(shí)用
熱門標(biāo)簽