# 对话Dora发起人：如何构建更公平的二次方捐助平台？

By [美迪](https://paragraph.com/@yunyouxi) · 2022-02-15

---

大型组织的治理以及资金的公平分配一直是困扰着人们的主题。而在常常拥有庞大财库的加密社区中，如何保证资金分配的公正公平显得尤为重要。那么加密社区如何防止在链下治理中常见的共谋问题，传统的二次方捐助又有哪些缺点？

律动 BlockBeats 专访了为今年 ETHDenver 2022 提供二次方投票系统的 DoraHacks 创始人张剑南，让我们听听他对治理问题的最新理解，以及对本次 ETHDenver 新版二次方投票系统的最新解读。

### 公共领域的治理难题

#### 律动 BlockBeats：考虑到很多的读者可能对相关的概念还不是特别熟悉，所以在开始讨论今天真正的主题前，我们先从几个更基本的概念谈起。所以第一个问题是，您是如何关开始关注到治理问题的，以及目前传统的治理投票机制有哪些不足？

\*\*张剑南：\*\*是现实世界的治理。很多时候，当我看到治理失效的时候，我会有很强的感受，因为治理失效往往会导致生产力的下降，阻止人类进步。

例如，即使是在一些发达的民主治理国家，在选举的过程中，大家往往会质疑选票的真实性和透明性。比如选票收割，通过钱或者其他利益承诺去购买别人的选票，然后投给特定的人。这类问题是「共谋」的问题。

另一类是公地悲剧问题。在公共治理的领域中，往往会出现一个事情跟所有人相关，但又跟每个人都不那么相关，最终导致没有人特别去关心这件事。受到公地悲剧问题影响最大的是公共物品治理和资助。

这些问题不光在国家治理中会出现，在地区性的治理或者在组织治理领域都会出现。如果能够一定程度上解决这些问题，我们就可以构建更加公平、高效的社会和组织。

在加密货币领域，治理是否有效往往决定了一个项目是否能长期实现价值。很多基础设施项目，或者 DAO 拥有很大的财库。这个财库将面临社区治理的问题，比如如何去管理采购，或者资助自己的生态。一方面是能够去做一些非常有效，促进整个组织的价值增长的事情。另一方面又希望让更多的社区成员按照自己的 token 比例或贡献程度参与到治理中，形成一个去中心化的社区。

在链上治理中，女巫攻击往往是一个要特别关注的问题，因为链上环境下通常容易伪造身份。不过，相比起共谋问题，我们有更多的解决方案防止女巫攻击，例如白名单永远是一种好的解决方案。通过对数据的分析，我们也可以在事后降低女巫攻击所造成的影响。

不管是链下还是链上的投票机制都会出现很多技术问题。我们可以把这些问题分为两种，一种是女巫攻击，也就是伪造身份问题。另一个是共谋问题，就是在一个治理系统中，有一些小群体会相互协作。

共谋、公地悲剧和女巫攻击问题在链上和现实世界的治理中都是存在的。有人看到一些问题后，就马上会说区块链治理是不行的，但事实上这些治理的问题在现实世界也存在，甚至可能更严重。所以这并非区块链的问题，而是一个治理活动普遍面临的问题。相反，区块链给我们提供了解决这些问题的基础设施和试验场。

总结一下，我们在治理过程中面临公地悲剧问题，而从治理技术上来说，我们通常要去解决女巫攻击和共谋问题。

#### 律动 BlockBeats：我们知道在加密行业的公共项目资助领域中常常采用二次方资助的方式。因此，能否先用通俗的话讲解一下二次方投票以及二次方资助，以及其与传统决策机制相比有什么不同？

\*\*张剑南：\*\*在 Glen 等人发明二次方投票之前，治理系统要么是一人一票，要么是用钱投票。在社会治理系统中，大部分情况是一人一票。但是在很多其他的地方，比如说 PoS 区块链或者是公司的股权治理中，基本上都是一块钱一票。这两种投票各自有适用的场景。

对于一人一票来说，最大的优势就是可以让所有人都参与，由于每个人都只有一票，这样就避免了巨鲸可以完全掌控整个投票结果的问题。这在很多社会型的治理中是有用的，但是缺点也很明显。如果我更关注某个问题，我没有任何办法在我更关注的问题上投更多的票。

而一块钱一票，就能够反映你对一件事情的关注度。比如如果特别关注某个提案，我可以花很多钱去买很多的票，当然劣势是巨鲸可以完全掌控投票结果。而二次方投票便是对这两种机制的一个改进。

这个想法最早出现在《激进市场》这本书中，其中有一个非常好的例子。就是在日本一个偏远的小山村里，一个小孩的亲人被盗贼杀害了。后来有人在议会提出了允许偏远地区居民可以持枪的议案。

那么这个议案如果在一个民主社会的投票系统里，你会发现大部分人对这件事情都是不关心的，因此这个议案很大概率是通过不了的。但这个事情对于偏远山区的家庭来说，却是一件很重要的事情。在一人一票的系统里边，这些少数群体的利益就很容易会被忽视。

因此有一个想法是假设我们不是一人一票，而是每个人都有一种叫做 voice credit 的类似积分的东西，比如说每个人有 20 个投票积分，然后你可以用这个积分去投票。

可能今年每人会有 20 个积分，同时一共有 20 个议案。你可以给这 20 个议案每个议案都投一票，也可以把你所有的积分都投到同一个议案上面。这时候看起来只是把一人一票变成了一人 20 票，那么区别在哪里？

我们可以增加继续投票的成本。比如说偏远山区的家庭，可能对偏远山区持枪的议案是非常感兴趣。这个时候我可以把 20 票全都投给这个议案。但是和普通投票有一个区别，投第一个票的时候，花费一个积分，要投第二票，就需要两个积分，以此类推，第四个票需要 4 个积分，20 个积分最多也只能换来 5 票，因为 6 票需要至少 21 个积分。所以投票数跟积分数量其实大致是一个平方根的关系，这就是为什么我们管这个东西叫做二次方投票。

而二次方资助则是 Vitalik 在二次方投票的基础上进行延展的算法，过程和二次方投票是一样的，区别是将二次方投票的结果用于分配一个资助资金池。

我们可以想象一个公共物品社区（例如一个城市中的社区，或一个区块链基础设施），他自己的生态中有一些公共物品。这些公共物品可能缺少风险资本的支持，因为他们在最早期的时候不一定有实际的投资价值，那么我们怎么来资助它？或者从另一个角度考虑这个问题，如果要分配一笔资金给多个公共物品（或提案），那么我们如何做？

我们可以设立一个奖金池，然后用捐助的方式去给这些公共品投票。投票的时候的投票成本在不断增加。比如投一个 token 可以换来一票，但是你换来第二票就需要再投两个 token。如果一个巨鲸要给自己喜欢的提案投很多票，成本会以二次方的速度增加，因此有效的限制了巨鲸对资金池的掌控力。最后，我们通过二次方投票的结果完成整个奖金池的分配。

所以二次方资助的算法其实和二次方投票本质上想法是一样的，只是他们的使用场景不一样。

### 二次方捐助机制还有哪些缺陷

#### 律动 BlockBeats：目前基于二次方捐助机制构建的 DoraHacks 以及 Gitcoin 中已经运行了一段时间，从实际的捐助效果来看，目前的二次方捐助体系存在哪些问题？

\*\*张剑南：\*\*其实二次方捐助在小规模应用的时候已经被证明是极其有效的。因此我们最主要的任务是考虑在规模化应用的过程中会遇到哪些问题？

第一个就是身份问题，也就是女巫攻击问题。由于二次方资助，比如说如果有 20 个人，每个人都投一票，这个项目可以拿到的资金，是比 1 个人投 20 票要多的。因为根据算法，如果你一个人投的话，你最后得到的实际票数是他的平方根。因此就给了人们很大的激励去伪造出更多的身份参与投票。

但是在过去的将近两年的时间里面，我们已经有非常多的方法可以去解决这个问题。比如说一个常见的方法是通过每一个轮次之后对数据进行分析，你可以知道谁或者哪个地址可能是伪造的。或者可以通过某种类型的白名单的方式，比如说通过某一种去中心化身份系统，证明自己是一个真人，或者证明自己是一个社区的用户。当把这些方法都结合在一起的时候，很大程度上是可以防止女巫攻击的。

而第二个更复杂的问题，就是共谋的问题。就是说在系统里边不同的小群体，可能会结成一个同盟，然后通过各种手段去赢得偏好的治理结果。

比如说在民主社会的选举里，选票收割就是一种共谋行为。共谋和女巫攻击相反，在小规模应用的时候其实并不是非常严重，但是如果奖金池变成了几十万美金上百万美金的时候，这个时候就非常的利益攸关。大家可能就会思考各种各样的方法，然后通过共谋的方式去获得更多的匹配资金。

所以从长远来看，共谋其实是比女巫攻击更严重的一个问题，也是更复杂的一个问题。用通常的手段很难去防止共谋，因为你完全不能知道谁和谁在共谋。

在传统世界中，我们几乎没有看到有效的方法解决共谋。比如内幕交易作为一种共谋，是在法律中禁止的。但事实上大部分的内幕交易并无法被发现和证明。而在区块链上，我们反而有更多的密码学工具可以解决共谋问题。

#### 律动 BlockBeats：在 Gitcoin 的捐助活动里，经常遇到一个项目，事后对他的捐助者进行追溯空投。这种行为是不是也属于您刚才提到的收买选票或者说共谋问题？

\*\*张剑南：\*\*对，通过空投吸引选票是一种常见的共谋。

#### 律动 BlockBeats：您刚刚提到，在区块链上有一些新的手段，可以帮助解决共谋问题，那么能不能介绍一下，我们是怎么通过密码学的一些技术来实现这种改进的。

\*\*张剑南：\*\*首先我们需要思考为什么会有共谋问题，以及为什么共谋问题会如此难以解决。

其实可以把整个治理过程看成一个游戏（博弈）。在最理想的情况下，如果所有人的信息都是不互通的，那么这个时候没有任何人可以跟任何人共谋，这是一个非常完美但不现实的情况。

在现实中，大家的信息可以互通，这个时候博弈就变成了一个合作性博弈。由于不同的参与者和其他参与者可以合作，结果变得不可预测。在治理系统中，往往会导致公平性大幅降低。而通常合作本身可以具有极强的隐蔽性，所以发现共谋行为本身几乎是一件不可能的事。

真正解决这个问题需要从另一个角度去思考：是否可以在特定的场景下，比如二次方投票，把一个合作博弈转换成一个非合作博弈？

即如何让参与者之间没有办法互相沟通结果，这样的话他们就没有办法合作。但事实上参与者是可以互相沟通信息的。在这个情况下，你怎么样能够让他们实质上无法合作？这个时候我们就需要通过一个集成零知识证明的密码学的方案，虽然你还可以沟通，但是你们互相之间是没有办法信任对方的。

比如我要花 10 块钱买你手里边的票，但是你投完票以后我不知道你给没给我投这个票，你也无法证明你给我投过票，这样只要让双方无法互相信任，就可以解决共谋的问题。那么我们是否能设计出这样的一个系统呢？事实上是可以的。

一个基础的解决方案就是 MACI（Minimal Anti-Collusion Infrastructure）。具体的做法是这样的，首先我们所有人在投票的时候都通过一个管理员。然后管理员会向整个市场发出一个公钥，当然私钥是在管理员，所有的信息都是通过公钥的加密完成的，所以你只能看到所有人信息的密文，而看不到明文。

用户可以通过这个系统进行投票，更换密钥，或者其他的行为。由于所有这些操作都是加密的，所以你没有办法知道这个信息到底是在投票还是在做别的事情。

所以，如果要去贿选，比如，我给你 100 块钱，让你投三号候选人。由于所有的信息都是加密的，你是没有办法证明你真的投过这个票的。通过这种最简单的加密的机制，你没有办法证明你给我投过票。

最后，管理员公布结果。但是如何在不公布具体投票细节的情况下保证其最终结果可信？这时候我们需要用零知识证明来表来保证这一点。管理员在发布结果的时候，同时附上一个对结果的零知识证明，这样在没有任何人知道任何人投什么票的情况下，我们依然可以相信这个结果。这样就完成了整个投票机制的闭环。

19 年 5 月，Vitalik 在以太坊研究社区提出了 MACI 的框架性想法。后来，以太坊基金会和 ConsenSys 的几个开发者将 MACI 做成了一个实验性的开源项目。MACI 实际成为产品是在 2021 年，clr.fund 和 DoraHacks 实现了基于 MACI 的二次方投票。clr.fund 最早在 ETHDenver 2021 做了产品 MVP。作为多链生态的开源开发者社区，DoraHacks 在 21 年底实现了基于 MACI 的二次方投票和二次方资助基础设施。在这个过程中，原 appliedzkp 团队的开发者们给了 DoraHacks 团队很多支持和建议。

我们的另一个目标是让 MACI 的过程变得简单，给用户提供非常简单的产品，让大家可以在抗共谋的环境下面去投票和支持开发者社区。目前我们基本做到了这一点，在 DoraHacks 进行 MACI 二次方投票，比普通的二次方投票更简单。

#### 律动 BlockBeats：MACI（Minimal Anti-Collusion Infrastructure）这个概念听起来有些复杂，能否用更通俗的话解释一下的基本逻辑？比如我能否理解为 MACI 的作用就是使得每个人可以秘密投票？

\*\*张剑南：\*\*可以这么理解。简单说，其实就是每个人将自己的投票加密。最后我们公布出一个结果，再用零知识证明这种密码学手段在不公布任何细节和过程的情况下，证明这个结果是真的。

#### 律动 BlockBeats：如果想将目前的二次方捐助模式改造成为 MACI 版本的二次方捐助，还需要使用哪些必要技术？除了您刚才已经介绍过的零知识证明，还有没有其他的补充？

\*\*张剑南：\*\*解决相关的工程问题和安全性问题。另外 DoraHacks 的平台已经提供了很多基础设施，这也让我们可以快速实现用户体验简单顺畅的 MACI 二次方投票系统。

目前的问题是 MACI 二次方投票系统还没有真正大规模的使用，所以还需要一段时间的测试。后面我们还要解决一些问题：如何进一步提高隐私性、提高效率等等。

我们对在原版的 MACI 里状态树的数据结构进行了优化，提高了参与人数和投票数量的上限。同时修复了 MACI 代码库中的一些涉及到安全性的 bug。

另外，产品还需要更加友好，比如有效而且非常友好的 UI，让用户在使用 MACI 二次方投票的时候，跟使用平常的二次方投票的时候体验是一样的。目前我们基本做到了这一点，很多用户反馈 MACI 投票体验更简单。

#### 律动 BlockBeats：MACI 版的二次方捐助，目前实现起来是否还有任何明显的困难？比如技术上的或者说社会层面上面的。

\*\*张剑南：\*\*技术上，在保证一个基础的抗共谋的基于 MACI 的抗共谋治理系统下，进一步提高隐私性和效率。

社会层面，一个抗共谋的系统在大部分情况下是受欢迎的，因为它让治理系统变得更公平。

因为在大规模的治理中，共谋会变成系统的一个非常不稳定的因素，整个系统变得非常不公平，从而整个系统变得没有办法让大家信任。

所以说抗共谋是一个在链上治理和二次方资助规模化的过程中要解决的必要问题，是一个趋势。

### 改进版的二次方捐助如何落地

#### 律动 BlockBeats：您刚才提到了我们实现 MACI 其实需要引入一个叫管理员的这样一个身份的节点，我不知道引入这个节点之后会不会造成一些新的问题，比如说他是一个中心化的节点吗？或者说有没有什么办法能够把他也变得相对于去中心化？

\*\*张剑南：\*\*管理员是一个中心化节点，但这个节点可以做恶的程度是有限的。首先管理员无法公布错误的结果，这是由零知识证明保证的。但是管理员可以做一些别的坏事，比如拖延，不发布结果，或者私下里泄漏隐私信息。

可以说 MACI 已经解决了最主要的问题，但隐私性的问题也很重要。对于这个问题，我们可以引入更多的密码学建构去解决，使得虽然管理员发布结果，但是他自己看不到中间每一个人的投票，这样就保证了隐私性。

#### 律动 BlockBeats：我们知道由 DoraHacks 的开发者平台 HackerLink.io 可以通过二次方捐助来支援早期项目，那么未来 HackerLink.io 是否会结合 MACI 机制，何时可以看到零知识二次方投票的正式采用？

\*\*张剑南：\*\*DoraHacks 的第一轮正式的 MACI Grant 是在今年的 ETHDenver。今年的 ETHDenver 首次通过 DoraHacks 提供的 MACI 基础设施进行社区二次方投票。2 月 20 号，ETHDenver 22 的评委会从数百个项目中选出 30 个项目，由在场的约 12000 名参赛开发者和参会者进行投票。

现场的所有的参与者都有机会去体验 MACI 投票过程。所以我们基本上可以理解 ETHDenver 的这一次活动会是 MACI 第一次中等规模的使用。

#### 律动 BlockBeats：对于很多用户包括参加这些活动的开发者来说，可能他们都是第一次遇到采用 MACI 的二次方捐助，所以能不能再向我们介绍一下这种新的组织方式和以前传统的二次方捐助有没有什么不同？

\*\*张剑南：\*\*其实整个过程没有特别大的不同，除了在二次方捐助里面是你可以直接投票，就是说你投完票之后你是不能改变这个票，但是在 MACI 里边，你投完票以后可以再投一次，新的那一票就会把原来那一次给覆盖掉。

然后可能特别不一样的是，其实大家在投票结果公布之前是看不到结果，因为所有的投票都被加密。当大家需要验证结果的时候，需要通过公布的零知识证明去验证这个结果的真实性。这就是说我们可能在使用上会发现没有一个实时计票的排行榜了。

除此之外，其实整个投票的过程没有不同，可能用户体验还会更简单。

#### 律动 BlockBeats：整个过程需要我们的参与者使用某些 Token 作为质押或者投票的工具吗？

\*\*张剑南：\*\*其实不需要，这个也是一个很有趣的地方，他在某种程度上比以前更简单。

#### 律动 BlockBeats：最后补充一个问题，在采用零知识证明的二次方投票后，是不是不太可能再有项目方，能够根据投票历史记录对支持者发放空投奖励了？

\*\*张剑南：\*\*对，你基本上可以这么理解，就是说项目方完全无法做到。所以可能这些项目方可以给所有项目的资助者都进行相同数量的空投，或者给所有的资助者都不空投。

---

*Originally published on [美迪](https://paragraph.com/@yunyouxi/dora)*
