2300gas津贴
?它是什么?:当合约调用另一个合约时,接收者会自动获得2300gas,在此期间它可以执行非常有限的执行(足以进行一些计算并发出日志,但不足以填充存储槽)
?为什么引入?:最初是为了允许智能合约钱包在收到资金时发出日志而引入的。 从那时起,它也被用来实施防止合约接收ETH的“保护措施”。
?为什么不好?
o这是固定数量的gas,因此任何有关其支持哪种计算的主张都无法在gas定价中幸免。
o由于两个原因,它不能很好地满足其预期目的。
首先,许多用户仍在使用EOA,而EOA没有日志记录。其次,SELFDESTRUCT绕过津贴机制。从长远来看,预计EOA将不再强调通过账户抽象来支持合约,在此之后的文章提倡删除SELFDESTRUCT,但除非/除非这两项工作都做完,否则这是不充分的半成品解决方案。
?我们如何删除它?:这里有两种自然的可能性—2300数字可以用0(无子执行)或无穷大(子执行从父获得所有收益)代替。
?删除它可能会破坏什么?
o如果我们删除子执行,那么这将在调用中添加一个尴尬的两段式机制,其中0 gas被解释为0,其他任何数字都被解释为“发送所有gas”。它还会破坏反接收警卫和伐木。
o如果我们将执行过程中的全部精力交给子执行,那么用CALL发送ETH将成为“受信任”的操作,恶意合约可能会干扰某些应用。但是,Solidity文档已经不鼓励转移,而采用“提取”方式,这种方式不会带来任何风险。
?我们如何解决这些问题?
o进行所有ETH转移,包括由于通话和SELFDESTRUCT(在保留该操作码的情况下)引起的日志记录,因此钱包不需要
o添加一个规则,其中提供0gas的调用是“可以发出日志的STATICCALL(静态调用)”。就仅在仅含津贴gas的执行上下文中可以实际完成的工作而言,这将复制现有功能。
Gas可见性
?它是什么?GAS操作码允许合约查看当前执行上下文中还剩下多少gas。CALL允许调用者为子上下文指定能够执行的固定gas量。
?为什么引入它?:反对CALL仅仅将父上下文的所有gas转发到子上下文的主要原因是允许“不信任的调用”:发件人不信任收件人的调用。一个简单的例子是将ETH发送给参与者的财务机制。另一个玩具示例是M-of-N预言机,它调用一定数量的合约,从每个合约中获取响应,然后输出结果的中位数。
?为什么不好?
o实际上,不信任调用很少有用例,如果没有不信任调用,用例就很难做到。对于转移,Solidity文档已不鼓励转移,而采用“提款”模式。 上面的M-of-N预言机示例玩具可以通过对每个预言机进行单独的事务来轻松实现。
o这使得很难进行gas定价,因为它使固定gas调用在gas价格变化时可能会中断
?我们如何删除它?
O调用会自动将父的全部gas转发子。GAS操作码只会返回交易的初始gas金额。
?删除它可能会破坏什么?
o我们知道的“不可信调用的合法用例”的主要类别是第三方发起的调用。第三方将发布包含您希望他们调用的交易,并且在调用后,他们会自动向您收取款项(您将发布使他们有权执行此操作的签名)。这对于用户没有任何ETH的智能合约钱包、混合器的隐私保护以及其他用例非常有用。需要进行限gas调用,以确保最终支付条款实际上被调用,并且不会由于gas不足问题而被还原。
?我们如何解决这些问题?
o矿工可以直接充当这些中介,如果事实证明他们不支付,他们将简单地放弃交易
请参阅菲尔戴安(Phil
Daian)在创建第三方机器人生态系统中的工作,矿工可以自动生成“安全的”事务批处理。
o添加明确的协议内“第三方付款人”交易类型。参见例如EIP 2711。
还要注意,如果我们想更进一步,我们还可以调整63/64规则,这样,如果子调用失败,则父调用完全失败(因此甚至没有1/64)。这可能会破坏更多的用例(“如果子调用失败,则做一件简单的小事”),但它将确保未来的gas成本变化只能引起一种行为改变(交易失败而不是成功)。
SELFDESTRUCT
参阅完整文档。
Gas退还
?它是什么?:SELFDESTRUCT-ing一个合约或将存储位置设置为零,可退还15000-25000gas。退款将在交易结束时应用,并减少发件人需要支付的费用。
?为什么引入它?:激励应用开发人员编写具有“良好状态卫生”的应用,清理不再需要的存储插槽和合约。
?为什么不好?
o在实践中,几乎没有人实际遵守良好的状态卫生习惯。诱因还不够高,不值得增加代码的复杂性,甚至尝试这样做都存在安全风险。
o退款产生了GasToken。GasToken在将gas空间从低收费期转变为高收费期方面具有优势,但它对网络也有不利影响,特别是在加剧状态规模和低效堵塞区块链gas使用方面
o它增加了块大小差异。块中实际消耗的理论最大gas量几乎是理论gas限制的两倍。这不是致命的,但仍然是不希望的,特别是考虑到退款可用于维持2倍的使用高峰期,而其使用时间比EIP 1559更长。
?我们如何删除它?:只需从协议中删除退款功能即可。
?删除它可能会破坏什么?
o我们可以完全确定没有应用会完全无法使用,因为退款仅在执行完成后才应用,因此消除退款不会改变任何执行上下文可用的gas量。
o GasToken将变得无用
o在异常高gas的时期,应用将失去削减成本的能力。但是,当今最主要的用户是Defi套利机器人,而套利机器人之间的gas价格竞争是零和活动,因此目前尚不清楚消除与他们对抗的武器是否会带来全局不利影响
?我们如何解决这些问题?
o Gastoken已经警告了将来协议更改的可能性,从而使GasToken在其网站上无用,因此对于用户来说这不足为奇
o我们可以提前公开发出此更改的信号
其他候选(推测性)
与上面的其他内容相比,我对专注于这些内容的价值信心不足,但是仍然值得保留一份清单。
?RIPEMD160预编译:很少有项目使用的非标准哈希函数(仅与比特币接口的事物)。可以用EVM代码实现代替,真正需要高效验证的项目可以只使用ZK-SNARK
?动态跳转:目标为变量的跳转使代码分析和代码操作变得更加困难(例如,无法轻松地用其他操作码序列搜索和替换某些操作码序列,或在某些代码之前添加代码)。删除动态跳转并仅允许具有相对偏移量的静态跳转以及子程序的某些专用指针方案(指针不作为整数公开)可以解决此问题。但是,这将是一个巨大的变化,并且可能会破坏许多定制合约,因此,收益/成本比似乎不如此列表中的其他项目那么有利。
?MODEXP预编译:对于大整数数学而言,显然是错误的“基本原语”,并且具有相当复杂的gas成本计算方案。更好的选择是(i)将bigints替换为ADD,MUL和MOD作为预编译,并将MODEXP替换为调用这些预编译的代码实现,或者(ii)将EVM384扩展为更多大小(256、384,、512、768、1024…8192)
原文链接v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
Normal
0
false
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:\"\";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:\"Times New Roman\",\"serif\";
mso-font-kerning:1.0pt;}
基于账户的比特币和以太坊链上指标介绍
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:\"\";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:\"Times New Roman\",\"serif\";
mso-font-kerning:1.0pt;}
可能值得删除的EVM功能列表
—-
编译者/作者:灰狼
玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。