Solidity.

帖子

分享您的知识。

Serpent0x.
May 31, 2024
讨论

重入漏洞

大家好,我注意到优惠函数使用.call {value: amount} (“”) 方法将以太币发送到收件人的地址.

谁能深入了解该功能是否确实容易受到重入的影响,并提出任何最佳做法或修改以降低此类风险吗?

function _offer(address to, uint256 amount) internal {

      balance -= amount;

      (bool success, ) = to.call{value: amount}("");
      if (!success) {
          revert TransferFailed(address(0), address(this), to, amount);
      }
  }
  • Smart Contract
  • Solidity
  • Solidity Compiler
0
1
分享
评论
.

答案

1
0x0304...a958.
Aug 11 2024, 15:15

SEI(检查、效果、交互)是 Solidity 的最佳实践之一. 它描述了代码的结构顺序,以避免意外行为或恶意执行.

检查将实施一些检查require以确保函数中的参数正确无误. 您的_offer()函数中没有任何内容,但您可以在函数的require(balance >= amount);开头添加(例如,不必要),以确保用户的支出不会超过其拥有的金额.

效果基本上是更改合约的状态变量,以适应您现在想要的状态. 这是一条线balance -= amount;,减少了用户的余额.

交互是对其他合约/地址的调用,可能会触发一些未知代码(例如,当您call汇款时,它可能会触发智能合约调用您的receive()函数的函数).

因为你在这段代码中遵循了这个规则,所以不可能再进入.

0
评论
.

你知道答案吗?

请登录并分享。

我们使用 cookie 确保您在我们的网站上获得最佳体验。
更多信息