時間:2022-02-26|瀏覽:502
你可能聽說了,Ethereum 的分片路線圖已經(jīng)基本上取消了執(zhí)行分片,如今只專注于數(shù)據(jù)分片,從而使 Ethereum 的數(shù)據(jù)空間吞吐量最大化。
你可能也看到了最近關(guān)于模塊化區(qū)塊鏈的討論,深入地研究了 Rollup,了解了 volitions 與 validiums,然后也聽說了「數(shù)據(jù)可用性解決方案」。
但是,在這個過程中你可能也會產(chǎn)生一個疑問:「到底什么是數(shù)據(jù)可用性?」。
在我們開始解釋這個問題之前,我們可以先來回顧一下大多數(shù)區(qū)塊鏈的工作原理。
交易、節(jié)點與惡名昭著的區(qū)塊鏈三難困境問題
當(dāng)你遇到了一個新的 OHM 分叉,如果它有著高得驚人的年利率,那你肯定會毫不猶豫的按爆「質(zhì)押」那個按鈕。但是,當(dāng)你在上 Metamask 提交交易時會發(fā)生什么?
簡單來說,你的交易會進入到內(nèi)存池當(dāng)中,假設(shè)你給礦工或驗證者的賄賂足夠高,你的交易會被放入到下一個區(qū)塊中,并被添加到區(qū)塊鏈上供后人查閱。然后,這個包含著你交易的區(qū)塊會被發(fā)送到區(qū)塊鏈的節(jié)點網(wǎng)絡(luò)中。之后,全節(jié)點將下載這個新的區(qū)塊,執(zhí)行并計算這個區(qū)塊中包含的每一筆交易(其中當(dāng)然也包括你的那筆交易),同時確保這些交易都是有效交易。比如,在你的交易中,這些全節(jié)點可能會驗證你是否有從其他人那里竊取資金,以及你是否有足夠的 ETH 來支付 Gas 費等等。因此,全節(jié)點的重要任務(wù)便是對礦工和驗證者執(zhí)行區(qū)塊鏈的各項規(guī)則。
正是因為這一機制,傳統(tǒng)區(qū)塊鏈便出現(xiàn)了擴容的問題。由于全節(jié)點會檢查每筆交易以驗證它們是否遵循區(qū)塊鏈的規(guī)則,因此區(qū)塊鏈無法在不提高硬件水平的情況下每秒鐘處理更多的交易(更好的硬件會強化全節(jié)點的功能,而更強大的全節(jié)點可以驗證更多交易,這樣就能有更多可以包含大量交易的區(qū)塊了)。但是,如果運行全節(jié)點的硬件要求提高了,那么全節(jié)點的數(shù)量就會變少,而去中心化的進程也會受到影響——如果能夠確保礦工/驗證者遵守規(guī)則的人少了的話,那情況就相當(dāng)危險了(因為信任假設(shè)數(shù)量就會增加)。
數(shù)據(jù)的可用性是我們不能同時擁有擴容、安全與去中心化的主要原因之一
這種機制也說明了在傳統(tǒng)單片式區(qū)塊鏈中保證數(shù)據(jù)可用性的重要性:區(qū)塊生產(chǎn)者(礦工/驗證者)必須公布并提供他們生產(chǎn)區(qū)塊的交易數(shù)據(jù),以便全節(jié)點來檢查他們的工作。如果區(qū)塊生產(chǎn)者不提供這些數(shù)據(jù)的話,全節(jié)點就無法檢查他們的工作,而且也就無法確保他們有在遵守區(qū)塊鏈規(guī)則。
現(xiàn)在你應(yīng)該理解了為什么數(shù)據(jù)可用性在傳統(tǒng)單片式區(qū)塊鏈中非常重要了,接下來讓我們來探討一下它在人見人愛的可擴展性解決方案——Rollup 中扮演著怎樣的角色。
在 Rollup 背景下,數(shù)據(jù)可用性發(fā)揮著怎樣的重要性
讓我們先來重溫一下 Rollup 是如何解決可擴展性問題的:與其提高運行全節(jié)點的硬件要求,為什么我們不去減少全節(jié)點需要驗證有效性的交易數(shù)量?我們可以將交易的計算和執(zhí)行工作從全節(jié)點交由給一個更強大的計算機(也被稱為序列器)來完成。
對于 Optimistic Rollup,我們可以靠欺詐證明來維持序列器的可靠性(除非有人提交了欺詐證明,表明序列器中包含有一個無效或惡意的交易,我們一般都默認序列器能夠可靠運作)。但是,如果我們想讓其他人也能計算欺詐證明,那么他們便會需要序列器所執(zhí)行的交易數(shù)據(jù),以便提交欺詐證明。換句話說,序列器必須提供交易數(shù)據(jù),否則沒人能保證 Optimistic Rollup 序列器的可靠性。
有了 ZK Rollup,保證序列器的可靠性就變得簡單多了——序列器在執(zhí)行一批交易時必須提交有效性證明(ZK-SNARK 或 ZK-STARK),而這個有效性證明便可以保證序列器中不會出現(xiàn)無效或惡意交易。此外,任何人(甚至是智能合約)都可以輕易地驗證這些證明。但對于 ZK-Rollup 的序列器來說,數(shù)據(jù)可用性依然是舉足輕重,這是因為我們作為 Rollup 的用戶,如果想快速投資于 Shitcoin 的話,就需要知道我們在 Rollup 上有多少賬戶余額。但如果交易數(shù)據(jù)不可用的話,我們就無法知道我們的賬戶余額,也就無法再與 Rollup 進行互動。
上文讓我們明白了,人們一直以來推崇 Rollup 的原因。鑒于全節(jié)點不一定要能跟上序列器的速度,那我們?yōu)槭裁床恢苯影阉兂梢慌_功能強大的計算機?這一改變將讓序列器每秒執(zhí)行大量的交易,從而降低了 Gas 費,并令所有人都感到滿意。但是,序列器還是需要提供交易數(shù)據(jù),也就是說,即使序列器是一臺真正的超級計算機,它實際能計算的每秒交易數(shù)量仍將受到它所使用的底層數(shù)據(jù)可用性解決方案或數(shù)據(jù)可用性層的數(shù)據(jù)吞吐量的限制。
簡而言之,如果 Rollup 所使用的數(shù)據(jù)可用性解決方案或數(shù)據(jù)可用性層無法儲存 Rollup 序列器想要轉(zhuǎn)儲的數(shù)據(jù)量,那么序列器(以及 Rollup)即使想處理更多的交易,也都無能為力了。與此同時,這也會讓 Ethereum 上的 Gas 費用升高。
這正是數(shù)據(jù)可用性之所以極其重要的原因——如果數(shù)據(jù)可用性得到了保證,我們就可以規(guī)范 Rollup 序列器的行為,而如果 Rollup 準備最大化其交易吞吐量,數(shù)據(jù)可用性解決方案或數(shù)據(jù)可用性層數(shù)據(jù)空間吞吐量的最大化也將變得至關(guān)重要。
但你可能已經(jīng)意識到,我們尚未完全解決序列器能否正常運作的問題。如果 Rollup 主鏈全節(jié)點的計算速度不需要跟上序列器的話,序列器就可以扣留很大一部分的交易數(shù)據(jù)。問題在于,主鏈節(jié)點如何才能強制序列器將數(shù)據(jù)轉(zhuǎn)儲到數(shù)據(jù)可用性層之上?而如果節(jié)點不能做到這一點的話,我們就根本不會在可擴展性方面取得任何進展,因為這樣的話我們就不得不去信任序列器或自己出資購買超級計算機了。
上述問題也被稱為「數(shù)據(jù)可用性問題」。
「數(shù)據(jù)可用性問題」的解決方案
數(shù)據(jù)可用性問題最直接的解決方案是,強制全節(jié)點下載由序列器轉(zhuǎn)儲的所有數(shù)據(jù)到數(shù)據(jù)可用性層或解決方案上。但與此同時,我們也清楚這對我們并無幫助,因為這需要全節(jié)點跟上序列器的交易計算速度,并提高運行全節(jié)點的硬件要求,最終會阻礙去中心化的發(fā)展。
因此很明顯,我們需要一個更好的解決方案來解決這個問題,而且幸運的是,我們碰巧就有一個。
數(shù)據(jù)可用性證明
每當(dāng)序列器轉(zhuǎn)儲一個新的交易數(shù)據(jù)塊時,節(jié)點可以通過數(shù)據(jù)可用性證明來進行數(shù)據(jù)「采樣」,以確保這些數(shù)據(jù)確實是由序列器所提供的。
雖然數(shù)據(jù)可用性證明的工作原理涉及大量數(shù)學(xué)計算以及技術(shù)術(shù)語,但我還是會盡力向大家解釋清楚(參見John Adler)。
我們首先可以要求由序列器轉(zhuǎn)儲的交易數(shù)據(jù)塊進行擦除編碼處理,而這也就意味著原始數(shù)據(jù)的規(guī)模將變大一倍,之后新的以及額外的數(shù)據(jù)則被編碼為冗余數(shù)據(jù)(這就是我們所說的擦除代碼)。擦除數(shù)據(jù)編碼之后,我們便可以用任意 50% 擦除編碼的數(shù)據(jù)來恢復(fù)原始數(shù)據(jù)的全部內(nèi)容。
擦除代碼技術(shù)和游戲《堡壘之夜》中能讓你在那次嚇到貓以后繼續(xù)欺負你那個討人厭的表弟和他的朋友,使用的是一個技術(shù)。
不過請注意,交易數(shù)據(jù)塊進行了擦除編碼處理以后,序列器要想做出不當(dāng)行為必須扣留該區(qū)塊 50% 以上的數(shù)據(jù)。但如果該區(qū)塊沒有被擦除編碼的話,那么序列器只留存 1% 的數(shù)據(jù)就可以做出不當(dāng)行為了。所以說,通過對數(shù)據(jù)進行擦除編碼處理,全節(jié)點就更能確保序列器能夠?qū)崿F(xiàn)數(shù)據(jù)可用性了。
盡管如此,我們也想盡可能確保序列器能提供全部數(shù)據(jù)。在理想情況下,我們希望序列器能達到的可靠性與我們直接下載整個交易數(shù)據(jù)塊一樣高,而事實上,這是完全可以實現(xiàn)的:全節(jié)點可以隨機從該區(qū)塊下載一些數(shù)據(jù)。如果序列器行為不端,全節(jié)點將有小于 50% 的幾率被欺騙,即在序列器試圖扣留數(shù)據(jù)時隨機下載一部分數(shù)據(jù)。這是因為,如果序列器意圖行為不當(dāng)、扣留數(shù)據(jù),那么它們必須扣留大于 50% 擦除編碼的數(shù)據(jù)才行。
與此同時,這也就意味著,如果全節(jié)點可以兩次進行該操作的話,就可以大幅降低被欺騙的可能性。全節(jié)點通過隨機選擇另一塊數(shù)據(jù)進行第二次下載,就可以把被欺騙的概率降到 25% 以下。事實上,全節(jié)點第七次隨機下載數(shù)據(jù)時,其未能檢測到序列器扣留數(shù)據(jù)的幾率將小于 1%。
這一過程被稱為使用數(shù)據(jù)可用性證明的抽樣,或者也可以直接稱為數(shù)據(jù)可用性抽樣。它的效率非常高,因為該抽樣可以讓節(jié)點在只下載序列器于主鏈上發(fā)布的一小部分數(shù)據(jù)的情況下,就可以保證其效果與下載并檢查整個區(qū)塊相一致(節(jié)點可以使用主鏈上的 merkle 根來找到要采樣的內(nèi)容和區(qū)域)。為了讓大家有一個更直觀的感受,你可以想象一下,如果你在小區(qū)散步 10 分鐘就能消耗和跑步 10 公里一同樣多的熱量,是不是就能感受到數(shù)據(jù)可用性抽樣的強大了。
如果主鏈全節(jié)點可以進行數(shù)據(jù)可用性采樣的話,我們就能確保 Rollup 序列器不出現(xiàn)錯誤行為。我們現(xiàn)在都應(yīng)該感到高興,因為我們已經(jīng)可以確信 Rollup 的確能夠擴展我們最喜愛的區(qū)塊鏈。但在你想退出這個網(wǎng)頁之前,是否還記得我們?nèi)孕枰业揭环N方法來擴展數(shù)據(jù)可用性本身?如果我們想讓世界上所有人都加入到區(qū)塊鏈當(dāng)中,從而掙到更多的錢,那我們就需要建設(shè) Rollup;如果我們想用 Rollup 來擴展區(qū)塊鏈,那我們不僅需要限制序列器做出不當(dāng)行為,而且我們還必須擴展數(shù)據(jù)空間的吞吐量,從而降低序列器轉(zhuǎn)儲交易數(shù)據(jù)的成本。
數(shù)據(jù)可用性證明也是擴展數(shù)據(jù)空間吞吐量的關(guān)鍵
近期,一個有著專注于擴展數(shù)據(jù)空間吞吐量路線圖的 layer 1 便是 Ethereum 了。它希望通過數(shù)據(jù)分片來擴展數(shù)據(jù)空間的吞吐量,這也就意味著不是每個驗證器都會像目前的節(jié)點那樣繼續(xù)下載相同的交易數(shù)據(jù)(驗證器也能運行節(jié)點)。相反,Ethereum 將從本質(zhì)上把它的驗證器網(wǎng)絡(luò)分為不同的分區(qū),該操作也被稱為「分片」。假設(shè)你有 1000 個驗證器,并且它們都用來存儲相同的數(shù)據(jù),那么如果你把它們分成 4 組,每組 250 個驗證器,你一瞬間就將 Rollup 轉(zhuǎn)儲數(shù)據(jù)的空間增加了 4 倍。這看起來很簡單,對嗎?
Ethereum 在其「近期」數(shù)據(jù)分片路線圖中正嘗試設(shè)置 64 個數(shù)據(jù)分片
然而,問題是,一個分片內(nèi)的驗證器只能下載被轉(zhuǎn)儲到他們分片上的交易數(shù)據(jù)。而且這意味著一個分片內(nèi)的驗證器不能保證序列器轉(zhuǎn)儲的全部數(shù)據(jù)都可用——它們只能保證轉(zhuǎn)儲到他們分片的數(shù)據(jù)是可用的,但不能保證其他分片的數(shù)據(jù)可用。
因為,我們可能會遇到這樣的情況:一個分片中的驗證器不能確定序列器是否發(fā)生了錯誤行為,因為他們不知道其他分片中發(fā)生了什么,而這一問題也可以用數(shù)據(jù)可用性抽樣來解決。如果你是一個分片中的驗證者,那么你就可以使用其他每一個分片中的數(shù)據(jù)可用性證明進行數(shù)據(jù)抽樣。這樣一來,你就相當(dāng)于是每個分片的驗證者了,數(shù)據(jù)可用性也就因此得到了保證,而 Ethereum 也可以安全地進行數(shù)據(jù)分片了。
其他一些區(qū)塊鏈,也就是 Celestia 和 Polygon Avail 也想大規(guī)模擴展其數(shù)據(jù)空間吞吐量。與其他大多數(shù)區(qū)塊鏈不同的是,Celestia 和 Polygon Avail 都只做兩件事:下單區(qū)塊與交易,以及成為數(shù)據(jù)可用性層。這意味著,為了保證 Celestia 與 Polygon Avail 驗證者的可靠,我們非常需要一個去中心化的節(jié)點網(wǎng)絡(luò),以確保其驗證者有在正確存儲和訂購交易數(shù)據(jù)。但是,由于這些數(shù)據(jù)不需要做任何處理(即執(zhí)行或計算),你就并不需要使用全節(jié)點來保證他們的可靠性了。相反,能夠完成數(shù)據(jù)可用性采樣的輕節(jié)點將也可以完成全節(jié)點的工作,而如果有很多輕節(jié)點都可以用數(shù)據(jù)可用性證明進行采樣的話,就足以讓驗證者在保證數(shù)據(jù)可用性方面負起責(zé)任了。也就是說,只要有足夠的節(jié)點使用數(shù)據(jù)可用性證明進行數(shù)據(jù)可用性采樣(鑒于數(shù)據(jù)可用性證明甚至可以用手機來計算,想做到這一點相當(dāng)容易),你就可以擴大區(qū)塊,提升驗證者的硬件要求,從而提高數(shù)據(jù)空間的吞吐量。
現(xiàn)在讓我們來回顧一下:數(shù)據(jù)可用性問題也許是區(qū)塊鏈三難困境的關(guān)鍵,對我們所有在擴展方面的努力都造成了影響。幸運的是,我們能夠利用數(shù)據(jù)可用性證明這一核心技術(shù)來解決數(shù)據(jù)可用性問題。這讓我們得以大規(guī)模擴展數(shù)據(jù)空間的吞吐量,降低了 Rollup 轉(zhuǎn)儲大量交易數(shù)據(jù)的成本,以便其處理足夠多的交易,從而讓全世界的人都能參與進來。此外,數(shù)據(jù)可用性證明也讓我們可以在無需信任 Rollup 序列器的情況下,就可以保證它的可靠性。希望這篇文章能讓你理解為什么要想充分發(fā)揮 Rollup 的全部潛力,數(shù)據(jù)可用性是如此的重要了。
熱點:ETH 區(qū)塊鏈 數(shù)據(jù) 智能合約 計算機