传输金额到任何地址,始终显示重入漏洞警告。如何避免这一警告?
function completeChallenge(address _challengerAddress,address _challengeAddress,uint _index) internal returns(bool) {
_challengerAddress.transfer(safeMul(challengeList[_challengerAddress][_challengeAddress][_index].challengeChargeAmountWei,2));
return true;
}
发布于 2019-08-23 09:20:45
应该在调用transfer方法之前更新状态。因为如果您不更新状态,那么如果接收方是智能契约,它可以一次又一次地调用您的合同方法,直到您的合同余额变为零为止。
发布于 2017-10-05 22:33:20
无法真实地再现警告。你用的是什么版本?pragma solidity ^0.4.17;是最新版本。
您可能需要尝试分别分配transferAmount。这至少将从safeMul方法调用中删除SafeMath的.transfer代码。
function completeChallenge(address _challengerAddress,address _challengeAddress,uint _index) internal returns(bool) {
uint transferAmount = safeMul(challengeList[_challengerAddress][_challengeAddress][_index].challengeChargeAmountWei, 2);
_challengerAddress.transfer(transferAmount);
return true;
}希望这能帮上忙。
https://ethereum.stackexchange.com/questions/27801
复制相似问题