论DAO应急门
每晚八点,我们在社区分享知识,等你。
NervosFans 微信公号:Nervosfans
入群请加乐乐微信:sensus113 美果大冰微信:xj73226
备注入群,谢谢!
DAO黑恒久远,一黑永流传。
这个自治以太坊脚本,掌控价值约1.5亿美元(的ETH),风光一时,然后给整丢了。
后来据说黑客集团一半白一半黑。
白帽黑客是指白帽匿名者(white hat hacker),其又称为白帽子,是那些用自己的黑客技术来维护网络关系公平正义的黑客,测试网络和系统的性能来判定它们能够承受入侵的强弱程度。
黑帽黑客就是。。。黑化了的白帽黑客。
再后来,有人这么总结DAO事件:
那么,以道教style总结一下DAO事件就是:
混乱无处不在,看淡吧。就是设计智能合约时,可长点心吧。
DAO事件生动的为加密之域的子民们上了N课,其中一节,就是“应急门”得有。 此应急门非彼应急门,指的是出现恶意行径时,中止智能合约运行的一种机制,譬如把智能合约回复到低级别的安全模式。
但是,这里也有个问题,说应急门貌似是跟智能合约的“自治性”不搭调。 好比,智能合约吸引人的地方非常多,譬如:自带确定性光环的可预见性与确定性。 那么,低配应急门机制,面对这些优雅的属性,感觉有点力不从心啊。
今天,就来介绍一种应急门机制,简单有效又完全的去中心化,因此妥妥符合DAO的信任口味。
低档应急门
技术上来说,最简单的应急门机制可以通过在合约中嵌入加密公钥实现,意思是仅允许持有合法密钥的人(看门大爷)激活应急门,把合约推入“维护模式”,然后该调试调试,改重启重启,这套动作用的还是之前开门的密钥。
想再进一步的话,可以考虑把看门大爷换成多重签名或者共享密钥的智能合约(看门大爷团),这样一来,想解除主合约的操作,就需要满足一定的人数比。
但是这两种方法看门大爷法,不太适合DAO。 拥为持有密钥的人本身可能是个薄弱点。 说,大爷们可能为了自身利益,干涉DAO运行;或者,大爷们被挟持了;再或者,大爷不小心把工作证丢了然后被他人盗用。 另外,愿意主动接这摊活儿的人,真少。试想,若主合约违法,第一个被刨除兴师问罪的人,是谁?
所以才说,这种朴实的应急门制,真不适合DAO。
中档应急门
说是中高配,不如说是DAO定制。 这种简单的分布式应急门(decentralized escape hatch ,下面简称DEH)机制有三个组成部分:
缓冲(Buffer):主合约中流出的全部资金需要过一道DEH合约。意思是DEH执行send()调用前,先把资金冻起来一段时间。这个时间是预设的,好比24个小时。这个缓冲期,可以用来检查主合约运行中的错误。
触发器(Trigger):DEH里有个“倒流”机制,说流进来缓冲的资金,在合约接到明确指令后,可以倒流回去。
撤消日志(Undo Log):首先,撤销日志与应用关联,这样DEH可以指定相应的恢复操作方法。好比,缓冲资金回流后,撤销日志能确保资金被发回至发起交易的客户端。
这里边,触发器处理起来相对棘手。 那么,可以考虑以下两种方式的结合:
1. 可编程不变量(Programmatic invariants )
这厮可以用作自动触发器。 例如,有个不变量,兑现的token数量等于支付的ETH数量。这种方法,若正确实施,本是可以阻截DAO攻击的。
但是,不变量也有的弱点若干:难发现,一般是由编写智能合约的人检查发现,所以受盲点影响;还有,比较耗gas,当然了,这得看怎么个比法,若花点gas但是阻截DAO黑客,计较起来没什么意思。
2. 触发器众包(Crowd-sourced triggers)
这个方法是引入人为监督,发现那些不变量应付不来的问题。众包触发器中,由一撮预先选出的法定人来叫停缓冲里的交易。 这样做的好处是,首先人们的主人翁意识会比较强,其次还能在运行时审计其脚本,及时发现错误。
注意,DEH不会以任何形式影响货币的不变性或可替代性。 资金一旦通过了DEH,就是最终的,不可改变的。它只是增加了一个延迟周期,以此允许合约在必要时进行相应的中止操作。
那么,交易是在何时进行的呢?
这种分散式应急门脚本中,预定义时间结束后,方可发出资金。 付款等同于传统分布式系统中的“附带后果”,资金被缓冲并分阶段执行, DEH放款之前,资金到不了客户端。 那么,与脚本交互的人内心的OS应该是:24小时到账,这种。
那么,单个参与者能中止脚本么?
No。 众包触发器里需要一定的法定人数来激活应急门,可以是53/100、2/3、1/2,具体视情况定。
总结
Dapp生态系统扩张,亦或是各种昂贵的试错经验,一定能为智能合约带来更多更有用的构建模块。
DEH就是其中之一。
也可以这么理解,DEH是智能合约的金库方案。
A Decentralized Escape Hatch for DAOshackingdistributed.com