传统上,通过税收或私有化(如土地所有权或版权法)将公共物品内部化(enclosures of public good)来解决搭便车问题。
然而,这些问题往往涉及到一个中央机构——政府、公司或非营利委员会——来强制性地收取款项和分配资金。 然而,大型中央机构在分配资源方面不一定有效率——他们往往不知道什么是最重要的公共利益,或者每个项目实际需要多少支持。这种信息来自于自下而上更有效,而不是自上而下。
2018年,Vilatik, Zoe, 和 Glen为这个问题提出了一个新的解决方案:二次方融资(Quadratic funding)。它有一种算法,将赞助者的资金与小额捐助者进行匹配(从而获得不相称的奖励),因为小额捐助者作为一个整体可能对哪些开源项目对社区最有利有更大的集体洞察力。
另外,鼓励小额捐款对以太坊社区生态系统的长期发展是健康的,因为以太坊社区生态系统正在形成大量的公共物品,因此,以上的公共物品困境正在出现在其社区。
Gitcoin在正在进行的Gitcoin Grants生态系统中使用QF作为其资金匹配算法,这是Ethereum项目和初创企业的主要资金来源之一。
图:QF的直观描述,绿色为社区捐款,黄色为二次方匹配的赞助资金。红圈是资助 的总配比(来源: https://vitalik.ca/general/2019/12/07/quadratic.html)
QF是对每个社区贡献的平方根进行计算,将它们相加,并取其总和的平方。之后,资助机构(Gitcoin)支付“QF”结果与大型机构捐助者(如以太坊基金会和其他著名的DeFi项目)的配套资金之间的差额。
因此,这种算法不成比例地将配套资金资助给许多小额捐助者捐款的项目,而不是仅有几个大捐助者捐款的项目,实际上是更多地相信支持一个项目的人数,而不是美元数量。
Gitcoin Grants的攻击向量101
要了解如何防御QF中固有的攻击媒体,首先要像攻击者一样思考。揭示攻击向量的不同模式使我们能够设计简单而严格的工具,在一个实时的、潜在高风险的融资环境中检测这些模式,风险高达数百万美元。
本部分将探讨不同的二次方融资博弈方法:
l 拆分捐款(splitting contributions)
l 与真实人/账户协调虚假捐款(coordinating fake contributions with real people)
l 拆分资助(splitting grants)
l 亚策略和升级(metagaming and escalation)
1. 拆分捐款
正如Vitalik的博客文章所建议的,QF机制可能会受到女巫攻击和共谋攻击的影响。一个攻击者可以决定创建一个假的赠款,捐款给自己,并收集配套资金作为“利息”。由于捐款数量的增加导致更多的配套资金,最简单的攻击形式便是把捐款分成多个账户,并捐赠给自己。
上图左侧显示的是一个正常grant的捐款匹配(绿色为捐款,黄色为匹配资金),右边显示的是一个“优化”的grant捐款(grant contribution)匹配,表明多个较小的捐款如何导致相同数量的匹配资金。
在上图中,我们可以看到,随着绿色方块(原始捐款)面积的减少但数量的增加,黄色区域(匹配资金)与绿色区域(捐款)的比例也在增加。在最极端的情况下,如果绿色方块的数量增加到无限多的无限量捐款,理论上你可以用少量的原始捐款吸引大量的匹配资金,只要你把捐款分成许多账户。
当然,上述许多攻击向量已经被Gitcoin团队采取的安全措施所缓解,我们将在下面讨论。
这是一个简单的数学问题。M是原始捐款,n是“种子资金”被分成的捐款数量。
举个例子,请看下面来自@GitcoinDisputes账户的推文,内容关于2020年7月对Gitcoin Grant的共谋行为。
GitcoinDisputes账户本身就是一个值得称赞的信号工具,用于协调Grants生态系统中的不良行为(来源:https://notes.ethereum.org/@vbuterin/rJvHcbygP)
为了减轻女巫攻击向量,也就是创建虚假账户来钓取匹配的grants,Gitcoin目前确实使用了Sybil检测算法(给用户分配一个Sybil分数),以及激励用户在一些不同的平台(主要包括BrightID、Idena、POAP和3box)进行身份验证每增加一层就提供更多的grants匹配。
你可以为你的Gitcoin匹配验证更多账户而获得的“信任奖金”(source: https://twitter.com/mZargham/status/1334185733368766467?s=20)
这样做的效果是确保额外的资助匹配资金用于具有较高概率为真实人物的身份。然而,还有其他形式的共谋攻击,超出了单纯的女巫攻击的范围。
2. 协调虚假捐款与真实用户的关系
虽然创建假账户来吸引匹配资金可以通过抗干扰设计来防止,但串通者可以通过协调一组真实账户来 “挖掘Gitcoin匹配资金”,并在该组之间分配“利息”,从而轻松的实施他们的诡计。
公开贿赂Grant捐款的一个例子。(来源:https://notes.ethereum.org/@vbuterin/rJvHcbygP)
为了减轻共谋攻击的风险,Gitcoin采用了Vitalik提出的新的“配对资助(Pairwise mechanism)”机制。其基本思想是减少那些似乎高度协调的捐赠者向同一资助池捐款的匹配。如果两个捐赠者(一对)捐赠了一组类似的赠款,那么该赠款的匹配基金将以一定的金额折损。
关于配对机制可能还有更多的考虑——这个解决方案假定有机贡献(organic contributions)往往很少相互重叠,但我们经常在有机社区看到相反的情况,即他们互相支持对方的工作。配对机制也可能会惩罚grant的集合,这是一个工具,用户可以捐赠给预先选择的项目列表。就像任何精心设计的解决方案来解决特定类型的共谋一样,总有其他方法来玩这个游戏。
为了进一步减轻合谋攻击,Gitcoin采用了一个标记机制,被要求作弊的用户可以向Gitcoin争端解决程序报告作弊者。只需要1个用户报告合谋行为,就可以“捣毁(bust)”整个计划,在第8轮中报告了约35个标记。
3. 拆分资助(grants)/创建假资助(grants)
另一种避开女巫攻击检测和配对资助的方法是将现有的资金分成许多资金,或者创造假的grants并协调真实的账户向其捐款。
只要合谋者能找到一些方法,将大笔“捐款”分成许多小账户,并以小的grants提案来回收,他们就能吸引到更多的配套资金,因为QF机制不成比例以参与者的数量为奖励,而不是每个参与者的捐款数额。
例如,一个恶意行为者可以将他们的grant分成几个小的grant提案,并将他们最初的“种子”资金分成几十个小的捐款,每个捐款都捐给这些小的资金提案,不产生重叠。
虽然这种类型的共谋行为还没有被社区通告,但在有足够的激励和不断增长的匹配池规模的情况下,很可能会出现这样的情况。
这种类型的行为也可能在紧密结合的有机社区中被注意到,比如Commons Stack或Metagame ,在这些社区中,许多相互联系的小团体紧密合作,以资助和实现更大的目标。我们应该注意,为减少共谋而引入的任何系统机制都要尽量减少对有机社区参与的负面影响,否则就有可能剥夺寻求服务的用户的权利。
一个攻击向量是由3个代理和9个具有优化资金策略的补助金建立的,然后将其注入Gitcoin Grants的数据中。
4. 博弈,亚对策(MetaGame)和升级
读者现在可能已经注意到,这种攻击者和Grant版主之间无休止的捉迷藏游戏。随着防止这些攻击的新机制的建立(如MACI设计、女巫抵抗、SybilScores、社区标记或匹配资助),共谋者想出了越来越复杂的策略,从假资助和账户,到坏行为者的大规模协调。我们在这里必须注意到,任何针对特定类型的合谋问题的定制设计的分析解决方案都可以(而且很可能)被另一个精心设计的合谋策略所操纵。
正是由于这个原因,我们推荐的算法治理政策是简单且通用的,并且是严格而数学合理的。我们追求大道至简。
通过成功(success)检测共谋行为:优化差距指标
我们建议,与其试图识别和捕捉所有类型的共谋,不如设计一种机制,使高效率的共谋成为不可能。当共谋的成本大于收益时,恶意的行为者自然会失去共谋的积极性。
首先,我们要确定哪种类型的资金捐款能够最大限度地吸引配套资金,共谋的最终目的是用有限的原始资金吸引尽可能多的匹配资金。
测试优化差距的有效性需要将编造的攻击向量输入到数据中,看它们是否被发现。
因此,我们没有试图列举无数的合谋策略,并设计具体的解决方案来解决每一个策略,而是从另一个角度来解决合谋问题。通过将具有高效匹配资金捐助模式的资助(grants),标记为可疑,我们可以确保捕捉到所有占有大量匹配资金的资助(grants),这样我们就可以将它们传递给Gitcoin争议流程来审查。
第二,我们的目标是赋能Gitcoin团队和社区的集体智慧,以捕捉共谋。我们相信,通过简单地解释QF机制的合谋模式,并提供识别和根据这些信息采取行动的工具,我们可以授权和协调整个社区对抗这些害群之马。
什么是优化差距 (Optimality Gap)
优化差距是衡量特定社区对匹配资金的“优化”程度的一种度量。其基本思想是,总是有可能重新安排和再组合与一个社区(或子图)相关的捐款,以使你从总资金池中获得最大的总资金。
在概念层面上,高效率的社区会有一个相对较低的优化差距,而大多数社区会有一种中位数的优化差距。鉴于合谋者实行有意的策略,我们可以假设,一般来说他们通常会获得高效的资助。
但是,我们如何精确地定义一个社区的优化差距呢?首先,我们将优化差距定义为预选的相邻子图中的最大匹配资金和实际匹配资金之间的差异。考虑到现有的grants和捐赠者以及他们的原始捐赠,如果捐赠者以不同的模式给该项目捐款,优化差距则计算出它可以得到的匹配资金和实际得到的匹配资金之间的差异。
至于社区,有几种定义的方法,比如使用社区检测算法或无监督学习。这是一个开放性的研究问题,现在我们使用的是一种启发式的方法,即假设一个社区可以通过使用相邻子图来代理,这本质上是一种距离方法,用于确定相关的检查社区。
利用“优化差距”可以生成信号,以标记出可疑的优化资金,以便进行更仔细的检查。
赋能社群研究
此篇我们的目标是授权Gitcoin社区的研究人员使用这些工具来测试和迭代他们自己的研究问题,以释放人群的智慧,探索如何减轻QF的攻击向量。
开源真正的力量是,今天生成的模型将可以被迭代,并比我们现在走得更远。
在下面的repo,中,可以发现我们在本文中讨论过的一些攻击向量的实现,可以使用cadCAD进行测试,甚至可以自己构建!我们希望看到人们设计自己的合谋模式,使用这些算法,并提出改进。
https://github.com/jiajia20/GitCoin_attack/blob/main/attack_vector.ipynb
我们正在进行的研究旨在确定可能的合谋模式。在研究的第一阶段,我们构建了简单的攻击方案,并在cadCAD模型中实施了这些方案,并进行了测试,以查看是否可以使用Optimality Gap算法捕获它们。在即将进行的研究中,我们计划扩大规模,通过充分利用实时Gitcoin数据来标记共谋攻击方案。
与往常一样,我们鼓励社区探索和试验Gitcoin cadCAD模型存储库,您可以在其中访问此分析中的许多数据。
GitHub存储库:https://github.com/gitcoinco/gitcoin_cadcad_model
Gitcoin:twitter.com/gitcoin
BlockScience:twitter.com/block_science
cadCAD:twitter.com/cadcad_org
DAOrayaki DAO研究奖金池:
资助地址: 0xCd7da526f5C943126fa9E6f63b7774fA89E88d71
投票进展:DAO Committee 3/7 通过
赏金总量:150 USDC
研究种类:DAO, Gitcoin Grants, Quadratic funding, collusion
原文作者: Jiajia, Danilo Lessa Bernardineli, and Jeff Emmett
贡献者:Demo, DAOctor @DAOrayaki
原文: How to Attack and Defend Quadratic Funding