首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免重入漏洞警告?

如何避免重入漏洞警告?
EN

Ethereum用户
提问于 2017-10-05 03:23:41
回答 2查看 397关注 0票数 3

传输金额到任何地址,始终显示重入漏洞警告。如何避免这一警告?

代码语言:javascript
复制
function completeChallenge(address _challengerAddress,address _challengeAddress,uint _index) internal returns(bool) {
   _challengerAddress.transfer(safeMul(challengeList[_challengerAddress][_challengeAddress][_index].challengeChargeAmountWei,2));
   return true;
}
EN

回答 2

Ethereum用户

发布于 2019-08-23 09:20:45

应该在调用transfer方法之前更新状态。因为如果您不更新状态,那么如果接收方是智能契约,它可以一次又一次地调用您的合同方法,直到您的合同余额变为零为止。

票数 1
EN

Ethereum用户

发布于 2017-10-05 22:33:20

无法真实地再现警告。你用的是什么版本?pragma solidity ^0.4.17;是最新版本。

您可能需要尝试分别分配transferAmount。这至少将从safeMul方法调用中删除SafeMath的.transfer代码。

代码语言:javascript
复制
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;
}

希望这能帮上忙。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/27801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档