暂时停止DAO的呼吁书

  • A+
所属分类:区块链技术

原文:https://docs.google.com/document/d/10kTyCmGPhvZy94F7VWyS-dQ4lsBacR2dUgGTtV98C40/edit#heading=h.e437su2ytbf9
中文PDF版:A_Call_for_a_Temporary_Moratorium_on_DAO_暂停DAO的呼吁书_.pdf

在过去短短的三个星期,DAO(去中心化的自主组织)在以太坊的区块链上实施了智能合约,并且融资了 1千1百五十万的以太币,价值大约在$1.5亿美元左右。这是史上最大的一次众筹活动。DAO现在已经控制了全世界16%的以太币供应。它已经是以太坊生态圈里最引人注目的一个项目。

在这篇呼吁书里,我们会分析 DAO然后指出它设计上的一些问题。它们可以激励投资者不会真实地投票来反映他们心中的选择,因为这样做对他们战略上有利。我们还将列出这些可以让他们发起对 DAO的几种攻击的行为。

具体来讲,我们会指出九个战略上考量可以让 DAO的参与者的行为变得政治化而不是诚实地参与投票。这些政治化的行为会危及到其他诚实参与者的利益,比如说绑架他们的投资或是对伤害他们利益和意图的建议做出承诺。

我们会讨论這些攻击,然后提供实际和简单的建议来降低这些攻击的危害或是让這些攻击变得无效。

我们还想呼吁暂时停止 DAO的融资行为以防因为它设计上的缺陷而造成损失。一个暂时中止可以让 DAO更新它的安全系统,然后在更新后被取消。

介绍

智能合约使得用电脑程序来融资和发放资金变得可能。这些合同建立在图灵完备的平台之上然后可以在没有一个信托机构的情况下建立有约束力和可预测的金融架构。分布型自主组织( DAO)就是这类合同的一员,它可以根据股权持有人的意愿来执行公共决策。这些可被编程的规则如果想得周全的话,可以在一些特定限制的领域里替代一个职业管理团队。
或许其中最有可能的一个领域就是众筹。在传统的众筹里,一个企业比如像 Kickstarter把投资方和提出创业建议的创业者或是创业组织撮合起来。当这个建议得到投资方足够的支持的时候,它就可以运作。如果它成功了,它就可以向投资人回报利润。然后这个众筹平台在此过程中收取一定的运作费用作为它当红娘的服务费。
另外一个可能的领域就是投资基金或是风险投资公司。在传统的风投公司,这些管理员从投资者那里融资,评估不同创业建议的风险,然后从中选取一部份建议来投资。成功的创业投资可以带来回报,然后管理员从中提取为数不少的费用作为他们从中做出决定的服务费用。
在上个月,我们见证了一个分布型自主组织的崛起,它叫做 DAO。它是两个领域的混合体然后想要完全地消除中间人。DAO的运作像一个风投公司,因为它融资来投资给一些有价值的创业建议。但它又不同因为每个投资人都可以对每个放在桌面上的投资建议来按照他的投资份额来投票,DAO的梦想是一方面利用众人的智慧来决策,另一方面用自动程序的方法来替代人工管理来消除中间人可能犯的错误。
DAO在许多地方是独一无二的。它以惊人的速度用众筹的方法迅速地融资 1千 1百 6十万以太币(价值现在大约在 1.5亿美元),这个记录使它成为史上最大的一个众筹。在现在这个融资高度上,DAO大约掌握了 15%所有存在的以太币。因为 DAO是如此庞大,也因为它是它这个种类的第一个智能合约,所以它吸引了许多注意力。这样一来,公众对未来智能合约的信心与意见就建立在它的成功与失败之上。
虽然智能合约有着独一无二的技术上的挑战。因为电脑程序经常有 bug。当一个桌上应用有 bug,它会崩溃。但是当一个智能合约有 bug的时候,它可能让投资荡然无存。甚者,智能合约不能够轻易地被更新,不像一般的电脑应用和软件。所以,在建立一个智能合约的时候,我们更要对其复杂的决策过程进行严密的考量,尤其在有潜在恶意的参与者的时候。
在这篇论文里,我们着重于 DAO和检查它智能合约执行的细节,我们的重点在于它的算法设计。 我们指出九个令人担忧的理由,当这个算法被写进 DAO现在的实施之后,它会制造一些我们不希望看到的投资者的政治行为会与这个组织的主要理念背道相驰。在这个案列里,我们会证明对于现在的实施方案的攻击可能会造成严重的后果。我们会指出其中一个攻击可以无限期地绑架投资者的资金从而导致赎金的要求;另一个攻击可以让一个卡特尔篡夺资金;还有一个攻击可以打压 DAO筹码的价值;还有其他一些攻击。
在本质上,所有这些攻击都是由于 DAO里面的一些算法所造成一些没有估计的后果所造成的。有些是由一个对投资建议投票的内在偏见所造成的。现在的系统不鼓励投票,如果他们收到一个提议是有负面期望值的。第二个基本问题源自取款的过程架构:投资者通过“分裂”的方法如果他们想要退出基金的话,但这个方法易于被攻击。综合起来,这些问题导致了一些复杂的政治行为,然后就会腐蚀原本诚实的讨论投票来选择最有价值的投资建议的过程。
在余下的篇幅里,我们会描述 DAO的具体运作,投票倾向性,可能发生的攻击,然后讨论一些可能的缓解或是解决方法。我们主要目的是想通过我们的分析和讨论让大家意识到现在暂时停止DAO的白名单建议是一个审慎的做法,这样一来就可以改善 DAO的内部运作。所以,我们呼吁DAO的监护者马上进行暂时搁置。
除此方法之外,还有其他两个替代选择。第一是要求DAO的筹码持有人自动执行暂时搁置,用绝对多数的选票把所有的投资建议打压下去。由于这篇论文所列出的反对票的设计缺陷,想依靠反对票的程序来防止对反对票程序的攻击会是个错误。第二个选择是DAO的筹码持有者可以通过投票选举一组会执行暂停的新的监护人班子来选择安全措施。因为没人知道弃权者和不活跃的筹码持有人的比例,所以要想达到换掉监护者班子的投票临界值可能会很高。所以,我们认为最直接有效的方法就是监护人马上叫暂停,然后让DAO的筹码持有人可以通过换监护人班子的投票来反对这个决定。

DAO的结构

DAO的主要功能是成为一个众筹投资的载体。为了达到这个目的, DAO API的结构主要围绕着两个阶段:第一阶段是起初融资阶段和一个营运阶段包括了搜集投资建议,投票选举,有选择地投资,然后执行行政功能比如像付出奖励和取出资金。在下面的讨论里,我们会讨论每个阶段里DAO的运作,然后讨论 DAO后面主要的提象化概念来提供一个用博弈理论来分析智能合约的理论框架。
DAO在 2016年 4月 30日格林威治时间 10:00诞生,是由 DAO合同的一个特别的实例化。

创始和融资阶段

DAO的创始阶段开始于一个智能合约起初的创立然后会延续 27天。在这段时间里,DAO会发行筹码,叫做 DAO筹码(TDT),用来兑换发送到一个指定融资地址的以太币。
在这个创始阶段,TDT的购入价格不断在改变。刚开始的 14天内,1个以太币换 100TDT。然后的十天里,增幅为每 100TDT 0.05个以太币,最后三天里,每 1.5个以太币换 100个 TDT。
后进的投资者如果每买 100TDT多付 1个以太币,这些多付的币会放在一个特殊的账号叫做多余存额。个人的筹码持有者不能够从这个账号里提取资金;这笔币只有在相同数目的币被用在投资提议之后,才可以动用。事实上,多余存额代表了额外可以投资在提议上的币值,也就是 DAO的后来加入者所付的额外费用。举例说,如果一个筹码持有者付了 1.05个以太币来买 100TDT。这额外的 0.05个以太币会被锁住直到 DAO投资提议的总额超过了多余存额的总额。直到那个时候,多余存额才会被纳入 DAO的总额,然后它会被按照比例分配给 TDT的持有人。在写本文的时候,多余存额里大约有 275,000个以太币。
DAO按照一定流程来制造合同。主合约就像是副合约的干细胞工厂,副合约从主合约上分裂出来。按照这个逻辑,我们称原始合约为 DAO,它的衍生合约为子 DAO。然后把那些实施“标准 DAO框架”的任何合约通称为 DAO。繁衍子 DAO的过程可以反复进行下去,直到一定的深度。

监护者

每个 DAO的实例都有一个指定的监护者来负责从提议支付地址的白名单里添加删除地址。在现在这个 DAO的实例里的这个监护者账号是一个 5-of-11的多个签名地址(请注意其中有一个监护者宣布他不会参加,虽然他的钥匙在技术上依然可以签署这个多个签名)。
只有在白名单上的地址,才可以提交建议和得到 DAO的投资。如果提议想得到 DAO的投资的话,他们必须向监护者请求把他们的地址加入白名单。因而,监护者保证了在选择可以得到 DAO投资的建议的时候有人为监控。为了保护监护者不会有法律上的麻烦,他们的责任严格地限制在阻止有恶意的提议。监护者这个提象概念的建立的主要动机是防止一个多数掌管的攻击,在这个攻击里一个 53%的投票派系投票把 100%的 DAO的币投给只对他们有利的一些提议。所以监护者的概念被引入主要是把这些提议过滤掉,然后不拒绝把他们的地址放入白名单也不会把他们地址从白名单上除去。当他们在做白名单的决定的时候,他们不因该从商业赚钱的角度考虑这个问题。对这些提案商业上的考量完全取决于投资者的智慧和选举结果。

提案和投票选举

一旦一个提案的地址被监护者放进白名单,筹码持有者就可以投票选举他们是否愿意投资那个提案。所有的 TDT持有者都被允许选择是与否,然后他们的投票按照他们 TDT的持有量被加重。一个投票过程最少 14天,在最后被加重的票数会被统计出来。一个简单的大多数“是”可以让一个提案成功地得到投资。此外要达到一个最少投票人的数额才可以结束投票过程。最少投票人的数额比例大约在 20%和 53%之间随着提案的大小变化。非常大的提案要求 53%的最少投票人比例,小的大约只要 20%左右。对于同时对有多少提案可以进行投票选举没有定额。为了防止垃圾提案,每个提案都有一个一次性的登记费。
投票是限制一个 TDT持有者未来行动的一个措施。重要的是,如果一个筹码持有者对一个提议投赞成或是反对票,他们不能改变他们的投票,也不能在投票周期结束之后通过一个分裂来从 DAO里面退出。一个 TDT的持有者,只要他在任何提议上投了票,他就会上了一个“被锁住”的地址名单阻止他进行分裂或是转账。如果一个 TDT持有者在几个提议上都投了票,这个锁住会一直持续到最后一个投票的截止期。如果 TDT持有者所投票的提议成功了,持有者只能够在中标的提议等到资助之后,才能提取在以太余额账户里属于他们的份子币。
相反,没有投票的筹码持有人可以通过一个分裂从 DAO里提身出来。分裂需要 7天时间才能够从基金里分叉出来。因此,如果用户在提议投票截止期的前 7天时间里发启一个分裂,它的币就没有被用在那个提议上的风险。

分裂和提币

DAO不允许用以太币直接地提币。相反,筹码持有者可以通过一个“分裂”来提取他们的 TDT, 这个过程大约需要 34天左右来完成和制造新的 DAO。
这个分裂过程起始于一个筹码持有者发起一个特殊的提议,这个提议有一个新的监护人地址和 0个以太币。一个分裂建议的投票期为 7天。这个投票的结构不重要,因为这个提议不会被执行。相反,这个已经结束投票的分裂提议把可以从 DAO分裂出来的权限交割给那些投赞成票的人。技术上说,这些投票人会启动一个功能叫做 ‘分裂 DAO’把他们的资金从 DAO的母体里剥离出来放进一个新产生的子 DAO合约。这提供了一个让人从 DAO里提取资金的方法;其实,这个过程就是那些想从 DAO提取资金的人启动一个新的监护人提议,把自己作为监护人,等待投票期过期,然后把他们的资金转到一个新建立的DAO。
当一个筹码持有者用上述的方法从 DAO里脱离出来的时间是 7天,制造新的 DAO通常需要 27天,两个加起来意味着整个过程需要 37天左右,从启动一个分裂提议(0天),搜集投票(要 7天),从 DAO里分裂,然后等待新的 DAO产生(27天)。真正的转账在第 7天发生,然后资金被锁住 27天。当一个筹码持有者成功地 “分裂”进入他们自己的 DAO,他们就可以自己提出一个提议来把这个新 DAO账户里面所有的以太币转给自己。

TDT的可转性

没有被投票锁住的 TDT可以完全转给任何一个有效的以太地址,然后马上就可以在交易所里卖掉。所以,如果一个筹码持有者如果不想等上 34天后从 DAO里分裂出来然后提取他们的以太币,他们可以在交易所上直接卖掉他们 TDT来换取以太币,或是其他币种比如比特币。

攻击和忧虑

分析一个投资工具比如像以太坊是困难的。部分原因是用博弈理论通常需要对每个角色进行角色分析,他们可能走的每一步,还有每一步所造成的盈利结果。在一个互相连接有许多可转化的资产和许多复杂角色的金融系统里,有很多盈利的方法,但所有这些因素是无法用一个博弈理论的狭隘理论框架来表达的。道理是,不是所有角色是用以太币来最大化他们的利润的,相反,有些的利益最大化是用美元的外源利润来体现的。举例说,一个角色买了以太的看跌期权然后发动一个攻击来损害了系统的声誉,虽然他在 DAO里面损失了 TDT,但依然最后得利。想要对他们的盈利模式建模需要量化社会因素和市场影响。许多以前尝试用博弈理论来分析复杂的分布性系统最后都失败,因为他们的建模想法太简单,最后导致错误的结论。所以我们也不想在这里用博弈理论来分析 DAO。我们只是想讨论适用于众筹投资工具内部运作设计的一些指导原则,然后指出在现在 DAO架构里的一些弱点违反了这些原则,让投资者会受到攻击。

指导原则

DAO的中心思想是让筹码持有者可以投票选举提议。一个理性的角色是会根据她所收到的每个提议的净现值来投票。每个提案都有一个现在成本,在提议里被清楚地列出。然后它会向股份持有者返利,要么通过一个用以太标价的预期利润付还给 DAO,要么通过 TDT的一个潜在升值来达到。就像每个投资机会,向 DAO提交的投资案成功几率取决于它的本质和商业计划书。举例说,一个投资提案想要融资 1000个以太币来印 1000件 T-shirt,预测经过一定的时间每件 T-shirt可以获利 5个以太币,所以他们估计可以向 DAO返回 5000个以太币。可以期望的是在投票过程中的激烈讨论和辩论会让每个投票人独立地估算成功的几率,也就是期望值(EV)。
一个良好的内部运作设计可以激励 DAO里的角色真实地按照他们对每个提案的期望值来投票。为了激发集体智慧,我们期望 TDT的持有者投赞成票如果他们觉得这个提议有正的期望值(+EV),否定票如果他们对这个提议的期望值是负的( -EV);另外,他们可以弃权如果他们的投票不能改变结果。我们现在就来描述为什么现在实施的 DAO没有遵守这个原则。

表示赞成的倾向性和妨碍投反对票

现在的 DAO有个很强的倾向性来投赞同票然后压制反对票,这是由于它限制用户投票后的选择所造成的一个不良后果。具体地说,现在的 DAO阻止筹码持有者在他们对于提议投票之后从 DAO分裂出去,或是卖掉他们的 TDT。他们一直要等到投票期结束。因此一个投票者相信一个提议有负的期望值的时候会处于一个困境 :他们要么可以马上毫无风险地从 DAO分裂出来,或是他们可以投反对票然后希望这个提议不被通过然后再获得退款。这样一来投反对票对一个期望值是负的投资人来说是有固有风险的。而投赞成票对于一个期望值是正的投票人来说则不一样。这样一来, DAO的投票过程就会表现出这种倾向性:在整个投票过程中,赞成票会不断地进来,而想投反对票的人只会在他们可以确定投票结果是反对的情况下才会投票。有计谋的反对票者会先搜集其他人对这个提议的反面印象的情报后才会投下反对票,所以这个投票过程本身就不会对筹码持有者的真正趋向产生可靠的信息。投赞成票人的趋向会很早就显现出来,而投反对票的趋向会在整个投票过程被压制 –这就造成一个众筹组织的问题 -表示赞成的倾向性会导致最后的赞成来资助项目提议。

“跟踪”攻击

从 DAO里分裂出来(从现在来说这是唯一可以从主要 DAO合同里提取以太币持有财产的方法)会暴露在“跟踪”攻击之下。我们上面说过一个从 DAO分裂出来的用户启动一个新的 DAO合同,在这个合同里他既是唯一的投资者又是监护者。这样做的意图是这个用户可以通过这个方法取出资金:先把一个提议放进”白名单”里,然后把这个合同里的所有基金支付给自己,投 100%的赞成票,然后执行这个被批准的提议来提取资金。
但是这个分裂和接下来产生的的副合同的创立是在公共的区块链上发生的。所以,一个攻击者可以跟踪一个被盯上的用户。跟踪者在副合同的创立阶段买筹码。因为一个分裂出来的用户是刚刚产生副合同的新的监护者,一个跟踪者不能真正地偷币;因为受害者可以拒绝把跟踪者的提议放在白名单之上(我们还是要注意到,因为有混乱和人为的错误,这种攻击的结果还是有可能得策的)。如果这个跟踪者投入相当于整个副合同的 53%或是更多资金的话,他可以有效地阻挡受害者从副合同里把 TDT提出来换成以太。之后受害人想要从副合同里分裂出去的尝试(创立副副合同)就可以用同样的方法来阻止,从而锁住受害人的资金和制止它转换成以太币。这个攻击者则不会损失任何资金,因为她可以在任何时候在深度限制达到之前从子 DAO里分裂出来。这就为绑架勒索要赎金制造了可能性。
对于这个问题起初有人建议了一些弥补措施来防止和回击这类攻击。但这些措施不仅要求有不同寻常的技术复杂性和筹码持有人本身的努力之外,它还是不足以阻遏攻击。这个提出的防御措施是永远不从一个别人已经都赞成票的提议上分裂出去。但这个措施是不够的,因为一个攻击者可以用程序和一个粉尘账户对每个分裂投赞成票来获取分裂的选择,然后在引发分裂前把资金转走。当一个受害者在一个子 DAO里,Slockit曾经建议过用两个反击战术来抵抗攻击者。但是这两个方法都缺少灵活性:当攻击者制造一个粉尘攻击账户来投票,然后把币转入这个粉尘账号来攻击那个受害人想要执行的孙子 DAO。这些战略并不一定能够成功(他们的成功取决于对于攻击者的发起圈套和埋伏攻击),提款不是一个恒定的时间与燃料的运作,更加重要的是,不仅仅是这些反攻击手段需要很高的技术程度,它们会严重地影响到用户体验和总体的满意度。

埋伏攻击

在一个埋伏攻击里,一个大的投资人利用 DAO用户避免投反对票的倾向性在最后一分钟里投许多赞成票来资助一个对自己有利的提议。还记得在现在的 DAO结构下,一个理性的角色如果相信一个提议是-EV的,他不会主动投票,因为主动投票会限制他从 DAO里分裂出来的能力万一这个提议最后成功的话。这个情况尤其明显如果这个投资者观察到有足够多的反对票来否决这个提议。结果是,即使是那些对 DAO收益很低的提议,DAO也不能收集到足够的反对票来否决它们。
这种行为会为可能的攻击打开大门:一个足够大的投票集团可以利用这种集体沉默在最后投赞成票来通过提议。这种攻击很难被发觉和防御因为它不会给 DAO筹码持有者留下足够多的时间来提取资金。在现在的 DAO投资人里,已经有一个大腕投资了 888,888个以太币。这个投资者现在掌控 7.7%在 DAO里所有的表决控制权。

筹码价值攻击

在一个筹码价值攻击里,一个大的投资者可以打压 TDT的价值,要么从这个价值下滑里直接套利(比如说做空一个看跌期权),或者是在公开市场里买回 TDT来获得 DAO里的更大份额。一个攻击者的筹码价值攻击被认为是最为成功如果他做到以下两点: i)激励大部分的筹码持有者不分裂,而是在交易所上直接卖掉他们的 TDT。ii)激励大部分的公众不在交易所里买 TDT。一个攻击者可以通过以下的办法来做到 i)对于任何分裂出来的人进行跟踪攻击,然后在社交媒体上把攻击公布出来。更糟糕的是,如果这个跟踪者攻击的存在是广为人知的,这个攻击者甚至不需要攻击任何真人,只需要制造一些假身份然后开始散布谣言他被攻击了,从而在 DAO的投资者里制造恐慌。
一个攻击者可以通过以下方法达到(ii):制造一个为自己谋利但是大多数人都认为是-EV的提议,然后等到在投票选举结束前的第 6天,然后用众数票投赞成票让它通过。这个战术可以让有理性的市场参与者不买 TDT筹码因为(a)如果攻击者的提议成功他们会丢币(b)他们没有足够的时间在攻击者提议结束之前在交易所里买 TDT然后把它们换成以太币,因而消除了任何没有风险的套利的盈利机会。(i)和(ii)的综合结果意味着 TDT上有净出售压力,从而导致更低的价格。这个攻击者因此可以在交易所里买到廉价的 TDT来获得没有风险的利润,因为他是唯一的没有风险的 TDT买家如果他的攻击提议得到通过。

额外余额攻击

在一个额外余额攻击里,一个攻击者想要恐吓筹码持有者从 DAO里分裂出来来升高 TDT的账面价值。TDT的账面价值升高因为筹码持有者分裂出来后不能拿回任何的额外余额,所以越多的筹码持有者分裂,额外余额会占总余额里越大的比例,从而升高 TDT的账户价值。这个攻击可以变得更加严重一旦一个与额外余额一样大小的币量被使用后,可以建立一个提议把任何量的以太币打给额外余额账户而监护者没有办法通过白名单来制止这个行为。
现在额外余额里有 275,000个以太币,这意味着 TDT的账面价值是 1.02.如果这个攻击者可以把一半的筹码持有者吓跑的话,TDT的账面价值会增加到 1.04.如果这个攻击者可以吓跑 95%的持有者的话,TDT会增加到 2.00。在这个攻击里,这个攻击大腕会发动与筹码价值攻击相反的攻击:先建立一个让自己得利的-EV的提议然后用一个大的 TDT集团投票来迅速投赞成票,从而把所有的筹码持有者吓跑,然后给他们 14天时间一直到投票期结束这样他们就有足够时间来安全地分裂。在这个情况下,分裂是没有风险的(假设它没有和一个跟踪攻击挂钩起来),因为投反对票会导致损失如果这个攻击者最后没有拿到足够的赞成票。

分裂大多数接管攻击

虽然DAO的白皮书曾经具体地提到过多数接管的攻击然后引进了监护者这个概念来制止这个攻击,但我们不清楚这个制止机制是否真的足够有效。在白皮书里列出的多数接管攻击:一个大的投票集团,有 53%以上的投票权,投票把 100%的资金拨给对自己集团有利的提议。监护者本来是应该发现这种行为来追踪受益者的身份。但是不清楚的是,如果这个集团是由多个实体组成的一个卡特尔,然后提出不是一个提议而是多个不同的提议,监护人是如何发觉这个攻击的?这个投票集团里的成员可以用逐渐提离的办法来放空基金。最根本的是,这个攻击在一堆对大众看起来有吸引力的投资机会里几乎难以被决定性的分辨出来。最能够区别攻击的因素就是利益冲突:这些提议的直接受益者也是 DAO的筹码持有者。

回报稀释

另外一个对分裂出来的筹码持有者的潜在攻击是剩下的 DAO筹码持有者可以稀释他们给分裂出去人的分红。他们可以发起这个攻击来资助那些提议用来循环那些基金的币,发布新的回报筹码来稀释那些从以前投资里产生的回报。这个攻击源自回报会计计算把维护费用,内部转账和真正的投资都聚集起来放进一个单一的提议提象化。它要求监护者的参与来发起,但是有善意的监护者可能会不小心启动它当他在重组资金或是当基金把不符合服务标准的合同工解雇;也就是那些营运把币取出然后返回作为回报。

没有风险的投票

一个筹码的持有者可以对于提议投票而无须承诺资助它们,这就让发起其他攻击和采取战略行为变得可能。为了做到这些,这个筹码持有者只要简单地用他的资金投票,但是当投票期结束之后,召唤“unblockme”然后在提议被执行之前执行一个分裂。这样一来这个攻击者的资金就会和他投票时的风险相脱钩,然后可以让一个大的投票者在他出局的时候把错误的决定强加在剩下的筹码持有者上。虽然他这样做不是没有风险,他可能不能及时分裂出去,但还是有这个可能,因为正确的行动取决于对时间上的假设。

同时进行提议的陷阱

DAO的架构可以在同时进行的提议的情况下产生不想要的状况。尤其是,回想一下在一个提议上投赞成票的 TDT持有者要一直等到投票期过了之后,才能从那上面分裂或是转账。这就提供了一个加大攻击的矢量:这个攻击者可以在一个有很长投票期的提议里搜集选票,事实上把投票人的股份套牢在 DAO里。她然后再发表一个有很短投票周期的攻击提议。这个攻击如果成功,就可以保证影响到那些被套牢者的资金。而被套牢的投票者则被迫采取主动措施来保护他们的投资。

独立性的假设

到现在为止,一个重要但是隐藏的假设是这些提议都是独立的。这就是,它们成功的机率和它们的回报互不相连相互独立。同时向 DAO提交的提议很有可能是互相促進的,或是相互反对的。举例说,一组在同个空间互相竞争的项目可能互相影响对方的成功几率,从而影响总体的回报;社会科学的研究显示社会上的成功是由非线性系统所推动的。
然而DAO的投票机制的本质是没有给投资者提供表达复杂,有依附性的优先设定选择。比如说,一个投资者不能够指定一个有条件的优先设定(投赞成票,如果其他提议没有得到资助或是得到资助)。总体上,市场运作机制的建立会引发出这种优先设定,然后相应的程序 APIs来表达这些设定,但这都需要一个更加细致和有层次的合同。但这都不构成一个攻击矢量,但它确实显示了我们可能会见到有谋略的投票行为即使参与者并没有什么恶意。

可能的缓减和解决办法

对上述的攻击有全部和部分的解决方法。在这方面的讨论正在进行。这些缓减和解决方法需要对 DAO进行技术改造或是 DAO监护者之间达成一个社会共识,或是两个兼有之。

支持提款

一个筹码持有者可以召唤的功能是有一个迅速和直接提款,把他们在 DAO里的以太份额直接转到一个正规的地址。(这样一来他们可以从已经花了以太币的提议上领取未来的奖励回报)。这个办法可以让跟踪者攻击变得不可能。它还可以显著地缓减筹码价值的攻击。
许多筹码持有者现在相信他们可以从 DAO里随时提身出来。如果可以不动用任何复杂的防御机制就可以保证这点可以做到,那筹码持有者的期望就可以得到实现。

投票后的宽限期

在投票期结束之后加一个宽限期,但是在提议可以被资助或是执行之前,会给筹码持有者足够时间来移动TDT或是从DAO里分裂出来当他们看到了投票的结果。但是在他们的币被花掉之前。投票期和宽限期不能够同时进行,因为投票筹码必须被锁住一直到所有这些投票提议的投票期过了为止。
加上一个宽限期确实可以解决这个投票偏向:它可以让筹码持有者投反对票而不放弃他们根据结果来卖或是分裂的权限。它还可以给监护者时间来防护 DAO不遭受埋伏攻击:当看到投票选举结果之后就把支付地址从白名单上拿下来。它可以大大地缓减多数接管攻击和埋伏攻击,因为它可以让筹码持有者在投票通过后提款。

较短的投票期限

缩短一个提议上的投票期限让投票期只发生在 14天的最后两天,或是更加长的辩论阶段。这样会缩短被锁筹码的时间,来缓解筹码价值攻击,然后可以降低投票者为了筹码不被锁住而拖到最后一分钟才投票的倾向性。

投反对票然后在一个肯定的决定上撤出

用一个特殊的投票,它的语法是“如果提议成功通过,就投反对票然后撤出’,这个特殊投票可以让筹码持有者发布信号,如果一个提议通过,他们就会离开 DAO。 “NAW”选票公开表示投票者认为这个提议会对 TDT的价值造成损害所以不愿意在 DAO里待着如果它被通过的话。

等待不动的投票人

一个阻吓埋伏攻击的可能防御是延长投票截止期来对付投票最后时间里的导向。虽然最后一分钟投票在一个公平的投票系统里是应该被允许的,但是运作机制的偏见会导致筹码持有者在一旁等待到最后一分钟。这个倾向性可以用延长投票期和给大家更多的时间来观察投票的方向来克服。

做出承诺/泄露投票

一个可以广泛应用的技巧是让 TDT持有者先对他们(被遮蔽的)投票做出承诺,然后在一个投票晚期的一个透露时间段里把这个遮蔽拿走。但这样做会有负面作用:一个投票人的客户端要有数据储存能力才可以记住他们的遮蔽元素。甚者,他们可以把他们的遮蔽元素与其他人分享来透露,甚至证明他们投票的倾向。最重要的是,把投票遮蔽起来会降低DAO投票过程的价值:按照设计,这些投票不能够成为这些持有者金融偏好的导向信号。这些偏好发现过程会导致脱离智能合约的领域而进入外来运作机制,比如象微博这种个人意见信息栏。

投票代表团

TDT持有人如果不参加投票过程会减弱系统的安全性。我们可以让 TDT的持有者把他们的选票放权给他们的代理人这种方法来提高参与度,然后提高安全性。但这个代表的功能必须要大幅度改变系统还会十分复杂,所以它不是一个短期解决方案。

回报会计计算

回报稀释攻击可以通过一个对每个 DAO分裂进行更加精确的财务会计计算被阻止。提案然后可以根据在它们分裂时候有多少还没有被清算的回报筹码来支付红利。

监护者执行的提议独立性

独立性的假设可以由监护者自愿维护。监护者要保证这些有资格在任何时候投票的提议是确实互相独立的。

DAO的升级

DAO(1.0)有一个内置的升级机构叫做“新合同”。它可以把所有的资金移到一个新的DAO(1.1)。虽然这个机制存在,但最好还是在万不得已的情况下再启动它。一个更加“软”的升级方法是暂时停止新的提议,制造新的 DAO,然后提出提案来把资金从1.0移到1.1.

总结与建议

这篇论文讨论了 DAO合同的运作。这些合同现在拥有以太币供应里的很大比例然后制造了许多对 DAO和智能合约的亢奋。我们还指出了九个令人担忧的理由,可能导致 DAO的投票者会偏离真实投票的策略。有些行为还有可能导致金融操纵和损失。它最后还指出一些可能的缓减方法来降低一些偏见和脆弱性。
基于上述的担忧,我们相信现在 DAO的监护者最好不要把任何提案放入“白名单”。一个明智的选择是等到 DAO升级到可以缓减可能发生的攻击的时候。
注意:这篇论文不提供任何金融建议。我们不是,也不想为你做出的财经决定付任何的责任。
感谢
Many thanks to Rick Dudley, Christoph Jentzsch, Andrew Miller, Gustav Simonsson, and Alex Van de Sande for their comments and feedback on this draft. We are grateful to Toby Hoenisch, who pointed out the Risk-Free Voting technique, and Meher Roy, who discovered the token dilution attack and made it public.

weinxin
共识社
用手机扫一扫,加入组织,时刻关注组织动态。
daodaoliang