比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads

GAS:以太坊柏林硬分叉完成 Gas費會受到什么影響?_Alphaslot

Author:

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

原文標題:《柏林硬分叉對Gas影響幾何?》

撰文:FrancoVictorio

翻譯:ETH中文站

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

要點速覽

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

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

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

柏林硬分叉前的gas成本

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

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

柏林前SLOAD的gas成本

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

Coinbase以太坊L2“Base”發布2023去中心化路線圖:金色財經報道,Coinbase以太坊L2“Base”發布2023去中心化路線圖,包括:

1、為OP Stack啟動至少一個故障證明器,利用一組驗證器來識別和解決故障,繼而保護Base和Optimism主網。

2、實現Base和Optimism主網智能合約的去中心化升級,預計將推出一個安全委員會,其中去中心化法定人數不受任何單一實體控制。

3、啟動Superchain初始版本,可以對Base、Optimism主網和任何OP Stack Rollup的交易進行排序,確保任何人參與Base生態系統的權利

Base表示將在2024年把Base和Optimism主網推進到Stage 2 rollups,使Base的去中心化程度和安全性可與以太坊媲美。此外,Base稱不會使用其他代幣,而是將繼續使用ETH作為原生gas代幣。[2023/2/24 12:26:08]

柏林前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費返還,因為它們在柏林硬分叉中不受影響。

以太坊信標鏈質押量超過1587萬枚ETH:金色財經報道,Dune數據顯示,當前以太坊信標鏈質押量為15,871,447枚ETH,占ETH流通總量的13.16%,驗證者數量達495,983個。

此外,以太坊信標鏈存款認證實體存入的ETH數量中,Lido市場占有率最高,達到29.25%,其次為Coinbase(12.99%)、Kraken(7.56%)、Binance(6.35%)、Staked.us(2.88%)、Bitcoin Suisse(2.48%)、Figment(2.43%)和Rocket Pool(2.11%)。[2023/1/3 9:49:54]

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

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

EIP-2929后的gas消耗

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

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

報告:以太坊合并將使加密貨幣與股票脫鉤:金色財經報道,在一份名為 \"脫鉤論 \"的報告中,Messari的高級研究分析師Tom Dunleavy認為,以太坊的合并將可能成為投資者經濟前景的一個重要轉折點。他指出,在過去,比特幣和以太坊與美國股市有著強烈的正相關。這兩種加密貨幣與納斯達克和標準普爾500指數之間的相關性在較長時期內從40-50%不等,在較短時期內約為90%。相比之下,黃金和美國政府債券等資產在歷史上與股票呈負相關關系。然而,目前,這種負相關關系已經越來越弱了。在2020年由通貨膨脹帶來的市場低迷期間,黃金和債券都與股票一起崩潰了。

基于這種趨勢,Dunleavy認為,隨著通貨膨脹的持續,黃金和債券的吸引力會越來越小。這就是在PoS系統中押注以太坊將為市場帶來的奇跡。

合并后,ETH將成為準政府債券。質押者將投入資金以換取按固定時間表(如債券本金)的回報。這也將鞏固比特幣作為數字黃金的地位。[2022/4/27 5:13:57]

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

「在執行交易時,維持一組accessed_addresses:Set和accessed_storage_keys:Set]」

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

接下來談談新的gas消耗。

柏林后的SLOAD

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

數據:以太坊供應量較前日減少1403ETH:11月12日,據歐科云鏈鏈上大師數據顯示,當前以太坊銷毀量為85.43萬ETH,銷毀速率6.07ETH/分鐘;昨日以太坊銷毀量為14890.19ETH,銷毀量環比上升9.1%,以太坊的供應量較前日減少1403.88ETH。[2021/11/12 21:46:12]

柏林后的SSTORE

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

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

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

如果被訪問過了,20000

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

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

如果被訪問過了,2900

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

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

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

總結

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

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

動態 | 以太坊Parity節點已修復其漏洞 敦促所有以太坊節點進行更新:Parity在推特上稱,漏洞修復已經完成,請盡快更新節點,雖然該漏洞只直接影響Infura、MEW、MyCrypto等服務于JSONRPC的Parity以太坊節點,但建議所有以太坊節點立即更新自己的節點。此前消息,以太坊Parity官方發布公告,客戶端發現一個漏洞,攻擊者可向公共以太坊Parity節點發送特定RPC請求,使得節點崩潰,對很大比例的以太坊基礎設施產生威脅。[2019/2/5]

EIP-2930:可選訪問列表交易

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

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

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

accessList:?}]

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

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

訪問過的地址

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

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

accessList:}]

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

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

accessList:[

?{address:"

",storageKeys:},

?{address:"

",storageKeys:},

]

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

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

accessList:[{

?address:"

",

?storageKeys:[

??"0x0000000000000000000000000000000000000000000000000000000000000000"

?]

}]

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

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

eth_createAccessListRPC方法

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

{

?"accessList":[

??{

???"address":"0xb0ee076d7779a6ce152283f009f4c32b5f88756c",

???"storageKeys":[

????"0x0000000000000000000000000000000000000000000000000000000000000000",

????"0x0000000000000000000000000000000000000000000000000000000000000001"

???]

??}

?],

?"gasUsed":"0x8496"

}

也就是它給你該交易會用到的地址與存儲密鑰的列表,加上訪問列表被加入情況下所消耗的gas。但,這并不代表gas消耗量會低于在沒有訪問列表情況下發送同一筆交易所消耗的!

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

letgasEstimation=estimateGas(tx)

let{accessList,gasUsed}=createAccessList(tx)

if(gasUsed>gasEstimation){

?deleteaccessList

}

tx.accessList=accessList;

ransaction(tx)

給合約松綁

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

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

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

自己做檢驗

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

Tags:GASESSTORSLOTgas幣值得投資嗎Access ProtocolraptoreumAlphaslot

中幣下載
數字貨幣:金色觀察 | 一覽博鰲分論壇 加密貨幣、數字貨幣相關話題_穩定幣是數字貨幣嗎知乎

博鰲亞洲論壇2021年年會“數字支付與數字貨幣”分論壇4月18日晚舉行。分論壇對于數字人民幣的定位與試點、加密貨幣監管、跨境支付等話題進行討論,金色財經為您匯集相關內容.

1900/1/1 0:00:00
加密貨幣:一條推特引起的加密貨幣大崩盤_加密貨幣市場總市值是多少

4月18日,有市場消息稱美國財政部將指控數家金融機構使用加密貨幣洗錢。 這一消息來自一個廣受歡迎的推特賬戶FXHedge,其向一共122700名關注者發出了警報.

1900/1/1 0:00:00
BTC:4.15晚間行情:ETH 再度刷破歷史新高 市場開啟新一波拉盤_Terra

文章系金色財經專欄作者幣圈北冥供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別防上當.

1900/1/1 0:00:00
比特幣:財聯社:美元的兩面“鏡子”:歐元和加密貨幣_加密貨幣市場總市值排名

近期美元指數走勢引發市場分歧。今年4月以來,美元指數由漲轉跌:截至4月16日,美元指數收于91.5,相較3月30日的93.3已下跌約2%.

1900/1/1 0:00:00
USD:從AMM流動性池設計分析 Synthetix為何選擇債務池機制?_Synth oUSD

Synthetix債務池機制由預言機喂價,避免了AMM的滑點問題;同時,其風險共擔和質押獎勵刺激用戶鑄造資產已實現足夠的交易深度.

1900/1/1 0:00:00
NFT:NFT的火爆 到底是曇花一現還是下一個發展機會?_DBAY價格

除了銷售獨一無二的JPEG和游戲中的物品外,NFT還有其他的應用。那么NFT究竟是什么?技術的下一步又是什么?價值560,000美元的“紐約時報”專欄文章、價值6900萬美元的Beeple的JP.

1900/1/1 0:00:00
ads