帖子
分享您的知识。
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
分享
评论
答案
1Aug 11 2024, 15:15
SEI(检查、效果、交互)是 Solidity 的最佳实践之一. 它描述了代码的结构顺序,以避免意外行为或恶意执行.
检查将实施一些检查require
以确保函数中的参数正确无误. 您的_offer()
函数中没有任何内容,但您可以在函数的require(balance >= amount);
开头添加(例如,不必要),以确保用户的支出不会超过其拥有的金额.
效果基本上是更改合约的状态变量,以适应您现在想要的状态. 这是一条线balance -= amount;
,减少了用户的余额.
交互是对其他合约/地址的调用,可能会触发一些未知代码(例如,当您call
汇款时,它可能会触发智能合约调用您的receive()
函数的函数).
因为你在这段代码中遵循了这个规则,所以不可能再进入.
0
评论
你知道答案吗?
请登录并分享。
Solidity is an object-oriented, high-level language for implementing smart contracts. It is a curly-bracket language designed to target the Ethereum Virtual Machine (EVM).
35帖子43答案
热门帖子