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

  • 它可以用于攻击 , 通过填充区块与定价过低的操作 , 导致区块处理时间过长 。

  • 定价过低的操作码会导致区块gas限值倾斜 , 有时区块气体快速完成 , 但其他类似gas使用的块体缓慢完成 。

  • 如果操作平衡 , 我们可以最大限度地提高区块气限 , 并有一个更稳定的处理时间 。

sload历来定价过低 , 而eip 1884纠正了这一点 。

智能合约不能依赖气体成本

如果gas成本会发生变化 , 那么智能合约就不能依赖于任何特定的gas成本 。

任何使用transfer()或send()的智能合约都会通过转发固定gas数量2300来严格依赖gas成本 。

我们的建议是停止在代码中使用transfer()和send() , 改为使用call():

这两份智能合约除了gas的传输数量不同 , 其余都是相等的

推荐阅读