ETH-TheDAO-23

143 阅读8分钟
  • 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
          • 尤其不应该回滚交易,如果出了问题就回滚,怎么可以称为不可篡改
          • 出问题的不是以太坊本身,⽽是运⾏的⼀个智能合约出了问题
      • 假如采取补救措施,怎么补救?
        • 从⿊客攻击之前的区块进⾏分叉
          • 这种补救措施导致上⾯的链中很多合法的交易也被回滚,进⼀步导致ETH乱套
          • 要回滚必须精确定位,只能针对⿊客盗取以太币的交易,因此这种⽅式不可⾏
        • 实际上,以太坊团队采⽤两步⾛的⽅式
          1. 锁定⿊客账户
            • 升级软件,所有与The DAO有关的账户不能再发⽣交易
              • 本质上增加了⼀条判断规则,软分叉
            • 但是升级后的软件存在⼀个bug,不是安全漏洞,⽽是与汽油费相关
              • 与The DAO有关的账户的交易,判断不能执⾏,但是没有收取汽油费,这导致被恶意攻击DoS
              • 这导致很多矿⼯不断被攻击,只能回滚到以前的版本,因此这种软分叉的⽅案失败了
          2. 清退⿊客账户的钱
            • 通过软件升级的⽅法,将The DAO账户上的所有资⾦强⾏转到⼀个新的智能合约,这个合约只有退钱的功能
            • ⽤软件升级的⽅法强⾏记账,旧矿⼯是不会认可这些交易的,因为没有合法的签名,所以需要强制执⾏,因此这种⽅法是硬分叉
        • 硬分叉的⽅式引起了⼴泛的讨论:
          • 特别是认为不应该补救的⼀⽅,极其反对这种硬分叉的补救⽅式,因为其违背了去中⼼化的初衷
          • 最后ETH团队开发了⼀个⽤于投票的合约,最后结果是⼤部分⼈⽀持硬分叉,绝⼤多数矿⼯也升级了版本
          • 许多⽀持硬分叉的⼈并没有接受投票结果:
            • 因为很多⼈并没有参加投票
            • ⼤多数⼈的意⻅⼀定是对的吗,这样做是否公平
          • 很多矿⼯还是在旧的链上挖矿,只不过算⼒⼤幅下降,因此好处是挖矿难度降低了
            • ⼀段时间后⼀些交易所开始上市交易旧链上的以太币
            • 旧链上的以太币称为ETC(Ethereum Classic),新链上的以太币还是ETH
          • 旧链上的矿⼯,⼀部分是出于投机,另⼀部分是出于对原来以太坊的信仰
          • 两条链同时存在带来了很多问题,例如重放攻击等等,给管理带来了混乱
            • 后来给两条链增加了chain ID,解决了以上问题
  • 反思:

    • 智能合约真的智能吗?
      • 更确切地说,应该是⾃动合约,实际上是⼀种代码合同
      • 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提供了⼤规模计算和存储服务,智能合约⽤来编写控制逻辑,只有那些需要在互不信任的实体之间建⽴共识的操作,才需要写在智能合约中