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×(N1)/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 北京电视台报道
继续阅读
阅读原文