hao86下載站:值得大家信賴的游戲下載站!

首頁(yè) > 區(qū)塊鏈 > 關(guān)于區(qū)塊大小:Gas 上限與可擴(kuò)展性

關(guān)于區(qū)塊大小:Gas 上限與可擴(kuò)展性

時(shí)間:2024-02-08 14:26:14
來(lái)源:hao86下載
區(qū)塊鏈

【#區(qū)塊鏈# #關(guān)于區(qū)塊大小:Gas 上限與可擴(kuò)展性#】

作者:Toni Wahrst?tter

最近關(guān)于提高以太坊區(qū)塊 Gas 上限的討論非常多。有些人基于摩爾定律主張?jiān)龃髤^(qū)塊大小,有些人基于個(gè)人直覺,有些人則只是在隨意散布消息,還有些人擔(dān)心其他鏈如 Solana 會(huì)在用戶廣泛采用方面超越以太坊。

接下來(lái),我想展示一些圖表和數(shù)據(jù),這可能有助于我們做出一個(gè)在不影響以太坊去中心化的前提下最大化 Gas 上限的決策。

從最初講起

與比特幣不同,以太坊沒有固定的區(qū)塊大小限制,而是依賴于一種靈活的區(qū)塊大小機(jī)制,這種機(jī)制由某種單位 "gas" 來(lái)衡量。在以太坊中,Gas 是一個(gè)衡量執(zhí)行操作(如交易或智能合約)所需計(jì)算量的單位。以太坊中的每項(xiàng)操作都需要一定數(shù)量的 Gas 來(lái)完成,每個(gè)區(qū)塊都有一個(gè) Gas 上限,這決定了一個(gè)區(qū)塊可以包含多少操作。

最開始,2015 年時(shí)以太坊每個(gè)區(qū)塊有 5000 Gas 的上限制。這個(gè)上限很快被提高到約 300 萬(wàn),然后在 2016年稍后提高到約 470 萬(wàn)。隨著 Tangerine Whistle 硬分叉 (EIP-150) 在 2016年的實(shí)施,作為對(duì) DoS 攻擊的回應(yīng),通過(guò)重新定價(jià)各種 IO 密集型操作碼,Gas 上限被提高到 550 萬(wàn)。在這些攻擊之后,礦工持續(xù)提高 Gas 上限,在 2017 年 7 月到約 670 萬(wàn),2017 年 12 月到約 800 萬(wàn),2019 年 9 月到約 1000 萬(wàn),2020 年 8 月到 1250 萬(wàn),最終在 2021 年 4 月 3 日到約 1500 萬(wàn)。

隨時(shí)間變化的 Gas 使用情況

此后,隨著 Spurious Dragon、Byzantium、Constantinople、Istanbul 和 Berlin 硬分叉的激活,某些操作碼的定價(jià)進(jìn)一步得到了細(xì)化。這些細(xì)化的例子包括 EIP-145、EIP-160、EIP-1052、EIP-1108、EIP-1884、EIP-2028、EIP-2200、EIP-2565 和 EIP-2929。

以太坊費(fèi)用市場(chǎng)最重大的變化發(fā)生在 2021 年 8 月的倫敦硬分叉 (EIP-1559) 的引入。EIP-1559 引入了 base fee,該費(fèi)用會(huì)根據(jù)對(duì)區(qū)塊空間的需求隨時(shí)間/區(qū)塊高度動(dòng)態(tài)調(diào)整。同時(shí)引入了 "target size",將其設(shè)定為每個(gè)區(qū)塊 1500 萬(wàn) Gas。這個(gè) target 用于指導(dǎo) base fee 的動(dòng)態(tài)調(diào)整。如果一個(gè)區(qū)塊中使用的總 Gas 數(shù)量超過(guò)這個(gè) target,那么下一個(gè)區(qū)塊的 base fee 就會(huì)增加。相反,如果使用的總 Gas 數(shù)量低于 target,則 base fee 減少。這個(gè)機(jī)制旨在創(chuàng)建一個(gè)更可預(yù)測(cè)的費(fèi)用市場(chǎng),并通過(guò)穩(wěn)定交易開銷改善用戶體驗(yàn)。此外,EIP-1559 還引入了 base fee 的銷毀機(jī)制,永久地從流通量中移除了那部分 Ether。這增強(qiáng)了協(xié)議的可持續(xù)性,同時(shí)創(chuàng)造了所謂的超穩(wěn)健貨幣迷因 (ultra sound money meme)。

在 EIP-1559 下,還設(shè)有一個(gè)最大(或“硬上限”)Gas 上限,設(shè)為 target 的兩倍,即 3000 萬(wàn) Gas。這意味著一個(gè)區(qū)塊可以打包總使用量高達(dá) 3000 萬(wàn) Gas 的交易。

倫敦分叉后的 Gas 使用情況

自那時(shí)起,以太坊的區(qū)塊 Gas 上限保持不變,截至 2024 年,仍然是每個(gè)區(qū)塊 3000 萬(wàn) Gas。

我們準(zhǔn)備好增加區(qū)塊大小了嗎?

最近,一些人對(duì)以太坊的 Gas 上限表示擔(dān)憂,并要求將其增加。在 Reddit 上的最新以太坊基金會(huì) AMA 中,Vitalik 表示考慮了將 Gas 上限增加 33% 至 4000 萬(wàn)的想法。他的推理基于摩爾定律,該定律指出微芯片上的晶體管數(shù)量大約每?jī)赡攴环瑥亩沟糜?jì)算能力相應(yīng)增加。這一原則表明,網(wǎng)絡(luò)性能,包括處理和執(zhí)行交易的能力,也可以隨時(shí)間增加。

來(lái)自以太坊基金會(huì)的研究人員 Dankrad 和 Ansgar 也支持在評(píng)估 Dencun 升級(jí)后的情況后增加 Gas 上限的想法。此外,以太坊基金會(huì)的 Pari 發(fā)表了一篇帖子,探索潛在的 Gas 上限增加途徑。像 Geth 的 Peter 和 Marius 這樣的其他人則對(duì)增加 Gas 上限表示擔(dān)憂,特別是在沒有適當(dāng)?shù)墓ぞ?監(jiān)控到位的情況下。這些擔(dān)憂主要和這些問(wèn)題相關(guān):加速狀態(tài)增長(zhǎng)、同步時(shí)間和重組塊率。

區(qū)塊大小是什么?

區(qū)塊的大小可以通過(guò)兩種方式衡量:

Gas 使用量

區(qū)塊大小(以字節(jié)為單位)

雖然這兩種衡量方式相關(guān)聯(lián),但必須獨(dú)立考慮。

例如,一個(gè)包含許多非零 calldata 字節(jié)的區(qū)塊在字節(jié)大小上可能很大,而實(shí)際的 Gas 使用量 (每非零字節(jié)需要 16 Gas) 可能仍然相對(duì)較小。

先不考慮壓縮后的情況,在遵守Geth 每筆交易 128 KB 限制的前提下,當(dāng)前可以達(dá)到的最大區(qū)塊大小約為 6.88 MB。這樣一個(gè)的區(qū)塊里將最大化打包 128 KB 交易的數(shù)量。實(shí)際計(jì)算出來(lái)的結(jié)果是,包含約 130,900 字節(jié)的零字節(jié) calldata(每字節(jié) 4 Gas)的 55 筆交易,以及一個(gè)填滿剩余空間的交易。然而,經(jīng)過(guò) snappy 壓縮后,這樣的區(qū)塊最終大小約為 0.32 MB,這可以忽略不計(jì)。

而另一種情況,考慮最大可能性的區(qū)塊大小,包含 15 筆攜帶非零字節(jié) calldata 的交易,壓縮后大小可達(dá)約 1.77 MB。

因此,截至今日,1.77 MB 代表執(zhí)行層區(qū)塊的真實(shí)區(qū)塊大小上限。

譯者注:

在上面的幾個(gè)段落中,作者在固定 gas 上限 30 M 的情況下,想要讓 block size 最大,嘗試計(jì)算最多可以把區(qū)塊塞到多大。

如果固定 gas 上限,要讓 block size 變大,那么只能塞 calldata(因?yàn)橛?jì)算/STORE之類的字節(jié)碼其實(shí)是不會(huì)消耗區(qū)塊存儲(chǔ)空間的)。

所以,要讓區(qū)塊變大,無(wú)非就是盡量往交易塞 calldata。然后,有“塞 0 calldata” 和 “塞非 0 calldata” 兩種方法,需要計(jì)算才能知道哪種能讓 block size 更大。最終結(jié)果是“塞非 0 calldata” 的 block size 更大。

基于 Geth 客戶端限制每筆交易最多 128 KB 這一前提,下面開始計(jì)算兩個(gè)例子。

case 1:56 個(gè)大小為 130,900 B ( (30 M),所以最多只能塞 55 個(gè)上述交易+ 1 個(gè)小于上述交易的交易。對(duì)應(yīng)的區(qū)塊大小約為 55*128 = 7040 kB = 6.875 MB。然而,由于 calldata 全是 0,所以壓縮后區(qū)塊大小約為 0.32 MB。

case 2:15 個(gè)大小為 130,900 B ( 30 M。對(duì)應(yīng)的區(qū)塊大小約為 14 *128 = 1792 kB = 1.75 MB ~ 15 * 128 = 1.875 M。然而,由于 calldata 是非零,不好壓縮,所以壓縮后區(qū)塊大小約為 1.77 MB。)

就這個(gè)最大區(qū)塊大小而言,我們可以識(shí)別出幾個(gè)影響它的因素:

Gas 上限:Gas 上限會(huì)影響最大區(qū)塊大小,這是毋庸置疑的。上限越高,區(qū)塊中可以塞進(jìn)的數(shù)據(jù)就越多。

操作和數(shù)據(jù)的定價(jià):操作的 gas 越便宜,區(qū)塊內(nèi)就能執(zhí)行越多次操作。雖然像CALLDATALOADCALLDATACOPY這樣的操作,它們的開銷都是 3 Gas,相對(duì)便宜;但其他操作碼如CREATE則更昂貴。區(qū)塊中使用的操作碼越昂貴,該區(qū)塊中用于calldata(或其他操作)的空間就越少。

客戶端限制:雖然客戶端限制的影響不那么明顯,但比如像 Geth 客戶端這樣對(duì)每筆交易的 128 kb 限制也可以影響最終區(qū)塊大小。由于每筆交易的固定費(fèi)用是 21k Gas,客戶端每筆交易的大小限制越低,就需要更頻繁地支付固定費(fèi)用,從而“浪費(fèi)”本可以用于calldata的 gas。所以最終,這個(gè)限制可以導(dǎo)致最大區(qū)塊大小減少約 0.07 MB。需要注意的是,客戶端限制只影響交易的廣播,并不影響已經(jīng)被確認(rèn)的區(qū)塊。

首先,讓我們看看每個(gè)區(qū)塊的 Gas 上限:

區(qū)塊 Gas 上限對(duì)最大區(qū)塊大小的影響

像以太坊這樣的區(qū)塊鏈,提高區(qū)塊 Gas 上限是最直接和明顯的擴(kuò)容方式。更高的上限意味著更多的數(shù)據(jù)空間。然而,這也意味著需要每個(gè)運(yùn)行全節(jié)點(diǎn)的人傳播和下載更大的區(qū)塊。如上圖所示,“最壞情況(即前面通過(guò)計(jì)算得出的最大區(qū)塊大小)”下的區(qū)塊大小與區(qū)塊 Gas 上限的增加大致呈線性關(guān)系。通過(guò)創(chuàng)建塞滿盡可能多的非零字節(jié) calldata 交易的區(qū)塊,就可以達(dá)到這樣的最大區(qū)塊大小。

接下來(lái),讓我們看看另一個(gè)影響因素 —— 以太坊的定價(jià)機(jī)制。在當(dāng)前的例子中,具體就是目前被設(shè)定為 16 Gas 的非零字節(jié)calldata的開銷:

每非零字節(jié) Calldata 開銷對(duì)最大區(qū)塊大小的影響

如上圖所示,增加非零calldata的開銷會(huì)讓區(qū)塊大小減小。換句話說(shuō),將開銷降低到比如說(shuō)每字節(jié) 8 Gas,會(huì)使最壞情況下的區(qū)塊大小翻倍。這很直觀,因?yàn)榻档蛢r(jià)格允許將雙倍數(shù)量的數(shù)據(jù)放入?yún)^(qū)塊中。

那么 EIP-4844 (Proto-Danksharding)上線后呢?

我不會(huì)在這里詳細(xì)介紹 4844,因?yàn)?eip4844.com 上有很好的文檔,但簡(jiǎn)單來(lái)說(shuō),EIP-4844 引入了類似“sidecar (挎斗)”結(jié)構(gòu)的數(shù)據(jù)類型,叫做 blob,每個(gè) blob 可塞進(jìn)約 125 kb 的數(shù)據(jù)。Blob 數(shù)據(jù)費(fèi)用機(jī)制與 EIP-1559 類似,也存在一個(gè)“target”,用于錨定 blob 數(shù)量。在 Dencun 硬分叉中,target 設(shè)為每個(gè)區(qū)塊 3 個(gè) blob,最大限制設(shè)為每個(gè)區(qū)塊 6 個(gè) blob。值得注意的是,blob 擁有自己的費(fèi)用市場(chǎng),創(chuàng)建了所謂的多維費(fèi)用市場(chǎng)。這意味著 blob 不必與標(biāo)準(zhǔn)交易競(jìng)爭(zhēng),而是與 EIP-1559 機(jī)制下的費(fèi)用解耦。

到目前為止,一切順利。讓我們看看這次升級(jí)如何影響以太坊的平均區(qū)塊大小。

新增 blob 之后對(duì)壓縮后的信標(biāo)鏈平均區(qū)塊大小的影響

截至今日,采用 snappy 壓縮后的信標(biāo)鏈區(qū)塊的平均區(qū)塊大小約為 125 KB。有了 4844,我們每個(gè)區(qū)塊再增加 375 KB,從而使當(dāng)前平均區(qū)塊大小增加 4 倍。如果達(dá)到最大數(shù)量的 blob,我們實(shí)質(zhì)上將當(dāng)前區(qū)塊大小增加了七倍。

最壞情況下的區(qū)塊大小從約 1.77 MB 增加到約 2.5 MB。這個(gè)估算沒有將區(qū)塊的 CL (共識(shí)層) 部分考慮在內(nèi)。但不管怎樣,在遭受 DoS 攻擊的情況下,我們必須做好應(yīng)對(duì)這種最大區(qū)塊大小的準(zhǔn)備。

總結(jié)

最終,如果要提高當(dāng)前的區(qū)塊 Gas 上限,我們需要在實(shí)施前進(jìn)行徹底的研究和分析。雖然像 Coinbase、Binance、Kraken 或 Lido 節(jié)點(diǎn)運(yùn)營(yíng)商這樣的成熟的實(shí)體能夠應(yīng)對(duì)超過(guò) 4000 萬(wàn)的區(qū)塊 Gas 上限的情況,但獨(dú)立質(zhì)押者可能會(huì)比較困難。

因此,這樣的決策必須經(jīng)過(guò)深思熟慮,以確保我們不會(huì)犧牲去中心化。

最后,構(gòu)建一個(gè)像 Facebook 那樣容量大、性能強(qiáng)的東西相對(duì)容易,但重要的是不能失去我們大多數(shù)人所追求的東西:去中心化。

小編推薦下載

相關(guān)文章

更多>>

資訊排行

同類軟件下載