题图摄于温哥华Sunset Beach
本文是笔者关于The DAO事件的第三篇文章,之前并没想过可以写成三部曲。前两篇《道or悼》、《DAO可盗》介绍了TheDAO项目的成立背景和运作原理,以及资金被黑客控制后,以太坊社区准备通过软硬兼施的分叉技术来夺回黑客盗走的以太币。同时,社区里也掀起了是否要坚持去中心化原则的大辩论。本篇和大家分享一下The DAO项目的大结局。
为了解决The DAO大量资金被盗的问题,尽管争议颇多,以太坊官方还是推出了针对The DAO的软分叉(soft fork)版本Geth v1.4.8,该版本增加了一些规则以锁定黑客控制的以太币,以便有更多时间留给社区去解决The DAO的问题。在六月底的数据显示,绝大多数矿工都升级了这个版本的软件,眼看着软分叉就要大功告成了。
也许The DAO就是命运多舛,不知是否因为时间仓促,众多大牛编写出来的软分叉版本居然又有漏洞!这个漏洞比较明显,简单地说,每个以太坊上的交易,验证节点(矿工)都会检查是否与The DAO智能合约及其子DAO的地址相关。如果是则拒绝这个交易,从而锁定The DAO(包括黑客在内)的所有资金。这个逻辑实现本身并没有问题,但是却没有收取执行交易的燃料费(gas)。当初以太坊设计的gas有两个作用:支付矿工的交易费和增加潜在攻击者的成本。取消交易燃料费后,导致了非常严重的后果:以太坊网络成为了DoS (Denial of Service)的攻击目标(如同我国高速公路在法定节假日免费通行造成大塞车的情况一样),攻击者可以零成本地发起大量攻击,使得整个网络彻底瘫痪。因为这个漏洞,各个节点回滚了软件版本,软分叉方案失败!
以太坊官方博客警告软分叉DOS风险
形势陡然严峻起来,欲追回黑客盗走的资金,既然软的不管用,只有走硬分叉(hard fork)这条华山路了。还有两周多的时间,黑客就可以转移走控制的资金,因此要在这之前完成硬分叉版本的开和发测试,任务充满风险和挑战。
这边开发硬分叉版本暂且不表,另一边社区关于硬分叉和去中心化的争论仍在继续,众说纷纭,莫衷一是。为了公平起见,以太坊就硬分叉草案发起了非正式的投票,采用了独特的区块链投票模式,笔者带大家领略一下。以太币持有人投赞成票的可把以太币发往一个地址,投反对票的可以发向另一个地址,无论发向哪个地址,上面的智能合约会自动把以太币如数返还(扣除极少执行费用)。投票的截止时间是第1894000区块(区块链特有的计时方式),投票结束后,从区块链账本中分别统计发往两个地址的以太币数,即可得到投票结果。值得一提的是,这个投票程序完全由中国以太坊社区的工程师开发,显示了国内以太坊的技术力量影响力越来越大。对技术感兴趣的朋友,可以从这里查看源代码:
https://github.com/consenlabs/carbonvote
从carbonvote网站的投票结果显示,共有450万左右的以太币参与了投票,其中87%的票数支持硬分叉方案,由此看来,社区多数人还是赞成采用硬分叉来解决The DAO的问题,这个艰难的决定终于有了个合理的说法。
carbonvote网站的投票结果
话说这边投票结果水落石出,那边硬分叉的程序也瓜熟蒂落了,万事具备,只待硬分叉生效了。根据事前的调查,大约90%的矿工会支持这个硬分叉升级。程序中预设的切换时间是第1920000个区块,大概是北京时间7月20日晚9点20分左右。当晚,区块一个一个悄无声息地生成,以太坊社区都在屏住呼吸紧张地等待着历史时刻来临。终于,1920000区块如期到来,硬分叉切换成功了!在这个用代码定制的区块里面,The DAO合约里的所有资金,包括被黑客控制的资金,约1200万以太币,全部都“嗖”地一下转移到了一个新的智能合约中,该合约只有一个功能:退回The DAO众筹参与人的以太币。众筹人只要调用withDraw()方法,就可用DAO币换回以太币。完整的提币指南可以参考以太坊爱好者网站:
http://ethfans.org/topics/524
The DAO退币合同,还有200多万以太币未被领取
至此,史上最大众筹项目The DAO “完美”谢幕,所有筹集的资金将退还给众筹人,The DAO也就此解散。从万众瞩目的众筹开始,到受到攻击资金泄漏,再到争论中软硬分叉,最后解散退回以太币,整个事件发生在短短3个月的时间里,如同流星一样划过,留下众多的思考和启示。
以太坊历史性分叉瞬间
The DAO是人类尝试完全自治组织的一次艰难试验,因在技术上存在缺陷,理念上和现行的政治、经济、道德、法律等体系不能完全匹配,以致失败告终。The DAO也给了我们很多可借鉴的经验,例如智能合约漏洞的处理,代码自治和人类监管之间的平衡等等。作为人类追求公平和公正的理想,DAO(去中心化自治组织)的精神并没有终结,The DAO项目今天的失败或许是明天DAO成功之母。对众多区块链的技术爱好者来说,事件的每一步演变,都蕴含了无数的技术看点,从中也一定收获良多。更多的技术细节,留待日后再和大家分享。
硬分叉后,旧链的算力并没消失,一度增强到920GH/s
后记:
The DAO事件三部曲就此落幕了,然而,The DAO的“后遗症”却仍然萦绕在以太坊中,情节也更加跌宕起伏。且说硬分叉过之后,The DAO资金追回,以太坊也该浴火重生了。不料,本应自然消失的以太坊旧链却垂而不死,而且居然活了过来,以太坊的网络一分为二,出现了具有相同历史账本的新旧两条链,如同宇宙瞬间分裂成两个一模一样的平行世界,事件在两个世界里重复地发生着。例如,一块钱突然变成了两块钱来用,在两个世界里很多奇妙的事情出现了。欲知后事如何,请听下回分解。(未完待续)
欢迎文后留言和讨论!欢迎关注亨利笔记。