泄露资金的合约

合约有多种导致资金泄露的方式。例如,合约可能将资金转给非指定的收款人;或者将超额资金转给合法收款人等。

以下展示了对DAO合约的攻击,该攻击者借此盗取了6000万美元。大家可以观察到,该合约有一个状态变量shares。将状态变量视为可由任何函数访问的全局变量。

  • shares维护用户地址和相应份额之间的映射。
  • 股东可以调用withdraw()来提取他们的份额。
contract UnsafeContract1{// Mapping of address and sharemapping(address => uint) shares;// Withdraw a sharefunction withdraw() public {if (msg.sender.call.value(shares[msg.sender])())shares[msg.sender] = 0;}}

如果用户在链外调用withdraw(),那么UnsafeContract1将以良性方式运行。

在这种情况下,合约发送一条消息将份额通过msg.sender.call.value()转给用户,然后通过更新下一行中的shares将份额设置为0。

攻击发生的情况是,收款人是一个合约而非用户。当合约调用方调用withdraw()时,被调用者执行msg.sender.call.value()并将执行控制权传递给调用者即合约,在这种情况下可以回调到withdraw()。

请注意,在withdraw()中,只有在if(msg.sender.call.value())终止后,调用方的shares才会更新为0。当恶意合约回调withdraw()时,它实际上是通过强制它停留在if()指令,来防止程序指针更新shares。这允许恶意合约多次提款,直到其燃料费被消耗殆尽。

如果收款人是用户而非合约,那么他将无法回调合约,因此执行将按预期结束。

这种攻击也被称为重入攻击(re-entrancy attack)。

作者:Zilliqa爱好者中文社区
链接:https://www.jianshu.com/p/5379e44280f5
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

区块链 智能合约安全 重入攻击(re-entrancy attack)DAO incident相关推荐

  1. [区块链安全-Ethernaut]区块链智能合约安全实战-已完结

    [区块链安全-Ethernaut]区块链智能合约安全实战-已完结 准备 0. Hello Ethernaut 准备工作 创建实例并分析 合约交互 总结 1. Fallback 创建实例并分析 合约交互 ...

  2. android区块链 钱包_区块链研究实验室|从Android调用区块链智能合约

    本教程将展示如何直接从Android开发环境-Android Studio中调用智能合约. 环境要求 我们将使用Tezos区块链.为了使我们的Android java代码与现有的.部署的智能合约交互, ...

  3. 什么是智能合约 区块链_什么是区块链智能合约?

    什么是智能合约 区块链 关于区块链智能合约的第一件事是它们不是智能合约,或者不是区块链上的合约. 实际上,它们的名字是奇异的. 1 ,让我们将按照相反的顺序这些问题,我们应该搞清楚一个聪明的合同实际上 ...

  4. 论述《区块链智能合约的合同效力认定》去中心化金融的钞能力赛道

    | 没有喧嚣,没有问候的"沉默",请安静听完这段征途故事! 摘要 智能合约是自动执行合同条款的代码协议,其以代码替代传统人为执行合同,本质上是运用代码"编译"传 ...

  5. 区块链 智能合约应用

    随着区块链技术的普及与应用,智能合约作为区块链技术的底层技术之一,不论是在学术界还是产业界都引起了极大的关注.智能合约之所以被普遍关注,毛球科技技术研究部认为,主要归功于智能合约的去中心化.去信任.自 ...

  6. 区块链智能合约入门:Hello world(2)

    这次的基础合约Hello world 有所升级,增加了updateMessage,让你可以随时更新自己想说的话. 其实在区块链智能合约入门:Hello world(1)这篇文章里已经介绍过,Hello ...

  7. 区块链 智能合约 简介

    根据谷歌趋势数据显示,目前,程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首,随着区块链技术的发展,相信日后智能合约将会与我们的生活密切相关,今天就为大家介绍一下什么是智能合约. ...

  8. 智能合约重构社会契约(11)天德区块链智能合约系统

    智能合约是可以运行在区块链上的合约代码,是一种运行在区块链之上的电子协议,它允许在没有第三方的情况下进行可信执行. 1. 设计原则 智能合约数据来源于链上. 智能合约的输人是从区块链的数据库里出来的. ...

  9. 了区块链开放平台baas_区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务...

    区块链开放平台 BaaS 系统开发,区块链智能合约撰写服务 什么是区块链即服务? 区块链即服务是一种独特的经济模型,允许消费者使用基于云的服务来开发,使用和托管其区块链应用,功能和智能合约.  源中瑞 ...

  10. 区块链智能合约教材出版

    庆祝我们的区块链智能合约教材出版.感谢电子工业出版社的章海涛编辑和合著者华科软件学院的黄立群教授,华科计算机学院黄晓涛教授.购买链接在:https://detail.tmall.com/item.ht ...

最新文章

  1. 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
  2. mysql 主从 keepalived_一次mysql主从加keepalived配置搭建及切换演示
  3. 搞科研,从好好读论文开始:沈向洋带你读论文了
  4. OpenCV Lucas-Kanade光流计算的实例(附完整代码)
  5. shell脚本把昨天的txt打成tar包
  6. CentOS下安装jdk1.8.0_181
  7. 自动驾驶——2D高精度地图的生成
  8. wine linux 目录,wine的安装与microsoft office在linux上的运行
  9. Docker学习总结之docker入门(转自:Vikings翻译)
  10. EditDistance,求两个字符串最小编辑距离,动态规划
  11. Go:Unresolved dependency
  12. wps怎么链接html,wps怎么添加超链接 wps制作超链接的步骤教程
  13. 2020语义分割网络语义流:Semantic Flow for Fast and Accurate Scene Parsing
  14. 浅谈欧奈尔对利弗莫尔的继承和发扬
  15. 互联网思维之极致思维
  16. APP商店货币化的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. 水星怎么设置网速最快_水星mw300r怎么提高网速
  18. 爬取网易云音乐所有歌单信息
  19. 计算机科学概论(第12版)下载
  20. unity重定向_Unity 骨骼动画的运行时重定向

热门文章

  1. 黑苹果(1)为什么是黑苹果PPT?
  2. Qt的环境与工具、信号与槽
  3. 省选专练之后缀自动机zoj1729 Hidden Password
  4. 使用Async方法 Using Async Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-32.
  5. PL/SQL 包头和包体
  6. 哈佛商学院教授对毕业生讲
  7. VC学习笔记:状态栏
  8. 和别人老公上床后的感觉~
  9. 正态分布的前世今生(下)
  10. 部分网站为什么上不去_天机SEO:分析网站收录与排名的重要因素