区块链研究实验室|停止使用Solidity的transfer()函数( 五 )
仍然是原始金额 , 因此将再次传输 。 这可以根据需要重复多次以消耗智能合约 。
检查 - 效果 - 交互模式的想法是确保所有交互(外部调用)最终发生 。 上述代码的典型修复方法如下:
请注意 , 在此代码中 , 余额在传输之前被清零 , 因此尝试对withdraw()进行可重入调用将不会使攻击者受益 。
使用Reentrancy 保护
防止重入的另一种方法是明确检查和拒绝此类调用 。 这是一个简单版本的reentrancy 保护 , 你可以看到这个想法:
使用此代码 , 如果尝试重入调用 , 第7行上的require将拒绝它 , 因为lock仍设置为true 。
在OpenZeppelin的ReentrancyGuard合同中可以找到一个更复杂、更省gas的版本 。 如果从ReentrancyGuard继承 , 则只需使用nonReentrant修饰函数以防止重入 。
请注意 , 此方法仅在显式将其应用于所有正确的函数时才保护您 。 由于需要在储存中保持一定的价值 , 这也增加了gas成本 。
推荐阅读
- gta三部曲|梦幻西游:129级五开分析师,研究抓鬼任务最优化投入,不浪费一分钱
- 电子竞技|S12或迎来双败制?Riot全球电竞负责人发话:会去仔细研究!
- 世界弹射物语|皇室战争:职业选手研究的英雄卡组,要论机动性,黄金圣骑YYDS
- 新世界|游戏推出一个多月就在研究合服,《新世界》如今情况如何?
- fly|Fly让AG得重新研究对策,终结ES八连胜!留在S组只差AG这一步
- 弈星|职业赛场八连跪,弈星已经被研究透了?这英雄的强度到底如何?
- 原神|原神成为中国文化敲门砖,这群老外甚至因北斗研究起了国产导航
- 鲁班|王者荣耀:将王研究出鲁班发育秘诀,网友看后纷纷点赞!
- 青钢影|《地下城与勇士》:玩这个游戏,要花时间研究一下活动和成长路线
- 手机游戏|哈利波特手游:虎牙四个四深入研究,配置斯内普卡组,只为榜一