[FAQ] Solidity 并发执行 ? 重入攻击 ?


 

Solidity 实现的合约中,函数操作都是原子操作,旷工本地执行,取得共识后发布到区块链上。

实际发布到区块链上的不存在并发,全节点同步状态到本地。

 

Solidity 中有三种方式进行转账,address.transfer、address.send、address.call。

Solidity 重入攻击是当我们用 address.call 的形式进行转账时,如果合约制定者没有指定 fallback 函数,

有恶意的外部合约 可能会 调用当前合约的这个转账函数时 自定义一个 fallback,在 fallback 中再次转账,

这样就陷入了不断取款的循环,直到我们的合约没有余额、Gas 不够、调用栈超出。

这种情况下将陷入灾难,著名案例事件是 TheDAO。

 

有几种处理方式我们可以做到更安全,第一就是在转账前,把取款者能取的余额设为 0,第二就是使用 transfer 的转账方式。

 

Link:https://www.cnblogs.com/farwish/p/12567468.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM