公地悲剧可解吗?了解二次方投票与二次方资助
温馨提示:这篇文章已超过884天没有更新,请注意相关的内容是否还可用!
二次方投票和二次方资助平衡了「一人一票」和「一块钱一票」,避免了两种「极端」投票方式带来的问题。
撰文:Eric Zhang,DoraHacks 发起人
这篇文章解释 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
因此,从上面的图中就可以看出,二次方投票将对项目的支持力度和可投票的数量线性匹配了起来。
二次方资助 [3]
下一个问题是,如果可以投票的标的项目数量是动态的怎么办?这种情况可以用二次方资助(Quadratic Funding)的方式处理。
二次方资助让投票变成了一个资助项目变成了一个内生的过程。任何人可以贡献到一个项目中,在贡献的同时也完成了投票。
图片来源:Quadratic Payments
例如,一个项目有十个人,每个人贡献了 1USDC,那么总贡献额是 10USDC。这时,大正方形的面积是 100,因此黄色部分面积是 90。如果有足够的资金,这个项目可以总共被资助 100USDC,其中 10USDC 来自贡献者,90USDC 来自资助奖金池。
可以从两个角度来进一步理解二次方资助。首先,任何人对一个项目的资助不仅对她自己有意义,也放大了其他资助人的价值,而且这种放大是二次方的(如果有 N 个人参与捐助,那么就会有 N*(N-1)/2 个组合。因此,二次方资助一定程度上解决了「公地悲剧」问题。反过来,二次方捐助是二次方投票的一种特殊情况:所有的资助者在资助的过程中都在为项目投票,而补助资金池在「反向投票」。每个项目都收到的补助都无法超过 C。
总体来说,二次方投票和二次方资助平衡了「一人一票」和「一块钱一票」,并且避免了这两种「极端」投票方式各自带来的问题。
二次方募资如何解决公地悲剧(Tragedy of Commons)?
公地悲剧的来源是没有人愿意为一个公共物品 / 项目付出,即使很多人都最终受益于这个公共物品或项目。在二次方投票中,普通贡献者的影响力增加了。如果一个人有 10000 个单位的钱 /Token,他大约可以产生 100 个单位的影响力(票数),而不是 10000 票。而在二次方资助中,每个人的贡献可以让这个项目得到更多的匹配资金(n 个人的资助会导致 n^2 数量级的匹配资金)。
二次方投票和二次方资助没有解决哪些问题?
- 身份伪造攻击(Identity Bribery)。如果有人可以创建无数多个可以投票的身份,那么使用这些身份,每个身份投一张票就可以实现影响力最大化。在传统世界中,伪造的身份和选票可以实现这种攻击,而通常抵抗这种攻击的方法是验证唯一的 ID (或签名)。在区块链上,则可以通过复制多个地址,但注意这将产生大量的手续费和更高的账户管理成本。在最差情况下,二次方投票被降级成「一块钱一票」。
- 勾结攻击(Collusion)。如果一个攻击者知道票在哪些人手里,则可以通过让很多人卖掉自己手中的选票的方式收割选票(在很多国家,选票收割 Ballot Harvesting 已经造成严重的舞弊)。在最差情况下,二次方投票再一次降级成「一块钱一票」。解决这个问题的链上方法是在可以验证用户身份的情况下让用户完全匿名,例如使用零知识证明和一些其他的加密算法。
- 理性无视问题。在一人一票的系统里,每个人可能因为考虑到自己的行动对最终结果的贡献太小,而选择不贡献(或不投票)。这个问题无法被完全解决,但根据上面的讨论,二次方投票和二次方资助明显很大程度上缓解了这个问题。可以看到,这个问题在大规模的公共项目投票 / 资助中更为严重。在区块链世界里,我们遇到的很多公共项目是中小规模的,因此上面所述的一些问题变得没有那么严重,从而使二次方资助更加有效。
目前,二次方投票和二次方资助已经在科罗拉多州议会 [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