【#區(qū)塊鏈# #關(guān)于區(qū)塊大?。篏as 上限與可擴展性#】
作者:Toni Wahrst?tter
最近關(guān)于提高以太坊區(qū)塊 Gas 上限的討論非常多。有些人基于摩爾定律主張增大區(qū)塊大小,有些人基于個人直覺,有些人則只是在隨意散布消息,還有些人擔心其他鏈如 Solana 會在用戶廣泛采用方面超越以太坊。
接下來,我想展示一些圖表和數(shù)據(jù),這可能有助于我們做出一個在不影響以太坊去中心化的前提下最大化 Gas 上限的決策。
與比特幣不同,以太坊沒有固定的區(qū)塊大小限制,而是依賴于一種靈活的區(qū)塊大小機制,這種機制由某種單位 "gas" 來衡量。在以太坊中,Gas 是一個衡量執(zhí)行操作(如交易或智能合約)所需計算量的單位。以太坊中的每項操作都需要一定數(shù)量的 Gas 來完成,每個區(qū)塊都有一個 Gas 上限,這決定了一個區(qū)塊可以包含多少操作。
最開始,2015 年時以太坊每個區(qū)塊有 5000 Gas 的上限制。這個上限很快被提高到約 300 萬,然后在 2016年稍后提高到約 470 萬。隨著 Tangerine Whistle 硬分叉 (EIP-150) 在 2016年的實施,作為對 DoS 攻擊的回應(yīng),通過重新定價各種 IO 密集型操作碼,Gas 上限被提高到 550 萬。在這些攻擊之后,礦工持續(xù)提高 Gas 上限,在 2017 年 7 月到約 670 萬,2017 年 12 月到約 800 萬,2019 年 9 月到約 1000 萬,2020 年 8 月到 1250 萬,最終在 2021 年 4 月 3 日到約 1500 萬。
此后,隨著 Spurious Dragon、Byzantium、Constantinople、Istanbul 和 Berlin 硬分叉的激活,某些操作碼的定價進一步得到了細化。這些細化的例子包括 EIP-145、EIP-160、EIP-1052、EIP-1108、EIP-1884、EIP-2028、EIP-2200、EIP-2565 和 EIP-2929。
以太坊費用市場最重大的變化發(fā)生在 2021 年 8 月的倫敦硬分叉 (EIP-1559) 的引入。EIP-1559 引入了 base fee,該費用會根據(jù)對區(qū)塊空間的需求隨時間/區(qū)塊高度動態(tài)調(diào)整。同時引入了 "target size",將其設(shè)定為每個區(qū)塊 1500 萬 Gas。這個 target 用于指導 base fee 的動態(tài)調(diào)整。如果一個區(qū)塊中使用的總 Gas 數(shù)量超過這個 target,那么下一個區(qū)塊的 base fee 就會增加。相反,如果使用的總 Gas 數(shù)量低于 target,則 base fee 減少。這個機制旨在創(chuàng)建一個更可預測的費用市場,并通過穩(wěn)定交易開銷改善用戶體驗。此外,EIP-1559 還引入了 base fee 的銷毀機制,永久地從流通量中移除了那部分 Ether。這增強了協(xié)議的可持續(xù)性,同時創(chuàng)造了所謂的超穩(wěn)健貨幣迷因 (ultra sound money meme)。
在 EIP-1559 下,還設(shè)有一個最大(或“硬上限”)Gas 上限,設(shè)為 target 的兩倍,即 3000 萬 Gas。這意味著一個區(qū)塊可以打包總使用量高達 3000 萬 Gas 的交易。
自那時起,以太坊的區(qū)塊 Gas 上限保持不變,截至 2024 年,仍然是每個區(qū)塊 3000 萬 Gas。
最近,一些人對以太坊的 Gas 上限表示擔憂,并要求將其增加。在 Reddit 上的最新以太坊基金會 AMA 中,Vitalik 表示考慮了將 Gas 上限增加 33% 至 4000 萬的想法。他的推理基于摩爾定律,該定律指出微芯片上的晶體管數(shù)量大約每兩年翻一番,從而使得計算能力相應(yīng)增加。這一原則表明,網(wǎng)絡(luò)性能,包括處理和執(zhí)行交易的能力,也可以隨時間增加。
來自以太坊基金會的研究人員 Dankrad 和 Ansgar 也支持在評估 Dencun 升級后的情況后增加 Gas 上限的想法。此外,以太坊基金會的 Pari 發(fā)表了一篇帖子,探索潛在的 Gas 上限增加途徑。像 Geth 的 Peter 和 Marius 這樣的其他人則對增加 Gas 上限表示擔憂,特別是在沒有適當?shù)墓ぞ?監(jiān)控到位的情況下。這些擔憂主要和這些問題相關(guān):加速狀態(tài)增長、同步時間和重組塊率。
區(qū)塊的大小可以通過兩種方式衡量:
Gas 使用量
區(qū)塊大小(以字節(jié)為單位)
雖然這兩種衡量方式相關(guān)聯(lián),但必須獨立考慮。
例如,一個包含許多非零 calldata 字節(jié)的區(qū)塊在字節(jié)大小上可能很大,而實際的 Gas 使用量 (每非零字節(jié)需要 16 Gas) 可能仍然相對較小。
先不考慮壓縮后的情況,在遵守Geth 每筆交易 128 KB 限制的前提下,當前可以達到的最大區(qū)塊大小約為 6.88 MB。這樣一個的區(qū)塊里將最大化打包 128 KB 交易的數(shù)量。實際計算出來的結(jié)果是,包含約 130,900 字節(jié)的零字節(jié) calldata(每字節(jié) 4 Gas)的 55 筆交易,以及一個填滿剩余空間的交易。然而,經(jīng)過 snappy 壓縮后,這樣的區(qū)塊最終大小約為 0.32 MB,這可以忽略不計。
而另一種情況,考慮最大可能性的區(qū)塊大小,包含 15 筆攜帶非零字節(jié) calldata 的交易,壓縮后大小可達約 1.77 MB。
因此,截至今日,1.77 MB 代表執(zhí)行層區(qū)塊的真實區(qū)塊大小上限。
譯者注:
在上面的幾個段落中,作者在固定 gas 上限 30 M 的情況下,想要讓 block size 最大,嘗試計算最多可以把區(qū)塊塞到多大。
如果固定 gas 上限,要讓 block size 變大,那么只能塞 calldata(因為計算/STORE之類的字節(jié)碼其實是不會消耗區(qū)塊存儲空間的)。
所以,要讓區(qū)塊變大,無非就是盡量往交易塞 calldata。然后,有“塞 0 calldata” 和 “塞非 0 calldata” 兩種方法,需要計算才能知道哪種能讓 block size 更大。最終結(jié)果是“塞非 0 calldata” 的 block size 更大。
基于 Geth 客戶端限制每筆交易最多 128 KB 這一前提,下面開始計算兩個例子。
case 1:56 個大小為 130,900 B ( (30 M),所以最多只能塞 55 個上述交易+ 1 個小于上述交易的交易。對應(yīng)的區(qū)塊大小約為 55*128 = 7040 kB = 6.875 MB。然而,由于 calldata 全是 0,所以壓縮后區(qū)塊大小約為 0.32 MB。
case 2:15 個大小為 130,900 B ( 30 M。對應(yīng)的區(qū)塊大小約為 14 *128 = 1792 kB = 1.75 MB ~ 15 * 128 = 1.875 M。然而,由于 calldata 是非零,不好壓縮,所以壓縮后區(qū)塊大小約為 1.77 MB。)
就這個最大區(qū)塊大小而言,我們可以識別出幾個影響它的因素:
Gas 上限:Gas 上限會影響最大區(qū)塊大小,這是毋庸置疑的。上限越高,區(qū)塊中可以塞進的數(shù)據(jù)就越多。
操作和數(shù)據(jù)的定價:操作的 gas 越便宜,區(qū)塊內(nèi)就能執(zhí)行越多次操作。雖然像CALLDATALOAD
或CALLDATACOPY
這樣的操作,它們的開銷都是 3 Gas,相對便宜;但其他操作碼如CREATE
則更昂貴。區(qū)塊中使用的操作碼越昂貴,該區(qū)塊中用于calldata
(或其他操作)的空間就越少。
客戶端限制:雖然客戶端限制的影響不那么明顯,但比如像 Geth 客戶端這樣對每筆交易的 128 kb 限制也可以影響最終區(qū)塊大小。由于每筆交易的固定費用是 21k Gas,客戶端每筆交易的大小限制越低,就需要更頻繁地支付固定費用,從而“浪費”本可以用于calldata
的 gas。所以最終,這個限制可以導致最大區(qū)塊大小減少約 0.07 MB。需要注意的是,客戶端限制只影響交易的廣播,并不影響已經(jīng)被確認的區(qū)塊。
首先,讓我們看看每個區(qū)塊的 Gas 上限:
像以太坊這樣的區(qū)塊鏈,提高區(qū)塊 Gas 上限是最直接和明顯的擴容方式。更高的上限意味著更多的數(shù)據(jù)空間。然而,這也意味著需要每個運行全節(jié)點的人傳播和下載更大的區(qū)塊。如上圖所示,“最壞情況(即前面通過計算得出的最大區(qū)塊大小)”下的區(qū)塊大小與區(qū)塊 Gas 上限的增加大致呈線性關(guān)系。通過創(chuàng)建塞滿盡可能多的非零字節(jié) calldata 交易的區(qū)塊,就可以達到這樣的最大區(qū)塊大小。
接下來,讓我們看看另一個影響因素 —— 以太坊的定價機制。在當前的例子中,具體就是目前被設(shè)定為 16 Gas 的非零字節(jié)calldata
的開銷:
如上圖所示,增加非零calldata
的開銷會讓區(qū)塊大小減小。換句話說,將開銷降低到比如說每字節(jié) 8 Gas,會使最壞情況下的區(qū)塊大小翻倍。這很直觀,因為降低價格允許將雙倍數(shù)量的數(shù)據(jù)放入?yún)^(qū)塊中。
我不會在這里詳細介紹 4844,因為 eip4844.com 上有很好的文檔,但簡單來說,EIP-4844 引入了類似“sidecar (挎斗)”結(jié)構(gòu)的數(shù)據(jù)類型,叫做 blob,每個 blob 可塞進約 125 kb 的數(shù)據(jù)。Blob 數(shù)據(jù)費用機制與 EIP-1559 類似,也存在一個“target”,用于錨定 blob 數(shù)量。在 Dencun 硬分叉中,target 設(shè)為每個區(qū)塊 3 個 blob,最大限制設(shè)為每個區(qū)塊 6 個 blob。值得注意的是,blob 擁有自己的費用市場,創(chuàng)建了所謂的多維費用市場。這意味著 blob 不必與標準交易競爭,而是與 EIP-1559 機制下的費用解耦。
到目前為止,一切順利。讓我們看看這次升級如何影響以太坊的平均區(qū)塊大小。
截至今日,采用 snappy 壓縮后的信標鏈區(qū)塊的平均區(qū)塊大小約為 125 KB。有了 4844,我們每個區(qū)塊再增加 375 KB,從而使當前平均區(qū)塊大小增加 4 倍。如果達到最大數(shù)量的 blob,我們實質(zhì)上將當前區(qū)塊大小增加了七倍。
最壞情況下的區(qū)塊大小從約 1.77 MB 增加到約 2.5 MB。這個估算沒有將區(qū)塊的 CL (共識層) 部分考慮在內(nèi)。但不管怎樣,在遭受 DoS 攻擊的情況下,我們必須做好應(yīng)對這種最大區(qū)塊大小的準備。
最終,如果要提高當前的區(qū)塊 Gas 上限,我們需要在實施前進行徹底的研究和分析。雖然像 Coinbase、Binance、Kraken 或 Lido 節(jié)點運營商這樣的成熟的實體能夠應(yīng)對超過 4000 萬的區(qū)塊 Gas 上限的情況,但獨立質(zhì)押者可能會比較困難。
因此,這樣的決策必須經(jīng)過深思熟慮,以確保我們不會犧牲去中心化。
最后,構(gòu)建一個像 Facebook 那樣容量大、性能強的東西相對容易,但重要的是不能失去我們大多數(shù)人所追求的東西:去中心化。
相關(guān)推薦
資訊排行
同類軟件下載
關(guān)于女性 生活實用
精靈寶可夢區(qū)塊鏈 金融理財
孟德大小姐與自爆少年 角色扮演
大小手 生活實用
噪音大小測試 學習工具
法大小石橋 學習工具
可來 金融理財
易可 辦公效率
可映 拍照攝影
熱門標簽