Scroll:為何Rollup需要DA層 EIP4844如何提高以太坊作為DA層的能力

2023-12-06 11:12:33

文章來源:scroll博文;翻譯:金色財經xiaozou 

1、前言

過去幾年裏,解決區塊鏈可擴展性的三難困境一直是以太坊社區的首要任務,目標是在不犧牲去中心化或安全性的前提下實現更大的可擴展性。經過重重必要探索,以太坊社區一致採用以rollup為中心的方法來解決可擴展性問題,在以太坊發展路线圖中優先考慮rollup需求。

大多數rollup所需要的唯一功能就是改進以太坊作為數據可用性層的可用性。EIP4844,也稱為Proto-Danksharding,是以太坊對這一需求的快速回應,而同一EIP的高級版本正在研發中。EIP4844引入了新的交易格式,稱為blob-carrying transactions(blob攜帶交易),允許用戶在交易中包含數據blob;可確保這些數據在幾周內可用。很快,以太坊網絡將經進行Canun-Deneb硬分叉,其中便包括EIP4844等。

數據可用性長期以來一直是備受矚目的話題,至少在區塊鏈領域來說確是如此。然而,我們相信還有很多事情需要說明。本文,我們將探討數據可用性(DA)層是什么,以及為什么rollup需要數據可用性層。此外,我們還將探討EIP4844及其將如何提高以太坊作為數據可用性層的能力。最後,我們還將研究在電路中如何打开一個blob承諾,並提出一個簡單的概念證明。

2、執行完整性是你的全部所需嗎?

去中心化和無需許可的區塊鏈會為用戶帶來很多頗具吸引力的保障,包括抗審查特性、不可篡改特性、活躍性,以及最重要的執行完整性。簡單地說就是,狀態轉換是有效的,智能合約的執行總是正確無誤的。這要歸功於檢驗區塊有效性的各節點以及網絡的去中心化性質。Rollup試圖提供同樣的保障,而且成本更低!

Rollup的主要理念是將執行從L1轉移到成本更低的環境中,同時採用一種機制來簡潔地(ZK)或樂觀地(OP)向L1 rollup合約證明這些執行是正確完成的,並且狀態轉換是有效的。重要的是要注意,所謂的rollup合約通常只能看到rollup鏈的完整狀態承諾,例如其狀態樹的Merkle根。而狀態轉換更新承諾。

這兩類機制如何運作?

  • OP:Optimistic機制基於欺詐證明。此想法是,如果一個rollup操作員向L1 rollup合約提交了一個無效的狀態轉換,人們就會受到激勵去證明這種違約行為並因此獲得獎勵。所以,如果我們假設有人可以隨時監視rollup鏈(盡管存在某種程度的延遲),就可以保證執行的完整性。只要沒有無效的狀態轉換,L1就不必執行任何rollup交易;這就是用戶節省成本的關鍵所在。相反,如果rollup操作員證明狀態轉換無效,則必須有人在指定的時間範圍內構建並提供欺詐證明;否則,無效狀態轉換將不可撤銷地被最終確定。注意,rollup鏈的完整狀態必須對觀察者可用(或可恢復),否則他們甚至無法識別無效的狀態轉換。

  • ZK:簡潔的有效性證明更強大,因為它們不依賴於受激勵的參與者來觀察鏈的狀態。ZK證明的內部機制非常復雜,借助了加密魔法,但它們能辦到的事很簡單直接,那就是使用數學方法證明rollup鏈的新狀態是正確執行的結果。也就是說,即使rollup鏈的完整狀態永遠不可用,執行的完整性也能始終得以保證。

本文將重點介紹使用簡潔證明的rollup。

不幸的是,執行完整性並不是你所需要的全部。為了提供抗審查性或活躍性等特性,rollup仍然需要保證其完整狀態是可恢復的。如果rollup不能如此保證,那么用戶就不能在rollup鏈中進行余額證明。反過來,如果沒有rollup操作員的合作,將無法將資金提取到L1;顯然,這是對L1保證的無法接受的偏離。

3、什么是數據可用性?

數據可用性(DA)是指在網絡內公开並迅速發布數據的保證。換句話說,在這種情況下數據是可用的,也就是說它不會被發布者隱瞞。請注意,數據可用性與永久存儲無關;數據的可用時間要足夠長,讓任何感興趣的人都有機會獲取。數據可用性層是發布數據的基礎設施,確保數據可用。

1)數據可用性問題的起源

數據可用性問題最初是在L1擴展解決方案的大背景下誕生的。一個自然而簡單的擴展策略是增加各區塊的容量。許多擴展解決方案都以這樣或那樣的方式做到了這一點。所有增加區塊大小的擴展解決方案的主要問題是,網絡中的每個人都必須下載並驗證所有區塊。因此,如果我們將區塊大小增加太多,較弱的節點就會落後並被徹底淘汰。因此,我們慢慢就會迎來一個去中心化程度不高的網絡。如果我們能夠以某種方式在節點之間分配驗證區塊的任務,各節點只需下載和驗證每個區塊的一小部分,那么我們就可以擁有更大的區塊。這一系列解決方案的一個挑战就是確保整個區塊真正被發布。

2Rollup的數據可用性

在上文中,我們探討了為什么需要rollup鏈完整狀態的可恢復性來維護L1的保證。我們可以通過提供以下兩種數據中的一種來保證完整狀態是可恢復的:(1)交易數據或(2)狀態差異數據。

Rollup繼承其數據可用性層的所有安全假設。這就是為什么許多rollup使用它們運行其上的相同L1作為數據可用性層的原因:避免額外的安全性假設。使用以太坊作為數據可用性層的一種方法是將數據嵌入到交易中,並確保將其包含在L1區塊中。只要以太坊區塊可用,交易中的嵌入數據也將可用。以太坊區塊是預期可用的,因為區塊生產者受激勵迅速廣播他們的區塊,以獲得其他驗證者的證明;否則他們的區塊將被忽略。

目前,在包含EIP4844之前,在交易中嵌入數據的成本最低的方法是將數據作為calldata包含。Calldata是一個只讀內存空間,存儲所發送的智能合約函數調用參數。此內存空間僅在函數執行期間可訪問,並且臨時存儲比長期存儲更節省gas費。雖然在函數調用之後,在EVM環境中無法訪問calldata的內容,但任何有權訪問以太坊交易歷史的人仍然可以將其恢復。

然而,calldata仍然比必要成本更昂貴,因為它提供了除數據可用性之外的其他特性;基本上,calldata可以從智能合約中讀取。EIP4844引入了攜帶blob的交易(blob-carrying transactions),這些交易被設計為數據可用性效用。EVM中只有對blob數據的承諾可用,並且不可能直接在智能合約中讀取這些數據。因此,預計以blob形式發布數據的成本將大大降低。然而,blob數據gas將通過類似EIP1559的機制單獨定價。稍後會詳細介紹。

需要注意的是,降低數據可用性成本直接降低了rollup運營成本,這意味着rollup用戶的交易費用更低。如今,一個典型的rollup運營商所付gas費用中,大約有80%用於在L1上嵌入rollup鏈數據作為calldata,只有20%用於證明驗證。

4Scroll協議中的數據可用性

1ZKRollup合約:CommitFinalize

Scroll的rollup過程有許多階段,但出於本文目的,我們將只關注commit和finalize階段,這兩個階段處理數據可用性和證明驗證。

  • Commit:每隔幾分鐘,sequencer(排序器)就會以calldata的形式向rollup合約的commitBatch函數提交一批新交易。該函數計算並存儲該批量交易的Keccak哈希值,當我們驗證證明時,它將作為對snark驗證者的承諾和輸入。注意,L2交易數據嵌入在該L1交易中。雖然該數據不存入以太坊狀態,但它卻很好地成為了Scroll鏈的數據可用性解決方案。任何人都可以收集這些交易(從archive節點)並查看它們的有效負載。

  • Finalize:在對批量交易進行commit操作後,證明者开始為該批量交易的執行創建簡潔的狀態轉換證明。finalizeBatchWithProof將證明作為輸入,並驗證如下語句:

注意,finalize步驟只將對所有已執行交易的承諾作為輸入,而非所有交易。

2PI電路:解壓縮公共輸入

正如我們前面提到的,證明的語句只包括對已執行交易的承諾。這意味着鏈上驗證者合約不必處理較大的公共輸入多項式,從而有效地壓縮公共輸入。然而,證明者必須在電路中打开這個承諾,也就是說,它必須知道批處理的實際交易內容。在Scroll zkEVM上,PI電路是打开此承諾並為zkEVM的其余部分解壓縮公共輸入的子電路。

對交易包的承諾提供給PI電路作為公共輸入,證明者必須提供原始交易批數據作為見證(witness)。PI電路的約束(constraints)檢查所提供的見證確實與公共輸入中的承諾相對應。跳過此一致性檢查會讓惡意證明者提交一批交易但卻執行另一批交易,從而使rollup鏈的完整狀態徹底無法恢復。

5、擴展以太坊作為數據可用性層的可用性

到目前為止,我們討論了數據可用性的重要性以及今天如何將以太坊用作數據可用性層。現在讓我們戴上協議設計師的帽子,快速了解一下提高以太坊作為數據可用性層性能的不同想法。

  • 降低calldata gas成本:這是一個非常直觀的想法,可以自動增強以太坊發布更多數據的能力,以實現數據可用性。事實上,在過去的EIP-2028中就已經這樣做了。然而,這種方法有其局限性。Calldata的gas成本更低意味着更大的區塊,也就意味着區塊傳播會有更大延遲。將區塊傳播延遲拉大會破壞L1的共識機制。

  • 通過對區塊中的calldata設置總上限來降低calldata gas成本:EIP4488提出的正是這一建議。雖然這聽起來像是一筆不錯的买賣,但以太坊核心开發人員認為這個提議太過復雜,實施起來風險太大,所以最終該提議還是被拋棄了。值得注意的是,這個EIP還有一個兄弟提案EIP4444。EIP4444的目標是減少節點操作員的數據存儲需求,並建議執行客戶端在一年後刪減歷史區塊數據。EIP4444旨在通過減輕EIP4488引入的額外存儲負載來完成EIP4488。

  • 數據不可用性證明:假設我們有一種方法可以在網絡中分配驗證較大區塊的任務,這樣每個人都只需要下載和驗證各區塊的一小部分就可以了。如果一個節點試圖下載較大區塊的一部分卻無法訪問該區塊怎么辦?他們能進行數據不可用性證明並罰沒區塊生產者嗎?很遺憾,答案是否定的。不發布數據並不是唯一可歸因的錯誤。在此引用Al-Bassam等人的話:

在任何方案中,如果節點有能力對某些不可用的數據發出警報,如果發布者隨後發布了剩余的數據,那么所有屆時沒有注意到該特定數據的節點都無法確定究竟是發布者惡意扣留數據還是漁夫(fisherman)惡意發出假警報。

  • 數據可用性抽樣:雖然我們不能證明數據的不可用性,但每個節點都可以驗證數據的可用性。其中的主要挑战是設計一個高效和精准的測試,這意味着需要相對較少的樣本並提供高水平的置信度。一種想法是用擦除碼對數據進行編碼。擦除碼是這樣一種方案:它以一種保持原始數據可恢復的方式向原始數據添加冗余,即使編碼數據的恆定部分被擦除。擦除碼有許多結構,Reed-Solomon(裏德所羅門碼)是最流行的。假設我們用Reed-Solomon編碼區塊數據,那么如果超過一個常數因子(例如3/4)的編碼數據是可用的,那么整個原始數據就是可恢復的。我們用α表示可恢復性比率。現在各節點必須決定比率為α編碼數據是否確實可用。為此,每個節點可以隨機採樣編碼數據的m個位置,並嘗試一並獲取。如果這些部分中只有一個不可用,那么節點將認為整個數據不可用。在可用數據少於α的情況下,每個節點將以至少1-αm的概率檢測到不可用性,隨着m的增加,這個概率很快將接近1。請注意,與區塊大小相比,m是一個相對較小的數字(從技術上講,它是一個常數,不必隨着區塊大小而增長)。為了更清楚地說明問題,讓我們考慮一個具體案例,其中我們設置可恢復性比率α=3/4,樣本數量m=100,網絡中有N=106個節點。現在讓我們關注一個區塊不可恢復的情況,這意味着可用的編碼數據少於α。在這種情況下,一個簡單的並集界限(union-bound)意味着網絡中每個節點檢測到不可用性的概率大於1−N×αm≈0.9999996。雖然這個想法很好,但實現起來卻很復雜,而且還涉及到相當多的其他組件。如果不搞清楚,會隱藏大量細節。例如,我們必須確保編碼的數據是有效的Reed-Solomon碼字,有一種確保這一點的方法是使用多項式承諾方案,如KZG承諾。此外,底層的去中心化p2p網絡必須足夠可靠才能支持數據傳播和採樣,關於這樣的p2p網絡的設計是一個活躍的研究領域。這是即將到來的數據分片解決方案Danksharding的支柱,將在EIP4844之後實施,並進一步擴展以太坊作為數據可用性層的性能。

6Proto-Danksharing:攜帶blob的數據

可以將EIP4844看做是EIP4444和EIP4488的巧妙組合。它還部署了具有數據可用性採樣建議的原始Danksharding所需的許多組件;因此,它在更易實現的同時,還為未來鋪平了道路。

EIP引入了一種新的交易類型——攜帶blob的交易(blob-carrying transaction)。每個攜帶blob的交易都“攜帶”一系列blob。Blob是格式為BLS12-381標量字段中的212=4096個元素的數據包,大約為125千字節。使用這種特定格式的原因是為了簡化對blob內容的KZG承諾的創建。

與calldata不同,blob內容在執行環境中不可用。實際上,攜帶blob的交易只攜帶對blob的承諾,並且只有這些承諾在執行環境中可用。實際數據由共識客戶端共享、獲取和驗證。

這些blob只存儲很短的時間,4096個epoch,也就是18天多一點。在此期間,共識節點應將這些數據提供給網絡內的對等節點。在此之後,共識客戶端可以刪減舊的blob。這種刪減機制旨在減輕存儲blob的負擔。請記住,數據可用性並不是指永久的數據存儲;18天足夠長了,所有感興趣的人都有機會在此期間獲取數據。

攜帶blob的交易看起來像帶有兩個額外字段(max_fee_per_blob_gas和blob_versioned_hashes)的常規EIP1559交易。我們將在下文解釋這兩個新字段的功能。

1Blob收費市場

Blob的收費市場與常規的收費市場是分开的,這意味着在EIP4844之後,我們將看到一個常規的(執行)gas價格和一個blob gas價格。一個類似EIP1559的機制用於blob gas價格,目標為3 blobs,每個區塊最多允許6 blobs。字段max_fee_per_blob_gas表示用戶愿意支付的blob gas價格;它必須大於或等於當前的blob gas價格才有效。

選擇這種設計有一個很好的含義是,L2的數據可用性成本不受L1交易需求激增的影響。此外,這種二維收費市場設計是朝着採用多維EIP 1559提高收費市場效率的更雄心勃勃的愿景邁出的一步。

2Blob容量

各區塊的blob目標容量並不很高,只有380 KB,在所有rollups情況下約為100 TPS。使用當前的參數存儲blob數據為節點操作員引入了近50GB的額外存儲需求。對於一個常規節點來說,50GB沒什么好擔心的,那么為什么不在每個區塊中包含更多的blob呢?原因是每個共識節點仍然需要下載並驗證所有blob。事實上,在包含EIP4844之後,共識客戶端將不會認為一個區塊是有效的,直到該區塊的所有blob都被下載並驗證。我們仍然沒有很好的數據可用性抽樣機制。因此,必須仔細限制blob帶來的額外負載,以避免因將區塊傳播延遲拉長而破壞共識機制的風險(注:基本上,共識客戶端的證明期限為4秒,所以各區塊必須在4秒前很好地傳播)。這就是為什么blob的目標設定相對較低的原因。

3KZG承諾和版本化哈希值

對各blob的承諾採用的是版本化哈希值的格式。它是一個32字節的值,其中第一個字節是版本,當前設置為0x01,然後是blob的KZG承諾的SHA256哈希值的最後31個字節,即version_byte + SHA256(KZG(blob))[1:]。其基本原理是保留在不破壞格式的情況下將承諾方案從KZG更改為其他功能的可能性,以防KZG承諾被認為不像期望的那樣安全,例如,當量子計算機變得實用之後。

字段blob_versioned_hashes表示對交易中包含的blob的承諾列表。請注意,攜帶blob的交易可以攜帶多個blob。

4)點評估預編譯(Point Evaluation Precompile

EIP4844引入了一個新的預編譯,旨在允許用戶打开對blob的承諾,並有效地從智能合約中訪問blob數據。這在驗證涉及blob數據的optimistic證明或簡潔證明時非常方便。

point_evaluation_precompile ( versioned_hash, kzg_commitment, proof, z, y) 接收一個版本化的哈希值、對blob的KZG承諾,以及一個打开針對z點和y值證明的KZG作為輸入。它驗證kzg_commitment是否與提供的versioned_hash相對應,並且驗證打开的證明是否有效。

這個預編譯通過簡潔的有效性證明很好地滿足了rollup的需求。EVM中不需要完全打开對blob的承諾,只需檢查作為見證的電路中提供的數據是否與blob一致即可。稍後會詳細介紹。

7EIP4844Scroll協議的數據可用性

1Commit

在EIP4844之後,rollup提交交易將是一個攜帶blob的交易tx。該rollup交易包將被編碼寫入blob。這樣,rollup合約就不再需要計算對交易批數據的承諾;我們只是將txt.blob_versioned_hashes復制到存儲中,以便在finalization(最終確定)階段使用。

2PI電路中的blob一致性驗證

前面我們討論了PI電路的功能是驗證所提供的交易包是否確實與commit階段提供的交易包的承諾相對應。當我們將交易包置入blob中時,我們仍然需要這樣做,但是完成的方式略有不同。

3)非原生字段的挑战

以太坊只有一個對配對友好的橢圓曲线BN254的預編譯。我們的zkEVM使用該曲线進行算術運算,這意味着我們在曲线BN254的標量場上定義了電路的值和約束。然而,EIP4844使用另一個曲线BLS12-381進行KZG承諾。這讓事情變得有點復雜。

這樣的選擇可能是出於安全性和效率的考量。共識客戶端已經使用BL12-381曲线進行證明,因此它已經被所有客戶團隊實施和審計過了。此外,BN254只提供100 bits的安全性,而BLS12-381提供大約120 bits的安全性。

如果這兩條曲线是相同的,我們可以在zkEVM電路中添加一個advice column(列),專門用於存儲填充了0的blob數據。KZG對所有電路列的承諾是最終snark證明的一部分(注意:為了簡單起見,假設我們沒有進行任何批處理聚合),我們可以將對blob列的KZG承諾與從攜帶blob的交易中獲得的版本化哈希值進行比較。

遺憾的是,情況並非如此,我們不能直接用blob版本的哈希值交叉驗證對advice列的承諾。幸運的是,還有另一種可行方法。設p(X)為BLS12-381標量場上blob的拉格朗日多項式(Lagrange polynomial)。我們可以在合約中和在電路中在一個隨機點z上對這個多項式求值,並查驗這些求值是否相等。然後著名的Schwartz-Zippel引理表明,如果等式在高概率下成立,那么兩個多項式是相同的。這裏具有挑战性的部分是在電路中評估p(X),因為這個評估必須在BLS12-381上完成,而非BN254。非原生字段操作被認為相對昂貴。使用重心公式(barycentric formula),我們可以通過2×4096非原生乘法和除法來實現。對證明者施加的額外成本相對較小。

4)概念證明

我們已經部署了一個用於電路內blob一致性檢查的PoC。電路將對交易包batch_commit的承諾、挑战點z和估值y作為公共輸入。證明者必須提供blob作為證人。我們應用Fiat-Shamir來獲取匿名隨機挑战點z,因此電路強制執行z = hash(batch_commit+blob)。並且,電路約束p(z)=y,其中p(X)為blob的拉格朗日插值多項式。

這個小工具使用28,083,027個advice單元格和3,393,116個查找advice單元格。在M1 MacBook Pro(10個CPU內核,16GB RAM)上,生成證明平均需要138.97秒。

8、結論

數據可用性是區塊鏈可擴展性難題的一個重要部分。EIP4844是朝着提高以太坊作為數據可用性層的效用邁出的一大步。然而,以其目前的參數設置,還無法提供足夠大的容量來滿足所有rollup的需求。希望Danksharding憑借其出色的數據可用性抽樣能夠顯著改善這種情況。在此之前,rollup需要依賴於calldata和blob存儲,或者接收額外的安全假設並採用以太坊以外的數據可用性層。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

btc日內再次下跌 短线應當如何處理?

盡管以太坊現貨ETF獲批是個好消息,但市場反應卻不如預期。在消息公布後,以太坊價格出現了小幅下跌,...

加密蓮
66 1個月前

7月23日、BTC(合約)ETH(合約)行情分析及操作策略

昨日收益還是不錯的,日內給出的現價空單分別止盈我們目標點位,恭喜跟上的朋友喫肉。時間一晃到月底了,...

倪老師
66 1個月前

幣圈院士:血與淚的教訓!交易者為何總是撞死在同一棵樹上?

幣圈院士談。交易市場中的幾種“死法” 在幣圈市場鱗次櫛比的海洋,風起雲湧,時常讓人感到驚手不及。在...

幣圈院士
58 1個月前

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...

168超神
65 1個月前

悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤

一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...

我是周悅盈
56 1個月前

btc完美盈利 晚間波動較大注意

昨日btc空單完美給到,最大化走出一千七百點空間~ btc: 日內开盤下跌繼續測試66000一线,...

加密蓮
59 1個月前