区块链研究实验室|停止使用Solidity的transfer()函数( 二 )

以太坊看起来EIP 1884正在伊斯坦布尔硬叉前进 。 这一变化增加了sload操作的gas成本 , 因此打破了一些现有的智能合约 。

这些合约将破裂 , 因为它们的fallback函数过去消耗的gas少于2300 , 现在它们将消耗更多 。 为什么2300gas是重要的? 如果通过Solidity的transfer()或send()方法调用合约的fallback函数 , 则它是合约的fallback函数 。

自从transfer()引入以来 , 它通常被安全社区推荐 , 因为它有助于防止重入攻击 。 在gas成本不变的假设下 , 这一指导意见是有意义的 , 但事实证明这一假设是错误的 。 我们现在建议避免transfer()和send() 。

气体成本可以也将改变

evm支持的每个操作码都有一个相关的gas成本 。 例如 , sload从存储器中读取一个单词 , 目前(但不是很长时间)需要200气体 。 gas的价格不是随意的 。 它们旨在反映构成以太坊的节点上每个操作所消耗的底层资源 。

EIP的动机部分:

操作价格与资源消耗(CPU时间、内存等)之间的不平衡有几个缺点:

推荐阅读