DAO,英文全称是Decentralized Autonomous Organization ,去中心化自治组织,代码即法律。

在The DAO项目中,发行代币,以太币可以换取一定数量的代币。代币越多的人投票权重越大,项目资金的用途需要代币持有人投票决定,相关的提议由智能合约支撑。如果你觉得这个投资不符合你的预期你可以执行拆分出去,经过七天的拆分期,期间其他用户可以加入这个拆分。拆分之后在过28天的锁定期,锁定期一过你就可以提现了。

The DAO则是区块链公司Slock.it发起的一个众筹项目2015。1个月就筹集到1.5亿

重入攻击,一下是代码,从代码上可以看到,代码先把钱转给了个人然后再把thedao里面用户的钱清零。问题来了如果我在执行在清零的时候报错不让他执行清零,是不是我可以一直给自己转钱呢?

//totalSupply:当前代币总量
//rewardAccount:奖励账户,用于管理奖励的账户,奖励将分配给该 DAO 的 DAO 代币持有者
//paidOut:已支付到某个地址的奖励金额(以wei为单位)以太币
function splitDAO(uint _proposalID,address _newCurator) noEther onlyTokenholders returns (bool _success) {.........// Burn DAO TokensTransfer(msg.sender, 0, balances[msg.sender]);//把用户账户代币转给0,也就是销毁代币withdrawRewardFor(msg.sender); // be nice, and get his rewards;将你拥有的代币连同奖励一起给到你的新账户totalSupply -= balances[msg.sender];//将合约账户中的钱减少balances[msg.sender] = 0;//将合约账户中该用户金额置0paidOut[msg.sender] = 0;return true;
}
function withdrawRewardFor(address _account) noEther internal returns (bool _success) {if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account])throw;uint reward =(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account];if (!rewardAccount.payOut(_account, reward))//转账到_account这个账户,同时这里会调用fallback函数throw;paidOut[_account] += reward;return true;
}

其实在被黑客攻击之前就有人发现这个里面的漏洞,但是Thedao社区还没有来的急处理

withdrawRewardFor调用过程最后转账的时候会调用fallback函数,黑客利用这个fallback函数再次调用splitDAO函数,就在这无限循环嵌套,永远没有办法将账户置0,黑客在程序嵌套流程中已经把账上的钱转走了,想追也追不回来了。这时就算黑客写了跳出循环的规则也没有用了。

如此熟悉The DAO代码与机制的人,全世界或许不超过100个。黑客利用这两个漏洞,进行了两百多次攻击,总共盗走了360万的以太坊,超过了该项目筹集的以太坊总数目的三分之一。

幸好有28天的锁定期,这就有了操作的空间了。thedao意识到赶紧把剩下的钱转走不能再被盗了,问题来了!怎么转走?合约里面没有写啊,又不能改合约(去中心化无法修改合约,或者说极其困难修改合约),只能用黑客的方式把剩下的钱转到一个安全的账户。到现在应该算是及时止损了吧。

这时以太坊社区闹翻了天了,一部分人觉得这个太严重了对以太坊可以说是一个重创,投资者损失太严重了,事实也证明以太坊市值也在该事件的影响下不断下跌,他们认为必须把黑客手里的钱还给投资者。另一部分人觉的黑客有没有犯法只是利用你们智能合约里面的漏洞,你不是说的代码即法律,退一万步将你THE dao只是以太坊众多合约里面的一个很普通的合约犯得着为他这样干吗!这不是自毁信用吗?说什么去中心化,说什么无法篡改,你们现在所做的就是强盗强行把别人的钱转走,你们已经背离了以太坊的初衷了。

不过玩归玩闹归闹别把Money开玩笑,以太坊还是做出了这个艰难的决定--分叉(软分叉)。以太坊升级了代码,代码规定所有有关这个黑客账户转账交易都不允许写到区块链中。因为是个软分叉以太坊中绝大部分人都把软件更新了。(软分叉:升级后的程序认为老程序执行的交易不合法,未升级的程序认为升级后的程序所执行的交易同样是合法的)

大家都以为这个事情就告一段落了,但是情况又有了新变化,以太坊出现了大量的关于黑客账户的转账交易,很多挖矿的节点执行这样的交易之后没有汽油费得,旷工发现这样下去吃力不讨好啊,很多节点由于不堪重负就回退了。现在离28天的锁定期没有几天了情况已经非常紧急了。

以太坊社区也没有很好的办法了只能硬分叉,然后就在社区里面举行投票,最后投票结果是决定硬分叉。将黑客所有的以太币强行转到一个特殊的合约账户,这个账户只有一个功能“退钱”,大多数节点都在192w个区块的时候执行这样的“非法的交易”。但是以太坊社区质疑的声音还是一直存在,有人说投票不能代表所有还有好多人没有参与投票,这样非法的交易已经违反了我们建立以太坊的初衷了,这就是强盗行径,别人把就算钱存在银行被扣留了我还可以去法院辩解,现在就你们投票就把我的钱给强行转走了。(硬分叉:未升级的程序认为升级后的程序所执行的交易是不合法的)

过了没多久有就发现还有人在沿着老版本在挖矿他们觉的自己才是正统是纯粹的。再后来有的交易所也在慢慢接受经典以太坊。以太坊社区发现硬分叉的后果已经无法挽回了但是分成两条链会出现双花攻击,于是将代码升级添加版本号,老版本成为经典以太坊ETC

自此以后以太坊社区再也没有为任何一个漏洞合约分叉过了,后果太严重了

The DAO事件始末相关推荐

  1. 是啥意思_227大团结是什么梗啥意思 微博227大团结事件始末介绍

    相信大家这两天在微博上经常能够看到一个关于"227大团结"的话题吧,但是很多人都不知道227大团结是什么梗啥意思,下面就和小编一起来看看. 微博227大团结事件始末介绍 其实这个关 ...

  2. 以太坊再爆高危漏洞!黑客增发ATN 1100万枚token事件始末

    以太坊再爆高危漏洞!黑客增发ATN 1100万枚token事件始末 编者按:5月11日,ATN Token遭受恶意攻击,攻击者利用DSAuth库与ERC223搭配使用具有的混合漏洞,窃取了ATN的所有 ...

  3. B 站崩了,受害程序员聊聊(非吃瓜B 站事件始末分析 + 防治技术分享)

    非吃瓜,B 站事件始末分析 + 防治技术分享 昨天小破站崩了的事情相信很多朋友都听说了. 这要是搁以前,不爱吃瓜的我根本不会去关注这种事,崩了就崩了呗,反正天塌下来有程序员大佬们扛着,很快就会好的. ...

  4. 网络热传App鉴定 |「得物」疑私删用户视频?从技术角度还原事件始末

    声明:本文更注重于原理知识的普及,因此文中不会有大量实际代码的展示,如果想从代码层面上了解「应用存储分区」的内容,欢迎阅读我两年前写过的技术文章<Android 10 应用分区存储适配实践> ...

  5. 复盘Uniswap赠款事件始末:获利千万美元的DeFi教育基金是个什么组织? |链捕手...

    7月13日,一个名为DeFi Education Fund(DeFi教育基金)的组织抛售 50 万枚UNI获利超千万美元,引起加密社区的广泛讨论与关注.此前,该组织从Uniswap金库获得100万枚U ...

  6. 内部黑客讲述:Twitter 史上最大规模攻击事件始末!

    来源 | 新浪科技(ID:techsina) 编译 | 匀琳 头图 | CSDN付费下载自视觉中国 近日,媒体采访了数名参与本周Twitter攻击事件的人员,揭晓黑客对比特币的贪婪如何一步步失控最终导 ...

  7. 2010 年 360 盗取用户密码事件始末

    2010年最后一天,普通用户可以在google网站上搜索指定关键字,可以搜索到大量中国互联网用户使用互联网的隐私记录,甚至包括用户登陆网站或邮箱的用户名.密码等. 事件概述 12月31日,金山召开发布 ...

  8. 中兴程序员跳楼事件始末解读

    近日,一位网友发布了一篇文章称,她老公欧某新或因公司辞退引发了纠纷,于12月10日在中兴通信跳楼身亡.经现场勘查,警方初步认定为高坠死亡,排除他杀. 一位世界500强公司的资深员工,就这样跳楼,离开了 ...

  9. 还原迅雷“病毒事件”始末

    针对迅雷软件内置传播病毒的传闻,迅雷在深圳召开发布会,进行了官方回复.迅雷官方人士称,此次事件是由于迅雷旗下子公司迅雷看看某位部门经理,未请示公司,私下指示技术人员进行,已经影响了上千万用户,但是推广 ...

  10. OPPO哲库事件 “ 始末 ” ! 集体打哑谜?

    1►OPPO哲库解散 2019 年,美国商务部以"科技网络安全"为由,将华为公司及其70家附属公司列入出口管制"实体名单".与此同时,OPPO 创始人兼 CEO ...

最新文章

  1. keras回调监控函数
  2. 中表名字必须大写吗_小白也能学会的C-枯燥且必须的语法
  3. 大数据 互联网架构阶段 Redis
  4. 排序千万级数据_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...
  5. 几时几分几秒怎么写_泼尿 涂油漆 写威胁语 业主莫名被骚扰
  6. 解决数据分权访问----SQL2016 行级安全解决方案
  7. php批量下载TXT中的URL,需求是这样,再不改变目录结构的前提下,通过URL,批量下载文件,我已经写好了一点儿了...
  8. Linux 下使用Postgre中的命令,要使用postgres这个用户
  9. (二)Latex编译与xelatex编译
  10. Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level. java.lang.Il
  11. 集合-HashTable
  12. 赵鼎新 | 中国大一统的历史根源
  13. 程序员成为“备胎”的5年,我一直在等...(外包——字节跳动)
  14. 曲面积分的投影法_三重积分的投影法与截面法
  15. 在app中关闭第三方app
  16. java的学习????
  17. android 高德地图显示标题,android学习之高德地图添加标记
  18. mysql 数据精确度_mysql数据精度丢失问题深入探讨
  19. 知然算法【2】灰色模型GM(1,1)
  20. iOS图案解锁(九宫格)

热门文章

  1. Google高级搜索技巧之高级语法查询指令
  2. 极客空间-MySQL实战45天-第一天
  3. 又一名程序员猝死,送给996的程序员一份身体健康指南电子书!
  4. 坚果pro3刷miui_锤子科技坚果Pro 3(12GB/256GB/全网通)手机卡怎么办?
  5. 现在学生物出路真有那么不济吗?(@Mengjie Chen)
  6. java 农历公历转换_java 版本 农历 公历 转换
  7. 写一篇靠谱的方案设计文档-之实践问题清单
  8. 普渡大学计算机科学竞争激烈,Top12普渡大学计算机博士全奖录取:同时收获Top博士和藤校耶鲁硕士录取!她该怎么选择?...
  9. 电脑键盘快捷键和组合键功能使用大全
  10. 在线CUR格式转换器