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

Vyper如何?

Vyper的send()函数使用与Solidity的transfer()相同的硬编码gas , 因此也应避免使用 。 你可以改用raw_call 。

Vyper内置了一个@nonreentrant(<unique_key>)装饰器 , 其工作方式与OpenZeppelin的ReentrancyGuard类似.

总结

  1. 在假定gas成本不变的情况下 , 推荐transfer()是有意义的 。
  2. gas成本并不恒定 。 智能合同对这个事实应该是健全的 。 Solidity的transfer()和send()使用硬编码的gas量 。
  3. 应该避免这些方法 。 请改用.call.value(...)(“”) 。
  4. 这就带来了重新进入的风险 。 请确保使用可用于防止重入漏洞的健壮方法之一 。
  5. vyper的send()也有同样的问题 。

推荐阅读