区块链学堂——道可道,非常道,theDAO攻击带来的思考

区块链学堂第13篇

The DAO项目的由来

去中心化自治组织DAO,是随着区块链技术发展流行起来的一个概念,比特币和以太坊的大行其道,使得很多开发者、企业、组织机构都开始尝试在不同的行业,建立垂直领域的DAO系统,其中一个叫Slock.it的公司发起了一个众筹项目,后来该项目被称做The DAO。该项目在发起之初,计划通过物联网和区块链技术,提供智能锁等设备,把人们生活中的租赁关系用去中心化的方式建立起来,比如租房、租车、租雨伞等。

最开始,TheDAO的几个创始人,通过以太坊开发了智能合约来筹集资金,并且按照事先的规则进行运作,计划在取得盈利后,系统能按照智能合约里的约定分配利润给众筹参与者,参与者也可以通过theDAO系统监控自己投入的资金去向、运行情况,TheDAO团队通过系统实时反馈项目的一切进展、面临的问题、和最新成果,整个过程,都无需人工干预,公开、透明,看起来一切都很美好,这确实是一项伟大的创新和发明。

后来,随着TheDAO项目的深入展开,Slock.it团队发现,这个智能合约的框架不仅可以给theDAO项目使用,还可以给其它类似的DAO项目重用。于是他们决定创建The DAO (The Mother of all DAOs ——DAO之母)。

飞来横祸

不幸的是,在2016年6月17日,这个被号称区块链业界最大的众筹项目TheDAO(被攻击前 拥有1亿美元左右资产)遭到攻击,导致300多万以太币资产被分离出TheDAO 资产池。消息迅速扩散,TheDAO项目、以太坊、区块链等技术都受到巨大的质疑,在区块链历史上留下了沉重一笔。由于其编写的智能合约存在着重大缺陷,TheDAO编写的智能合约中有一个splitDAO函数,攻击者通过此函数中的漏洞重复利用自己的DAO资产来不断从TheDAO项目的资产池中分离DAO资产给自己。而由于theDAO项目量个完全去中心化自治组织系统,智能合约一经发布,则无法更改的特性,导致theDAO团队也束手无策。

解决方案

一石激起千层浪,一夜之间,不仅TheDAO项目的安全性倍受质疑,因其基于以太坊开发,以太坊的声誉和发展也受到了前所未有的质疑和挑战 ,就在TheDAO团队如坐针毡的时候,以太坊的核心团队伸出了援手,阻止了黑客的攻击,因为黑客控制的以太币(转移的资产)要在27天后才可以拿走,给以太坊团队留下了足够的缓冲时间来寻求最佳解决方案。

最后,他们决定先采用软分叉(Soft Fork)技术,锁定TheDAO及其子DAO账号,不允许发生任何交易,以便冻结黑客转移的以太币,使其无法出售获利,然后,在软分叉的基础上,实施硬分叉(Hard Fork),把黑客控制的以太币转到一个新的智能合约当中,退回给参与众筹的投资者。遗憾的是,而该方案的实施涉及到修改以太坊协议规则,相当于直接修改了黑客(用户)的账户余额,这违背了区块链数据不可篡改的设计初衷。在行业内,引起了巨大的争议。

道可道,非常道

虽然以太坊团队的出手相助,帮theDAO团队挽回了众筹者的损失,但是开发者、研究员、投资人、律师、分析师等各方人士中,仍争辩不休,支持者认为,不能让黑客的阴谋得逞,修改协议规则是替天行道,是维护正义之“道”;而反对者则认为,以太坊以去中心化,安全,不可篡改作为“卖点”,却在某些应用出现严重漏洞的时候,擅自修改底层规则,严重违背了其安全、数据不可篡改的鲜明特性,损害了其公信力和公平性,这恰恰是失道之举。到底是维护用户的利益重要,还是维护以太坊平台的公正性重要,众说纷云,终无定论,只能留给后人评说。

总结和思考

1、中心化和去中心化是一把双刃剑;

2、现阶段,基于区块链去中心化系统,标榜的安全特性仍需时间来检验;

3、不能完成自我疗伤,自救(容错、修复错误)的去中心化自治组织DAO,不是真正的自治;

4、智能合约应该出台一套安全标准,以及自动化验证规范,给安全加码;

5、成长和蜕变都无法逃避挫折和魔难,理性看待theDAO攻击事件的恶性影响,它不仅促进了以太坊、区块链等技术的发展进步以及人们的深度思考,同时给所有人敲响了警钟,对技术需保持敬畏之心,安全没有边界,永远只是相对的,潜在的危险却无处不在。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1091
来自专栏跟着阿笨一起玩NET

GB2312转换成UTF-8与utf_8转换成GB2312

1691
来自专栏张善友的专栏

Using sqlite with .NET

The other day I found that there is a .NET wrapper for sqlite. sqlite is a very ...

2208
来自专栏海说

Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)

Java应用中常见的JDBC连接字符串 Java应用中连接数据库是不可或缺的,于是便整理一些可能用到的JDBC的jar包及其相匹配的URL,以备日后查阅。 1)...

2680
来自专栏闻道于事

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABL...

5415
来自专栏成长道路

JDBC动态SQL语句连接orcale数据库的工具类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.P...

2430
来自专栏跟着阿笨一起玩NET

C#巧用Excel模版变成把Table打印出来

转载:http://blog.csdn.net/gwblue/article/details/38865525

1102
来自专栏跟着阿笨一起玩NET

去除DataTable中重复字段

               DataTable tbl = new DataTable();                 tbl.Columns.Add(...

721
来自专栏互联网开发者交流社区

WinForm之窗体应用程序

1733
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

2966

扫码关注云+社区