-
The DAO事件
- 此事件导致了ETH的分裂。BTC实现了去中⼼化的货币,ETH实现了去中⼼化的合约,去中⼼化这么好,为什么不把所有东⻄都去中⼼化?DAO:
Decentralized Autonomous Organization在这样的背景下产⽣ - DAO这种⾃治组织建⽴在代码基础上,组织的规章制度写在代码中,通过区块链的共识协议来维护这种规章制度(2016年5⽉出现了⼀个致⼒于众筹投资的DAO,名字为The DAO,本质为运⾏在ETH上的⼀个智能合约)
- 如果想要参与,可以将以太币发给智能合约,换算成代币
- 具体投资哪个项⽬由代币数量决定,代币越多,投票权重越⼤
- 投资的收益按照合约中的规章制度分配
- 众筹速度⾮常快,这种⺠主制度在当时引起了⼴泛的讨论
- 但是只存活了3个⽉,问题在于投资者如何取回收益
- The DAO采⽤拆分的⽅式实现,
split DAO,这种⽅式不是单纯取回基⾦,⽽是建⽴⼦基⾦child DAO - 如果少部分⼈认为某个项⽬值得投资,但是⽆法获得⼤多数⼈认可,则他们可以通过拆分建⽴⼦基⾦的⽅式单独进⾏投资,拆分时⼿中的代币收回,换成相应的以太币,打到⼦基⾦中
- 这种拆分的理念⾮常⺠主,并不是少数服从多数,⽽是尊重少数⼈的权利
- 拆分之前有7天的辩论期,拆分之后有28天的锁定期
- 这28天的锁定期在后来给了以太坊社区补救时间
- 极端例⼦:单个⼈建⽴⼦基⾦,把⼦基⾦中的钱全部投给⾃⼰,这是取回投资和收益的唯⼀⽅式
- 拆分的理念没有问题,错在了split DAO的实现上:
- ⿊客利⽤漏洞实现了重⼊攻击,转⾛了DAO中5000w美元的以太币,差不多占了1/3
- 社区在讨论解决措施时分成了2派:
- ⼀⽅认为应该回滚交易,由于28天锁定期,⿊客⽆法⽴即把钱取⾛,应该在此采取补救措施,保障投资者的利益
- 开发团队认为应该补救,因为⾦额过⼤,too big to fail
- 另⼀⽅认为不应该采取补救措施,因为⿊客的⾏为没有违法,code is law
- 尤其不应该回滚交易,如果出了问题就回滚,怎么可以称为不可篡改
- 出问题的不是以太坊本身,⽽是运⾏的⼀个智能合约出了问题
- ⼀⽅认为应该回滚交易,由于28天锁定期,⿊客⽆法⽴即把钱取⾛,应该在此采取补救措施,保障投资者的利益
- 假如采取补救措施,怎么补救?
- 从⿊客攻击之前的区块进⾏分叉
- 这种补救措施导致上⾯的链中很多合法的交易也被回滚,进⼀步导致ETH乱套
- 要回滚必须精确定位,只能针对⿊客盗取以太币的交易,因此这种⽅式不可⾏
- 实际上,以太坊团队采⽤两步⾛的⽅式
- 锁定⿊客账户
- 升级软件,所有与The DAO有关的账户不能再发⽣交易
- 本质上增加了⼀条判断规则,软分叉
- 但是升级后的软件存在⼀个bug,不是安全漏洞,⽽是与汽油费相关
- 与The DAO有关的账户的交易,判断不能执⾏,但是没有收取汽油费,这导致被恶意攻击
DoS - 这导致很多矿⼯不断被攻击,只能回滚到以前的版本,因此这种软分叉的⽅案失败了
- 与The DAO有关的账户的交易,判断不能执⾏,但是没有收取汽油费,这导致被恶意攻击
- 升级软件,所有与The DAO有关的账户不能再发⽣交易
- 清退⿊客账户的钱
- 通过软件升级的⽅法,将The DAO账户上的所有资⾦强⾏转到⼀个新的智能合约,这个合约只有退钱的功能
- ⽤软件升级的⽅法强⾏记账,旧矿⼯是不会认可这些交易的,因为没有合法的签名,所以需要强制执⾏,因此这种⽅法是硬分叉
- 锁定⿊客账户
- 硬分叉的⽅式引起了⼴泛的讨论:
- 特别是认为不应该补救的⼀⽅,极其反对这种硬分叉的补救⽅式,因为其违背了去中⼼化的初衷
- 最后ETH团队开发了⼀个⽤于投票的合约,最后结果是⼤部分⼈⽀持硬分叉,绝⼤多数矿⼯也升级了版本
- 许多⽀持硬分叉的⼈并没有接受投票结果:
- 因为很多⼈并没有参加投票
- ⼤多数⼈的意⻅⼀定是对的吗,这样做是否公平
- 很多矿⼯还是在旧的链上挖矿,只不过算⼒⼤幅下降,因此好处是挖矿难度降低了
- ⼀段时间后⼀些交易所开始上市交易旧链上的以太币
- 旧链上的以太币称为ETC(Ethereum Classic),新链上的以太币还是ETH
- 旧链上的矿⼯,⼀部分是出于投机,另⼀部分是出于对原来以太坊的信仰
- 两条链同时存在带来了很多问题,例如重放攻击等等,给管理带来了混乱
- 后来给两条链增加了chain ID,解决了以上问题
- 从⿊客攻击之前的区块进⾏分叉
- The DAO采⽤拆分的⽅式实现,
- 此事件导致了ETH的分裂。BTC实现了去中⼼化的货币,ETH实现了去中⼼化的合约,去中⼼化这么好,为什么不把所有东⻄都去中⼼化?DAO:
-
反思:
- 智能合约真的智能吗?
- 更确切地说,应该是⾃动合约,实际上是⼀种代码合同
- Smart contract is anything but smart.
- 不可篡改性是⼀把双刃剑?
- 优点:增加了合约的公信⼒
- 缺点:
- 规则的漏洞难以修补
- 难以冻结账户,修改交易
- 智能合约⼀旦发布,难以阻⽌对它的调⽤
- 实际上没有什么是不可篡改的,不能迷信不可篡改?
- ⽐如通过分叉攻击进⾏篡改
- 开发团队通过软件升级强⾏改变某些账户的状态
- Solidity的语⾔设计是否存在问题?
- 虽然Solidity存在设计问题,但是有⼈提出应该使⽤函数式编程语⾔编写智能合约,也有⼈提出应该使⽤formal verification证明合约的安全性(较为困难),这些想法都有待探讨
- 编写智能合约的语⾔应该有什么特性:
- Solidity图灵完备,但这是否是好事
- 有⼈建议使⽤表达能⼒适中的语⾔,优于BTC,但不需要图灵完备,即可以实现应有的功能但难以出现安全漏洞
- 现实中并没有设计合同专⽤语⾔,⽽是提供⼀系列模板,在此基础上编写合约,将来也会慢慢出现专⻔编写合约的机构
- Many eyeball fallacy?
- 有⼈认为去中⼼化提⾼了透明度,因为⼀般去中⼼化的系统都是开源的
- 开源可以提⾼公信⼒,接受群众的监督
- 开源利于安全,不容易出现漏洞,因为⼤家都在看着
- 但是漏洞还是⼴泛存在
- 实际上看的⼈很少,即使看也不⼀定能发现bug
- 因此不要认为开源软件⽐不开源软件更安全
- 有⼈认为去中⼼化提⾼了透明度,因为⼀般去中⼼化的系统都是开源的
- 去中⼼化意味着什么?
- 许多⼈在现实⽣活中对中⼼化的管理⽅式不满意,追求去中⼼化,因此热衷于区块链
- The DAO事件中ETH开发团队的处理⽅式,尤其引起了他们的不满
- 最后硬分叉成功的原因,并不是ETH开发团队的代码,⽽是⼤多数矿⼯⽤挖矿⾏动⽀持
- 去中⼼化 ≠ 全⾃动化 ≠ 让机器决定⼀切,不能有⼈为的⼲预
- 去中⼼化并不意味着已经制定的规则不能修改,⽽是说对规则的修改,要⽤去中⼼化的⽅式完成
- 如果ETH开发团队因为⼀⼰私利修改代码,则必然引起⼴⼤矿⼯的反对
- 分叉恰恰是去中⼼化以及⺠主的体现
- 许多⼈在现实⽣活中对中⼼化的管理⽅式不满意,追求去中⼼化,因此热衷于区块链
- 分布式 ≠ 去中⼼化?
- 去中⼼化的系统必然是分布式的,但分布式系统不⼀定是去中⼼化的
- BTC和ETH属于交易驱动的状态机,state machine:
- 让系统中的所有机器重复做相同的操作,付出⼤量的代价以维护状态⼀致性
- 这并不是分布式系统常⽤的⼯作模式
- ⼤多数分布式系统是让不同机器做不同的⼯作,最后将⼯作结果汇总,得到最后的结果,因为这样⽐单机速度块
- state machine的⽬的不是为了加速,⽽是为了容错
- 状态机最早应⽤场景是
mission critical application- air traffic control
- stook exchange
- space shuttle
- 效率低,为了同步状态⼏台机器的速度⽐⼀台还慢
- 机器越多速度越慢,因此传统状态机应⽤领域机器数量较少
- 因此不要认为以太坊的EVM提供了⼤规模计算和存储服务,智能合约⽤来编写控制逻辑,只有那些需要在互不信任的实体之间建⽴共识的操作,才需要写在智能合约中
- 状态机最早应⽤场景是
- 智能合约真的智能吗?