以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads

柏林硬分叉對 Gas 影響幾何?_NBS

Author:

Time:1900/1/1 0:00:00

柏林硬分叉已于 4 月 14 日在主網上線,引入了四份 EIP 。其中的兩份 (EIP-2929 和 EIP-2930)對交易的 gas 成本有影響。本文將解釋部分 gas 成本在柏林前是如何計算的,加入了 EIP-2929 后會如何變化,以及如何使用 EIP-2930 引入的訪問列表。

這篇文章很長,這是它的概要:

柏林硬分叉改變一些操作碼的 gas 成本。如果在一個 dapp 或一個智能合約里 gas 費的值是硬編碼的,它們可能會中止運行。如果這種情況發生了,且智能合約是不可更新的,消費者將需要用 EIP-2930 的訪問列表才能使用那部分的操作碼。

訪問列表可以用作減少少量的 gas 成本,但實際上它們在一些情況下是會增加總 gas 消耗量的。

geth 增加了一個叫 eth_createAccessList 的新 RPC方法,用以簡化訪問列表的創建。

EVM 執行的每個操作碼都有一筆相關的 gas 成本。它們大多數的成本是固定的:PUSH1 總是消耗 3 個單位的 gas,MUL 消耗 5 個,等等。其他一些是會變化的:比如 SHA3 的操作碼成本依賴于它的輸入大小。

我們主要討論操作碼 SLOAD 和 SSTORE,因為它們是最受柏林硬分叉影響的。我們以后會討論針對地址的操作碼,比如所有的 EXT* 和 CALL* ,因為它們的 gas 成本也改變了。

柏林前 SLOAD 的 gas 成本

柏林科技公司FUEL旗下NFT平臺完成150萬歐元融資:3月29日消息,柏林科技公司FUEL宣布旗下NFT平臺完成150萬歐元完成Pre-Seed輪融資,FintechCollective、Seedcamp、NotionCapital、Pioneers參投。

據悉,該平臺旨在成為“NFT的Shopify”,讓創作者無需任何技術即可建立自己的定制品牌NFT商店,無縫集成的各種工具來啟動、管理和發展NFT收藏品。(ffnews)[2022/3/29 14:24:10]

在沒有 EIP-2929 之前,SLOAD 的 gas 消耗很簡單:它總是消耗 800 gas。所以(目前)沒有什么可說的。

柏林前 SSTORE 的 gas 成本

在 gas 消耗方面,SSTORE 可能是最復雜的操作碼了,因為它的成本取決于像存儲 slot 的當前值、新值、以及它是否之前被修改過。我們僅對一些情況進行分析以獲得一個基本理解;如果你想了解更多,請閱讀文末的 EIP 鏈接。

如果存儲 slot 的值從0 變成 1 (或任何非 0 的值),gas 消耗量是 20000。

如果存儲 slot 的值從1 變成2 (或任何其他非 0 的值),gas 消耗量是 5000。

如果存儲 slot 的值從 1 (或任何非 0 的值) 變成 0,gas 消耗量也是 5000,但在交易的最后你會獲得 1 筆 gas 費返還。本文不會討論 gas 費返還,因為它們在柏林硬分叉中不受影響。

如果存儲 slot 的值在之前相同的交易中被修改了,往后所有 SSTORE 的 gas 消耗量都是 800。

以太坊核心開發者會議將于10分鐘后召開,包括等“柏林分叉更新”等四項議程:以太坊核心開發者會議將于10分鐘后召開。本次會議議程如下:

1. 柏林分叉更新:Ropsten和Goerli分叉更新。

2. 與倫敦升級相關的EIP:

a. Gas退款相關:EIP-3298(禁用gas退款)、EIP-3300(逐步淘汰退款)、EIP-3322(高效gas存儲)、EIP-3403(部分取消退款)。

b. EIP-3198(BASE FEE操作碼)。

c. EIP-3368(將區塊獎勵提高到3 ETH,并計劃2年衰減到1 ETH)。

d. EIP-3382(硬編碼區塊gas限制)。

3. 網絡升級時間和范圍:

倫敦、上海(緊隨倫敦之后,或專注于The Merge)、EIP-3238(難度炸彈,需要就推后期限達成協議)。

4. 如果時間允許討論其它EIP:

EIP-2315、BLS支持、EIP-3074、、EIP-2327、EIP-2677、EIP-2935、其他CFI EIP。

點擊“原文鏈接”觀看開發者會議。[2021/3/19 19:01:54]

這部分的細節并不有趣,重要的是 SSTORE 很貴,而它的消耗取決于幾個因素。

EIP-2929 對上述所有操作碼的 gas 消耗都有影響。但在深入這些變化前,我們需要先談談這份 EIP 引入的一個重要概念:訪問過的地址 (accessed addresses)與訪問過的存儲密鑰 (accessed storage keys)。

如果一個地址或一個存儲密鑰在之前的交易中被“使用”過,那么它們就會被視為“訪問過的”。例如,當你 CALL(調用)一個其他合約,該合約的地址就會被標為“ accessed (訪問過的)”。同樣地,當你 SLOAD(加載)或 SSTORE(存儲)一些 slot 的時候,交易的其他部分也會被視為訪問過的。哪個操作碼執行它并不重要:如果一個 SLOAD 讀取了一個 slot,接下來的 SLOAD 和SSTORE 都會被視為訪問過的。

以太坊將于4月14日進行柏林硬分叉升級:2月20日消息,根據以太坊核心開發者會議內容,以太坊開發者計劃于4月14日在區塊高度12244000處進行柏林硬分叉。此次升級包括從PoW鏈到PoS鏈的實時交換ETH的必要組件。(CoinDesk)[2021/2/20 17:32:07]

這里值得注意的是,存儲密鑰是“內置于“一些地址的。就如這份 EIP 所解釋:

在執行交易時,維持一組 accessed_addresses: Set[Address] 和accessed_storage_keys: Set[Tuple[Address, Bytes32]]

也就是說,當我們說一個存儲 slot 被訪問了,我們實際上說的一對 (address, storageKey) 被訪問了。

接下來談談新的 gas 消耗。

柏林后的 SLOAD

在柏林硬分叉之前,SLOAD固定消耗 800 gas。現在,它取決于該存儲 slot 是否被訪問過。如果它沒有被訪問過,gas 消耗是 2100;如果被訪問過了,則是 100。因此,如果該 slot 是在訪問過的存儲密鑰列表里的,SLOAD 的 gas 消耗會少于 2000。

柏林后的 SSTORE

讓我們在 EIP-2929 語境下重溫前面的 SSTORE 例子:

如果存儲 slot 的值從0 變成 1 (或任何非 0 的值),gas 消耗量是:

如果存儲密鑰沒有被訪問過,22100

如果被訪問過了,20000

動態 | 俄亥俄州都柏林市正尋求個人身份區塊鏈實驗:據coindesk報道,美國俄亥俄州都柏林市一直在悄悄地尋求一項以個人身份為重點的區塊鏈實驗。該市上個月通過發布征求建議書(RFP)透露了其工作。如果該提案獲得通過,都柏林將成為該州最新探索區塊鏈技術在公共部門應用可能性的城市。根據征求建議書,該市宣布打算通過開發一個數據庫來測試區塊鏈,該數據庫將允許當地官員創建一個安全的私人系統以收集和存儲個人信息和偏好,并創建內部“價值令牌”。該市提出的一個用例將允許注冊用戶在網絡上提交投票并查看投票的匯總結果。[2018/9/14]

如果存儲 slot 的值從1 變成2 (或任何其他非 0 的值),gas 消耗量是:

如果存儲密鑰沒有被訪問過,5000

如果被訪問過了,2900

如果存儲 slot 的值從 1 (或任何非 0 的值) 變成 0,gas 消耗與上一種情況一樣,再加上返還。

如果存儲 slot 的值在之前相同的交易中被修改了,往后所有 SSTORE 的 gas 消耗量都是100。

如你所見,如果 SSTORE 正在修改的 slot 是之前被訪問過的,第一個SSTORE 消耗少于 2100 gas。

下表對上述的值進行了比較:

請注意,在最后一行沒有必要談論 slot 是否已經被訪問過,因為如果它之前就被寫入,那它就被訪問過了。

我們一開始提及的其他 EIP 就是 EIP-2930。這份 EIP 增加了一種新的交易類型,它可以在交易里加入一個訪問列表。這意味著你可以在交易執行開始前,事先聲明哪些地址和 slot 應被視為訪問過的。例如,一個未被訪問過的 slot 的一個 SLOAD 需要消耗 2100 gas,但如果該 slot 被加入到交易訪問列表里,同一個操作碼只需消耗 100 gas。

柏林國際旅游展關注區塊鏈技術:據新華社報道,在第52屆柏林國際旅游展上,區塊鏈技術在旅游業的應用前景成為熱門議題。旅游技術企業主管和專家普遍認為,區塊鏈技術在旅游業應用前景廣闊,但目前尚在起步階段。美國旅游技術咨詢公司總裁諾姆·羅辛認為,區塊鏈技術對旅游業的影響主要與透明度、忠誠度相關。企業可以將區塊鏈和加密貨幣技術應用在其針對會員的積分等項目上。羅辛表示,區塊鏈技術有潛力徹底改變分銷、支付以及認證平臺,但還需3到5年時間才能形成氣候。美國公司TripX首席執行官邁克爾·卡爾亨認為,支付交易是最適合應用區塊鏈技術的領域之一。全球酒店在線預定網站“繽客”首席執行官吉利恩·坦斯說,當前有很多對區塊鏈技術在旅游行業的發展潛力和應用的討論,目前還處于初級階段,但已有不少有意思的想法和商業模式處于不斷討論和開發中。[2018/3/10]

但如果已經被訪問過的地址或存儲密鑰會消耗更少 gas,這是否意味著我們可以把所有東西都添加到交易訪問列表來降低 gas 消耗了?棒!不用給 gas 費了! 然而,不盡然是這樣,因為你每次添加地址和存儲密鑰的時候還是需要支付 gas 費的。

我們來看一個例子。假如我們正在向合約 A 發送一筆交易,訪問列表可能如下:

如果我們發送一筆附有這個訪問列表的交易,使用 slot 0x0 的第一個操作碼是SLOAD,它消耗的是 100 而不是 2100 gas。這減少了 2000 gas。但每次把存儲密鑰添加到交易的訪問列表中都需要消耗 1900 gas。因此我們只省了100 gas。(如果訪問該 slot 的第一個操作碼是 SSTORE而不是 SLOAD,我們可以省 2100 gas,也就是說如果我們考慮的是存儲密鑰的消耗的話,我們總共節省 200 gas。 )

這是否代表只要我們使用交易訪問列表就能節省 gas?不是的,因為我們還需要支付添加地址到訪問列表 (即我們的例子中的 "<address of A>" ) 的 gas。

到目前為止,我們只討論了操作碼 SLOAD 和 SSTORE,但柏林升級后不是只有這些操作碼有變化。例如,操作碼 CALL 之前的固定消耗量是 700。但 EIP-2929 后,如果地址不在訪問列表里,它的消耗量變成了 2600,如果在,則是 100。還有,像訪問過的存儲密鑰,無論之前訪問的是什么操作碼 (例如,如果EXTCODESIZE 是第一次被調用,那么該操作碼將消耗 2600 gas,而往后任何使用同一個地址的 EXTCODESIZE、 CALL 還是STATICCALL都只消耗 100 gas)。

這是如何影響有訪問列表的交易的呢?例如,假如我們給合約 A 發送一筆交易,而該合約調用另一個合約 B,那么我們可以加入這樣一個列表:

我們將需要支付 2400 gas 以把這個訪問列表加入到交易里,但之后使用 B 地址的第一個操作碼只消耗 100 gas,而不是2600。因此,我們通過這樣做節省了 100 gas。如果 B 以某種方式使用它的存儲,且我們知道使用的是哪個密鑰,那么我們也可以把它們加入到訪問列表里,這樣可以為每個密鑰節省 100~200 gas (取決于你的第一個操作碼是 SLOAD 還是 SSTORE )。

但是為什么我們要談論另一個合約?我們正在調用的合約呢?為什么不對這個合約進行這些操作?

我們可以這樣做,但這樣不劃算,因為 EIP-2929 明確規定正在被調用的合約 (即tx.to) 地址會默認加入到 accessed_addresses 列表里。因此我們無須支付多余的 2400 gas。

讓我們再對之前的例子進行分析:

除非我們要加入多幾個存儲密鑰,否則這其實很浪費。如果我們預設 SLOAD 總是首先使用存儲密鑰,那么我們起碼需要24 個存儲密鑰能保本。

你可以想象一下,做分析與手動創建一個訪問列表并不那么有趣。幸運的是,其實有更好的方法。

Geth (從 1.10.2 版本開始 ) 加入了一個新的 eth_createAccessList RPC 方法,你可以用它來生成訪問列表。它的使用與 eth_estimateGas 相似,但它返回的不是 gas 估值,而是像下面這樣的結果:

也就是它給你該交易會用到的地址與存儲密鑰的列表,加上訪問列表被加入情況下所消耗的 gas。(像 eth_estimateGas,這是一個估值,當交易實際上被挖的時候,這個列表可能會改變。)但,這并不代表 gas 消耗量會低于在沒有訪問列表情況下發送同一筆交易所消耗的!

我想我們會隨著時間推移發現使用它的正確方法,但我猜的偽代碼如下:

值得一提的是,訪問列表的主要目的不在于使用 gas。如 EIP 所解釋:

減輕由 EIP-2929 引入的合約斷裂風險,因為交易可以提前指定交易計劃訪問的賬戶和存儲 slot 并提前支付;最終在實際執行中,操作碼 SLOAD 和 EXT*只消耗 100 gas:這個低 gas 消耗不僅可以防止由該 EIP 引起的斷裂,還可以“松開”任何因 EIP-1884 而受限的合約。

這意味著如果一個合約對執行某事務的成本做了假設,gas 成本的增加就可能使它停止運作。例如,一個合約調用另一個合約,像這樣someOtherContract.someFunction{gas: 34500}(),因為它假設someFunction 會準確消耗 34500 gas,這樣它會出問題。但如果你添加了一個合理的訪問列表,那么合約會再次運作。

如果你像自己去測試,復制這個代碼庫,里面由多個可以用 Hardhat 和 geth 執行的實例。在 README 查看說明。

參考文獻

EIP-2929 和 EIP-2930 是與本文相關的兩個柏林硬分叉 EIP。

EIP-2930 依賴于柏林硬分叉的另一部分: EIP-2718,它又叫類型交易。

EIP-2929 參考了很多 EIP-2200,因此如果你想深入了解 gas 成本,你可以從那里開始。

Tags:NBSBSPGASLOTnbs幣發行量BSP價格UGAS-JUN21幣Lotto Nation

萊特幣最新價格
金色前哨 | 加密第一股Coinbase今晚上市 參考價250美元_OIN

數字貨幣交易所第一股終于要來了。Coinbase計劃今日-4月14日直接上市。昨夜今晨,納斯達克將Coinbase Global Inc?(COIN)的參考價定為每股250美元.

1900/1/1 0:00:00
金色觀察|再談“波卡關注者”需要關心什么?_DOT

4月7日消息,波卡實驗網絡Kusama已正式上線平行鏈拍賣的網頁,詳細解釋了什么是Kusama的平行鏈拍賣,如何參與以及更多常見問題.

1900/1/1 0:00:00
監管破局 或從Coinbase上市開始?_OIN

“Coin”這個單詞在過去象征著硬幣,而在 4 月 14 日之后,這個單詞又多了一層新的含義,即 Coinbase 上市后的股票代碼.

1900/1/1 0:00:00
比特幣算力銳減超45% 價格下跌10%_比特幣

自4月15日以來,比特幣網絡算力在觸及218 exahash/s的歷史高點后銳減超過49%。部分業內人士認為,BTC本次大跌與算力的銳減有關,但也有人提出不應將責任如此輕易地歸咎于算力的損失.

1900/1/1 0:00:00
Fairyproof TechCEO譚粵飛:DeFi投資者一定要看項目審計報告_區塊鏈

金色財經現場報道,4月10日,由金色財經主辦,波場TRON總冠名,HBTC、SumSwap、SubGame首席合作企業的“2021共為·創新大會”在上海舉辦.

1900/1/1 0:00:00
金色觀察 | 用Audius Collectibles展示NFT_AUD

如今NFT的展示和流通都可以通過Audius Collectibles實現!人們如何訪問和查看你的NFT非常重要!當然,對于NFT創作者和收藏夾,這個過程越簡單越好.

1900/1/1 0:00:00
ads