二次方投票和二次方资助

Let's Hack

Let's Build

这篇文章解释 Vitalik Buterin 在《Quadratic Payments》[1] 中描述的二次方投票和二次方募资问题。进而,为 DoraHacks 即将在 HackerLink 上部署的合约及对应活动进行一个提前的解读。

在公共领域的治理中,需要投票决定资金的使用,进而决定哪些项目获得优先的资助。例如,一个城市在修公园、修医院、修路等项目中分配预算,或一个由社区和机构共同资助的公链生态基金在钱包、开发者工具、文档编辑、黑客马拉松、社区播客、隐私协议等项目中分配预算。

投票通常有两种方式:“一人一票”和“一块钱一票”。

一人一票

一人一票的本质是无论你多在意一件事,你只能给它投一票。在 Vitalik 的文章中,一人一票被解释为:如果你关心一件事(或者一个公共物品 / 项目),那么你投一第一票的成本极低,但如果还想继续贡献的话,成本变为无限高(因为你只有一票)。因此,你的贡献和你的影响力之间的关系可以用下面这个图来表示:

二次方投票和二次方资助

图片来源:Quadratic Payments

一块钱一票(或一个单位 Token 一票)

一块钱一票是一种用钱(或 Token)投票的方式。这种方式让更关心一个问题的人可以贡献更多(前提是你有足够多的钱 /Token)。例如,PoS 共识就实现了这种想法。很明显,这种方式导致可以用钱买影响力。例如一个社区希望在修路和在街角建花园两个公共基础设施项目上分配预算。可能大多数人都更关心道路,但有一个住在街角的富人非常关心在街角建花园。这时,这个富人可以付出很多钱,结果是大部分人关心的项目可能输给极少人关心的项目。可以用下面这个图来表示你的贡献和你的影响力之间的关系:

二次方投票和二次方资助

图片来源:Quadratic Payments

如果我们希望同时考虑人们对不同问题的关注程度,又避免完全“用钱买影响力”的困局,应该怎么办呢?

二次方投票

二次方投票(Quadratic Voting)是解决这个问题的一种折中方法。可以用一个非常简单的机制实现二次方投票:每购买一个单位的票,票的价格增加一个单位。例如,如果我们用 USDC 投票,第一票 1 USDC,第二票 2 USDC,…,第 n 票 n USDC。

二次方投票和二次方资助

图片来源:Quadratic Payments

这样,如果一个人想在一个项目上投 n 票,则需要付出大约 (n^2)/2 USDC,因此付出成本是票数的二次方。

二次方投票和二次方资助

图片来源:Quadratic Payments

因此,从上面的图中就可以看出,二次方投票将对项目的支持力度和可投票的数量线性匹配了起来。

二次方资助(Quadratic Funding)

下一个问题是,如果可以投票的标的项目数量是动态的怎么办?这种情况可以用二次方资助(Quadratic Funding)的方式处理。

二次方资助让投票变成了一个资助项目变成了一个内生的过程。任何人可以贡献到一个项目中,在贡献的同时也完成了投票。

二次方投票和二次方资助

图片来源:Quadratic Payments

可以用上面的图来描述这种贡献 / 投票过程‍‍:

1. 每个绿色的方块代表一次捐助的金额,大正方形的面积 C 可以理解为总资助池金额,而黄色部分面积 S 可以理解为一个由外部支持的补助资金池。我们把所有绿色方块排列在大正方形的对角线上。这时,每一个贡献者投入的金额是 Ci,‍‍SS 可以理解为一个由外部支持的补助资金池

那么大正方形的面积是:二次方投票和二次方资助

补助金额是:二次方投票和二次方资助

2. 在任何时候,只要有多一个贡献者,那么
二次方投票和二次方资助

3. 如果 S 和补助资金池不完全一致,可以根据黄色的面积按比例分配

4. 多次小额的捐助可以导致很大的黄色面积,从而让项目赢得更多的资金配比

例如,一个项目有十个人,每个人贡献了 1USDC,那么总贡献额是 10USDC。这时,大正方形的面积是 100,因此黄色部分面积是 90。如果有足够的资金,这个项目可以总共被资助 100USDC,其中 10USDC 来自贡献者,90USDC 来自补助资金。

可以从两个角度来进一步理解二次方资助。首先,任何人对一个项目的资助不仅对她自己有意义,也放大了其他资助人的价值,而且这种放大是二次方的(如果有 N 个人参与捐助,那么就会有 N×(N−1)/2N×(N−1)/2 个组合。因此,二次方资助一定程度上解决了“公地悲剧”问题。反过来,二次方捐助是二次方投票的一种特殊情况:所有的资助者在资助的过程中都在为项目投票,而补助资金池在“反向投票”。每个项目都收到的补助都无法超过 CC。

总体来说,二次方投票和二次方资助平衡了“一人一票”和“一块钱一票”,并且避免了这两种“极端”投票方式各自带来的问题。

二次方募资如何解决公地悲剧(Tragedy of Commons)

‍‍公地悲剧的来源是没有人愿意为一个公共物品 / 项目付出,即使很多人都最终受益于这个公共物品或项目。在二次方投票中,普通贡献者的影响力增加了。如果一个人有 10000 个单位的钱 /Token,他大约可以产生 100 个单位的影响力(票数),而不是 10000 票。而在二次方资助中,每个人的贡献可以让这个项目得到更多的匹配资金(n 个人的资助会导致 n 的二次方数量级的匹配资金)。

二次方投票和二次方资助没有解决哪些问题

  1. 身份伪造攻击(Identity Bribery)。如果有人可以创建无数多个可以投票的身份,那么使用这些身份,每个身份投一张票就可以实现影响力最大化。在传统世界中,伪造的身份和选票可以实现这种攻击,而通常抵抗这种攻击的方法是验证唯一的 ID (或签名)。在区块链上,则可以通过复制多个地址,但注意这将产生大量的手续费和更高的账户管理成本。在最差情况下,二次方投票被降级成“一块钱一票”。

  2. 勾结(Collusion)。如果一个攻击者知道票在哪些人手里,则可以通过让很多人卖掉自己手中的选票的方式收割选票(在很多国家,选票收割 Ballot Harvesting 已经造成严重的舞弊)。在最差情况下,二次方投票再一次降级成“一块钱一票”。解决这个问题的链上方法是在可以验证用户身份的情况下让用户完全匿名,例如使用零知识证明和一些其他的加密算法。

  3. 理性忽视问题(Rational Ignorance)。在一人一票的系统里,每个人可能因为考虑到自己的行动对最终结果的贡献太小,而选择不贡献(或不投票)。这个问题无法被完全解决,但根据上面的讨论,二次方投票和二次方资助明显很大程度上缓解了这个问题。可以看到,这个问题在大规模的公共项目投票 / 资助中更为严重。在区块链世界里,我们遇到的很多公共项目是中小规模的,因此上面所述的一些问题变得没有那么严重,从而使二次方资助更加有效。

目前,二次方投票和二次方资助已经在科罗拉多州议会 [2]、GitCoin Grants,Pickle Finance,以及 DoraHacks Grant 中使用。

[1] Quadratic Payments, https://vitalik.ca/general/2019/12/07/quadratic.html
[2] Colorado Tried a New Way to Vote: Make People Pay - Quadratically, https://www.wired.com/story/colorado-quadratic-voting-experiment/
[3] Liberal Radicalism: A Flexible Design For Philanthropic Matching Funds, https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3243656

联系 DoraHacks

二次方投票和二次方资助

往期活动回顾

2019 DoraHacks “第四次工业革命 ”活动现场__

活动回顾报道

【V 笑到最后团队专访】——让简单的想法拥有更多可能

币安优胜团队专访——Aurora,让你的善良看得见

【Dteam 专访】在工业物联网里做合纵连横的技术精英

肝团队专访—打破框架,助力币安慈善高效透明

RCT 冠军团队专访—AI FOR CAT

DoraHacks#第四次工业革命# 属于 Hacker 的节日

36kr 报道
微众银行区块链 Hackathon 圆满收官,解锁开源极客的力量

https://36kr.com/p/5234624

深度回顾 DoraHacks“第四次工业革命”极客马拉松——中国极客顶级盛宴

https://36kr.com/p/5232253

知乎链接

参加 dorahacks 的活动是一种怎样的体验,你都参加过哪些 dorahacks 的活动?

https://www.zhihu.com/question/61301418

2019 DoraHacks 北京电视台报道__

二次方投票和二次方资助