宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > 币赢 > 正文

EIP-3529:减少gas返还

作者:

时间: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 更长的峰期。

数据:以太坊矿工收入以美元计算在 EIP-1559 升级前后差别不大:8月31日消息,以美元计算的以太坊矿工收入在 EIP-1559 升级前后差别不大,约 1.8 亿美元。币价方面,以太坊币价本月大部分时间徘徊在 3000 美元附近,而 7 月则围绕 2000 美元波动。数量方面,据 Etherscan 数据,截止 8 月 29 日,以太坊矿工本月共挖得以太坊约 6.1 万枚环比大幅减少(7 月共挖得 9.1 万枚),主因 EIP-1559 升级后以前部分属于矿工的以太坊被销毁。(The Block)[2021/8/31 22:49:03]

规范

参数

对于存在 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 定义的)

数据:EIP-1559模式交易占比已接近50%:据欧科云链链上大师数据显示,当前以太坊共计已销毁97205.7ETH,单个区块销毁均值为0.7299 ETH。昨日EIP-1559模式下的交易笔数达到59.54万笔,占比49.35%。[2021/8/26 22:38:08]

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

原理阐释

EIP-2200 引入了返还的三种情况:

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

2. 如果原始值是零,当前值是非零,新值为零,添加 SSTORE_SET_GAS - SLOAD_GAS (当前是 19,900) 的 gas 量到返还计算器

3. 如果原始值是非零,当前值是一个不一样的非零值,新值等于原始值,添加 SSTORE_RESET_GAS - SLOAD_GAS (当前是 4,900)的 gas 到返还计算器

在这三种情况里,只有 (1) 会启动 gastoken 且允许区块在执行上消耗超过区块 gas limit 的 gas。(2) 不具有这个特点,因为要获得 19,900 的 gas 返还,同一个存储槽必须在之前从零改为非零,这需要消耗 20,000 gas。无法从一个存储槽获得 gas 并用它来编辑另一个存储槽,意味着它不能被用作 gas token。另外,获得返还需要恢复存储的写入和扩展,使得返还的 gas 不会增加客户端处理区块的工作量。(3) 是相似的:只有当同一个存储槽在之前已经消耗了 5,000 gas 的时候才能获得 4,900 gas 返还。

以太坊开发人员修复一个EIP-1559重大漏洞:来自瑞典的以太坊核心开发人员Martin Holst Swende发现EIP-1559中的一个重大漏洞,由于EIP-1559没有限制用户用于加快交易速度而支付的最大金额,因此,攻击者可以插入一个高得离谱的数字来压倒网络,即使他们没有资金支付小费,最终大量虚假的交易可能使网络不堪重负。开发人员已经向EIP-1559添加四项检查,并修复了该漏洞。(decrypt)[2021/5/30 22:57:01]

此 EIP 处理第一种情况。我们可以通过使用一个相似的“配对” 变元来确定在何种条件下 gastoken 是不可用的 (例如,你不可以在一个存储槽里获得比你的输入更多的 gas) ,将每一笔返还映射到同一笔交易的同一个存储槽的前一笔支出。当一个存储槽的原始值是非零值,如果它被改为 0 时,有两个可能性:

1. 这可能是存储槽第一次被设置为零。在这种情况下,我们可以把这个时间与 SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST 第一次读取和编辑存储槽的最小开销进行配对。

2. 这可能是存储槽第二次被设置为零或被设置为零后的情况。在这种情况下,我们可以把这个事件与最近一次数值从零改为其他值,且 SSTORE_CLEARS_SCHEDULE 的 gas 从返还中被移除的变元进行配对。

Coin Metrics分析师:即使使用EIP-1559,以太坊费用也将保持高位:Coin Metrics高级研究分析师Nate Maddrey在采访时表示,以太坊交易费从根本上讲是一个可扩展性问题,只要对区块空间的竞争激烈,收费就会一直很高。EIP-1559能做的只是帮助改善用户体验,减少gas费差异,并使费用更可预测。从长远来看,真正降低交易手续费需要的是L2解决方案以及最终的以太坊2.0。(Cryptonews)[2021/3/23 19:11:18]

对于第二次或之后的情况,SSTORE_CLEARS_SCHEDULE ?的值是什么并不重要,因为那个 gas 大小的返还是与相同大小的清除返还相匹配的。这就只剩下第一种情况了。为了确保存储槽上消耗的 gas 总量为正,我们需要 SSTORE_CLEARS_SCHEDULE <= SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST。因此,此 EIP 只把 SSTORE_CLEARS_SCHEDULE 减少到那两项开销的总和。

此 EIP 的另一个原因是,清除还未被读取的数据 (通常是“无用”数据) 是不会有净返还的,但清除被读取过的数据 (通常是“有用”数据) 还继续会有净返还。

V神:期待社区提案EIP 1559能减少巨额转账费用的出现:为了解决最近屡次出现的以太坊网络巨额转账手续费问题,V神提出EIP 1559这种能减少手动输入费用的提案可以减少此类情况发生。EIP 1559是一个社区提案,旨在通过网络需求调整基本网络费用从而改变当前收费模式。当前收费模式允许用户发起交易后自主选择费用,这会导致网络繁忙时转账费用提高。据悉,EIP 1559是旨在改变以太坊费用市场的提议,主要的变动涉及:1.目前1000万gas限额会被两个数值所取代,一个是“长期平均目标”(1000万),另一个是“每个区块的硬上限”(2000万);2.交易需要支付一个基础费用(BASEFEE,它会被燃烧掉),该费用按区块进行调整,目标是确定一个value值,使得区块gas平均使用量保持在1000万左右。(ethereumworldnews)[2020/6/12]

向后兼容性

返还当前仅在交易执行后应用,因此无法对执行中任何特定可用的调用框架造成影响。因此,清除它们将不会破坏任何代码的执行,尽管它将使得一些应用变得经济上不可行。

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

标签:GASSTOSTORTORTogashi InuHistoriastorj币总量多少TORII价格

币赢热门资讯
闪电贷攻击 + 错误权限配置 2500万美元付诸东流

一、事件概览 美国东部标准时间5月12日上午9:44分,链必安-区块链安全态势感知平台(Beosin-Eagle Eye)监测显示,DeFi质押和流动性策略平台xToken遭到攻击.

1900/1/1 0:00:00
区块链·世界志 | 量化即挖矿?IBTC开启挖矿新玩法

5月13日16:00,IBTC量化即挖矿平台大中华区技术服务顾问 Walter.S作客「区块链·世界志」直播间,一起探讨了IBTC在量化挖矿赛道的布局.

1900/1/1 0:00:00
六大行投入金融科技近千亿 区块链加码下供应链金融能走多远?

《21世纪经济报道》讯:2020年银行年报发布已进入尾声,六大行早前年报已发布完毕,在A股上市的全部九家股份行中,均已披露2020年经营业绩。从年报中不难发现,“供应链金融”是每家银行大力布局,同时重点着墨的业务板块.

1900/1/1 0:00:00
金色DeFi日报 | Sushi在Q1实现400亿美元的交易量

DeFi数据 1.DeFi总市值:1368.83亿美元 市值前十币种排名数据来源DeFiboxDeFi总市值数据来源:Coingecko2.过去24小时去中心化交易所的交易量:80.

1900/1/1 0:00:00
历史又不押韵地rap了:被金融收编的比特币遇到游戏化的Z时代(上)

主持人:狗币是什么? 马老师:数字货币…加密…%**#*&主持人:哦。那狗币是什么?马老师:数字货币…加密…%**#*&主持人:嗯.

1900/1/1 0:00:00
比特币:数字资产交易的银行头寸问题

在人民币头寸退出后,比特币等加密资产交易价格走势的看多看空,一是看监管风险,二是看市场反应。关键是美元头寸的常备量。虽然以“数字货币”或“加密货币”命名,比特币等加密资产,其交易大体分为:币币交易与法币交易.

1900/1/1 0:00:00