以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > SAND > Info

EIP-3529:減少gas返還_GAS

Author:

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

簡單總結

移除 SELFDESTRUCT 的 gas 返還,減少 SSTORE 的 gas 返還到一個較低水平,使得返還的量仍然相當大,但不會像現在高到可以被利用的地步。

原因

最初引入 SSTORE 和 SELFDESTRUCT 的 gas 返還是為了鼓勵應用開發者寫應用時能踐行“良好的狀態衛生”,清理不再需要的存儲槽與合約。但是,結果證明這項技術帶來的效率遠低于預期,gas 返還還帶來多項未預料到的有害后果:

gas 返還導致 GASToken 的出現。GasToken 有益于把 gas 空間從低費用階段轉移到高費用階段,但它也對網絡有壞處,尤其是加劇狀態大小膨脹 (由于狀態槽被有效用作“電池”來積攢 gas) 和低效地堵塞區塊鏈 gas 使用。

gas 返還加劇區塊大小變化。一個區塊實際消耗的 gas 量的理論最大值是接近名義上的 gas limit (因為返還會增加同一區塊里后面交易的 gas 空間,盡管返還的 gas 最多是該筆交易消耗 gas 的50%)。這一點不是致命的,但影響還是相當不好,特別是返還可以被用來維持比 EIP-1559 使用兩倍 gas limit 更長的峰期。

以太坊開發者:Etherscan可顯示使用EIP-1559能節省的交易費用:以太坊開發者Tim Beiko發推表示,當前Etherscan頁面已可顯示使用EIP-1559能節省的交易費用。[2021/7/8 0:36:10]

規范

參數

對于存在 block.number >= FORK_BLOCK 的區塊,需要作下列變更。

1. 移除 SELFDESTRUCT 的返還

2. 用 SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST (EIP-2929 + EIP-2930 合力下的 4,800 gas) 取代 SSTORE_CLEARS_SCHEDULE ( EIP-2200 定義的)

3. 把交易后的最大返還 gas 量減少到 gas_used // NEW_MAX_REFUND_QUOTIENT

原理闡釋

EIP-2200 引入了返還的三種情況:

以太坊社區圍繞EIP-1559提案討論仍陷膠著狀態:據Cointelegraph 3月15日消息,以太坊社區針對EIP-1559提案討論仍處于膠著狀態。針對3月13日,礦工提出針對EIP-1559的提案EIP-3368,即擬將當前區塊獎勵從2ETH增加至3ETH,已有礦池Red Panda Mining表示支持該提議,并承諾不再參與51小時算力轉移示威活動。雖然這表明部分以太坊礦工和開發者可能準備達成某種形式的妥協,但根據以太坊社區論壇關于EIP-3368提案的討論表明,以太坊社區當前仍然呈現分裂態勢。與此同時,礦工群體內部似乎也對EIP-3358提案產生了抵制,許多人在Twitter上回復表示,許多礦工仍然希望展示自己的力量。此前3月11日消息,ETH礦工計劃發起51小時算力轉移示威活動以反對EIP-1559,隨后有礦工提出針對EIP-1559的提案EIP-3368,擬將當前區塊獎勵從2ETH增加至3ETH。[2021/3/15 18:45:17]

1. 如果原始值是非零,新值是零,添加 SSTORE_CLEARS_SCHEDULE (當前是15,000)的 gas 量到返還計算器

2. 如果原始值是零,當前值是非零,新值為零,添加 SSTORE_SET_GAS - SLOAD_GAS (當前是 19,900) 的 gas 量到返還計算器

以太坊核心開發者:EIP-1559重點在于改善用戶體驗和解決Gas市場的低效問題:以太坊核心開發者eric.eth發布推特稱,EIP-1559需要上一堂歷史課,因為它現在有點修改了。在2019年初,其對以太坊費用的第一個價格拍賣模型非常糟糕,感到十分沮喪。eric.eth認為這是大規模采用的第一道障礙。這種挫敗感純粹是一種用戶體驗。這與銷毀(burn)費用的想法無關。在缺乏回應和理解了V神的論文后,我明白了那是最好的選擇,并聯系了V神。然后我們一起寫了EIP-1559。值得注意的是,銷毀基本費只是論文和medium文章中的一個技術性的旁注。其重點純粹在于改善用戶體驗和解決Gas市場的低效問題。然而,目前EIP-1559整體敘述變成了“因為它銷毀ETH,所以是好的”,這有點令人沮喪。這是一個很好的副作用,但這不是我們應該實施它的原因。我們可能會銷毀一些ETH,但人們對齊過分期待。不是每一筆費用的所有部分都會被銷毀,一旦有了規模,銷毀的費用會更少。此前消息,EIP-1559預計今年推出。據悉,EIP-1559試圖通過引入固定費用和銷毀機制來降低交易費用。EIP-1559由V神于2018年首次提出,預計使以太坊區塊鏈的收費市場更加可預測并緩解擁堵。[2021/2/10 19:26:23]

3. 如果原始值是非零,當前值是一個不一樣的非零值,新值等于原始值,添加 SSTORE_RESET_GAS - SLOAD_GAS (當前是 4,900)的 gas 到返還計算器

觀點:如實施EIP-1559 去年將有近100萬ETH被銷毀:有觀點指出,如果實施了有爭議的以太坊改進提案(EIP)1559 ,那么在去年將燒毀97萬枚ETH,總價值為3.6億美元。據悉,EIP-1559試圖通過引入固定費用和銷毀機制來降低交易費用。據悉,EIP 1559由V神于2018年首次提出,預計使以太坊區塊鏈的收費市場更加可預測并緩解擁堵。(cointelegraph)[2020/10/16]

在這三種情況里,只有 (1) 會啟動 gastoken 且允許區塊在執行上消耗超過區塊 gas limit 的 gas。(2) 不具有這個特點,因為要獲得 19,900 的 gas 返還,同一個存儲槽必須在之前從零改為非零,這需要消耗 20,000 gas。無法從一個存儲槽獲得 gas 并用它來編輯另一個存儲槽,意味著它不能被用作 gas token。另外,獲得返還需要恢復存儲的寫入和擴展,使得返還的 gas 不會增加客戶端處理區塊的工作量。(3) 是相似的:只有當同一個存儲槽在之前已經消耗了 5,000 gas 的時候才能獲得 4,900 gas 返還。

此 EIP 處理第一種情況。我們可以通過使用一個相似的“配對” 變元來確定在何種條件下 gastoken 是不可用的 (例如,你不可以在一個存儲槽里獲得比你的輸入更多的 gas) ,將每一筆返還映射到同一筆交易的同一個存儲槽的前一筆支出。當一個存儲槽的原始值是非零值,如果它被改為 0 時,有兩個可能性:

動態 | 以太坊EIP 1559和EIP 1057將很可能出現延遲:據Coindesk報道,在周五以太坊核心開發者電話會議上,以太坊開發人員Rick Dudley稱,EIP 1559 為以太坊引入新的交易費模式,這是一個相當復雜的變化,目前在伊斯坦布爾升級前似乎不太可能完成。另外,EIP 1057提出了一種改進的PoW算法——ProgPoW,因為審計問題也將延遲。據悉,伊斯坦布爾升級計劃在10月中旬開始進行主網激活。[2019/5/25]

1. 這可能是存儲槽第一次被設置為零。在這種情況下,我們可以把這個時間與 SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST 第一次讀取和編輯存儲槽的最小開銷進行配對。

2. 這可能是存儲槽第二次被設置為零或被設置為零后的情況。在這種情況下,我們可以把這個事件與最近一次數值從零改為其他值,且 SSTORE_CLEARS_SCHEDULE 的 gas 從返還中被移除的變元進行配對。

對于第二次或之后的情況,SSTORE_CLEARS_SCHEDULE ?的值是什么并不重要,因為那個 gas 大小的返還是與相同大小的清除返還相匹配的。這就只剩下第一種情況了。為了確保存儲槽上消耗的 gas 總量為正,我們需要 SSTORE_CLEARS_SCHEDULE <= SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST。因此,此 EIP 只把 SSTORE_CLEARS_SCHEDULE 減少到那兩項開銷的總和。

此 EIP 的另一個原因是,清除還未被讀取的數據 (通常是“無用”數據) 是不會有凈返還的,但清除被讀取過的數據 (通常是“有用”數據) 還繼續會有凈返還。

向后兼容性

返還當前僅在交易執行后應用,因此無法對執行中任何特定可用的調用框架造成影響。因此,清除它們將不會破壞任何代碼的執行,盡管它將使得一些應用變得經濟上不可行。

Gas token 會變得沒有價值。DeFi 套利機器人今天經常不是使用已有的 gas token 方案就是一個定制的,以減少鏈上的開銷,這得益于重寫它們的代碼以清除對那些不再有用的 gas 存儲機制的調用。

然而,完全保留在 new = original = 0 != current ?里的返還,以及保留在其他 nonzero -> zero 情況里的一些返還能確保一些接收 (和值得) 更好的 gas 開銷待遇的關鍵用例能持續獲益。例如,zero -> nonzero -> zero 的存儲設置模式保持只需消耗大約 100 gas。這些模式包括兩個重要實例:

? 反重入鎖 (通常在一個子調用開始前從 0 變為 1,當子調用結束時再變回 0)

? ERC20 授權與發送 (當代幣轉移得到授權,"授權值"會從零變成非零,然后在代幣轉移過程中恢復到零)

對清除存儲激勵的影響

對之前關于移除返還的 EIP (EIP-3298 和 EIP-3403) 的批評是這些 EIP 完全消除了把一個值設為零的激勵,相當于鼓勵用戶不要完全清除一個存儲槽 (即使他們想這么做),哪怕他們想再次使用該存儲槽的幾率是最小的。

舉一個例子,如果你有一個單位的 ERC20 代幣,且你要送出或賣出你的所有余額,你可以只給出 0.999999 個單位,把剩余的留下。如果你想在未來重新放入更多該種代幣到同一個賬戶,你僅需要為 SSTORE 支付 5,000 gas (2,100用于讀取 + 2,900用于非零變為非零的設置) 而不是22,100 (20,000 用于零到非零值的設置)。今天,這部分的 gas 會被清除存儲獲得的 15,000 gas 返還所抵消,因此,如果你有超過 15000 / 17100 = 87.7% 的把握會再使用這個存儲槽,你才會有動力這樣做;按照 EIP 3298 或 EIP 3403 的設定,抵消激勵這部分是不存在的,因此,如果你再次使用該存儲槽的可能性是大于 0 的,設為非零值會更好。

對于剩下的 4,800 gas 返還,如果你覺得再次使用某個存儲槽的幾率大于 4800 / 17100 = 28.1% ,你才有保持該存儲槽為非零的動力。這并不是完美的,但它可能高于一般人在清除了他們的全部余額后在同一個地址重新獲得同一代幣的幾率。

gas 返還的上限是所消耗 gas 量的1/5,這意味著這種返還僅夠用于增加處理一個區塊所需的存儲寫入操作量最多為25%,限制了利用這個機制進行以存儲寫入為重點的拒絕服務攻擊。

測試用例

EIP-2929 的 gas 開銷

注意,“熱”和“冷”存儲槽之間是有區別的。這個表展示了 EIP-2929 下的值,假定所有變動過的存儲槽都已經是“熱”狀態 (區別是一次性消耗 2,100 gas)。

減少了的返還后

如果通過把 SSTORE_CLEARS_SCHEDULE 從 15,000 變為 4,800 (以及去除 selfdestruct 的返還) ,減少了部分的返還,下面是是一個對比表。

安全考慮

返還對于事務執行時不可見的,因此這不會對事務執行邏輯產生任何影響。

如果我們不計算后來重置回零的零到非零的 SSTORE,在一個區塊里執行的最大 gas 消耗量受到 gas limit 的限制。不計算這些事可以的,因為如果這樣的 SSTORE 被重置了,存儲不會被擴展,客戶端實際上不需要調整默克爾樹;gas 消耗是可以返還的,但客戶端對這些操作碼的處理通常也會被取消。如果 new_value = original_value,客戶端應該保證不會進行存儲寫入;這是自以太坊創世以來的一次謹慎優化,但它現在變得更重要了。

來源 |?eips.ethereum.org

作者 | Vitalik Buterin & Martin Swende

Tags:GASSTOTORSTORUGAS-JUN21價格STORM幣torn幣暴跌cloudstorage

SAND
一文詳解DeFi保險_DEF

"在DeFi生態系統中,保險仍然是利基市場。但是,隨著保險領域的成熟以及機構參與者的加入,保險可能會成為DeFi的最大支柱之一.

1900/1/1 0:00:00
如何給 NFT 估值?_NFT

目錄 NFT?簡史 收藏品共識 NFT?的價值概念 功能價值 -實用性 -所有權歷史 -數字稀缺性 -供求關系 -未來價值 -流動性溢價 享受價值 估值挑戰 -高度投機的市場 -缺乏流動性 -N.

1900/1/1 0:00:00
Gavin Wood首次公布Kusama平行鏈初步上線時間_SAMA

北京時間 5 月 20 日凌晨 3:25,波卡創始人 Gavin Wood 博士在波卡社區大會「Polkadot Decoded」上和大家在線聊天.

1900/1/1 0:00:00
大餅還在5萬附近 為何恐慌指數卻跌去了30?_ETH

大家好,我是佩佩,今天這個市場可是真有意思哈:新韭菜一覺醒來:我錢呢??V神:我幫你們捐了。老韭菜一覺醒來:我錢呢??馬一龍:我覺得比特幣還是不夠環保.

1900/1/1 0:00:00
幣市恐慌肆虐 巨鯨趁勢掃貨_比特幣

加密資產市場元氣大傷,7400多個幣種支撐出的2.2萬億美元市值,一周時間蒸發了7700億美元,主支撐比特幣(BTC)的市值也從8530億美元下降至6784億美元.

1900/1/1 0:00:00
新華網:“比特幣披薩節”你聽說過嗎?_比特幣

2010年5月,一位程序員用1萬枚比特幣買兩份披薩,四天后交易成功。是的,您沒有聽錯,1萬枚,個、十、百、千、萬、1萬……后來,大家為了紀念比特幣支付購買實物成功,將5月22日定為“比特幣披薩節.

1900/1/1 0:00:00
ads