区块链研究实验室|停止使用Solidity的transfer()函数( 四 )
可重入性?(Reentrancy )
希望您在看到上述代码时首先考虑过这个问题 。 引入transfer()和send()的全部原因是为了解决DAO的黑客攻击的原因 。 其思想是2300 gas足以发出一个日志条目 , 但不足以发出一个可重入调用 , 然后修改存储 。
不过 , 请记住 , gas成本可能会发生变化 , 这意味着无论如何 , 这是解决重入问题的糟糕方法 。 今年早些时候 , 君士坦丁堡叉子被推迟了 , 因为降低gas成本导致先前安全的代码无法再进入 。
如果我们不再使用transfer()和send() , 我们将不得不以更健壮的方式防止重入 。 幸运的是 , 这个问题有很好的解决方案 。
检查 - 效果 - 交互模式
消除重入错误的最简单方法是使用检查-效果-交互模式 。 这是一个可重入错误的典型例子:
如果msg.sender是智能合约 , 它在第6行有机会在第7行发生之前再次调用withdraw() 。 在第二次调用中 , balanceOf [msg.sender
推荐阅读
- gta三部曲|梦幻西游:129级五开分析师,研究抓鬼任务最优化投入,不浪费一分钱
- 电子竞技|S12或迎来双败制?Riot全球电竞负责人发话:会去仔细研究!
- 世界弹射物语|皇室战争:职业选手研究的英雄卡组,要论机动性,黄金圣骑YYDS
- 新世界|游戏推出一个多月就在研究合服,《新世界》如今情况如何?
- fly|Fly让AG得重新研究对策,终结ES八连胜!留在S组只差AG这一步
- 弈星|职业赛场八连跪,弈星已经被研究透了?这英雄的强度到底如何?
- 原神|原神成为中国文化敲门砖,这群老外甚至因北斗研究起了国产导航
- 鲁班|王者荣耀:将王研究出鲁班发育秘诀,网友看后纷纷点赞!
- 青钢影|《地下城与勇士》:玩这个游戏,要花时间研究一下活动和成长路线
- 手机游戏|哈利波特手游:虎牙四个四深入研究,配置斯内普卡组,只为榜一