ACI:专访DoraHacks创始人:如何构建更公平的二次方捐助平台?

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

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

公共领域的治理难题

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

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

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

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

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

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

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

LendHub被黑简析:系LendHub中存在新旧两市场:金色财经报道,据慢雾安全区情报,2023 年 1 月 13 日,HECO 生态跨链借贷平台 LendHub 被攻击损失近 600 万美金。慢雾安全团队以简讯的形式分享如下:

此次攻击原因系 LendHub 中存在两个 lBSV cToken,其一已在 2021 年 4 月被废弃但并未从市场中移除,这导致了新旧两个 lBSV 都存在市场中。且新旧两个 lBSV 所对应的 Comptroller 并不相同但却都在市场中有价格,这造成新旧市场负债计算割裂。攻击者利用此问题在旧的市场进行抵押赎回,在新的市场进行借贷操作,恶意套取了新市场中的协议资金。

目前主要黑客获利地址为 0x9d01..ab03,黑客攻击手续费来源为 1 月 12 日从 Tornado.Cash 接收的 100 ETH。截至此时,黑客已分 11 笔共转 1,100 ETH 到 Tornado.Cash。通过威胁情报网络,已经得到黑客的部分痕迹,慢雾安全团队将持续跟进分析。[2023/1/13 11:11:00]

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

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

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

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

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

安全团队:Defrost Finance被攻击事件简析:金色财经报道,据区块链安全审计公司Beosin旗下Beosin EagleEye安全风险监控、预警与阻断平台监测显示,Defrost Finance预言机被恶意修改,并且添加了假的抵押token清算当前用户,损失超1300万美元。攻击者通过setOracleAddress函数修改了预言机的地址,随后使用joinAndMint函数铸造了100,000,000个H20代币给0x6f31地址,最后调用liquidate函数通过虚假的价格预言机获取了大量的USDT。后续攻击者通过跨链的方式将被盗资金转移到了以太坊的0x4e22上,目前有490万美元的DAI在0x4e22地址上,有500万美元的DAI在0xfe71地址上,剩余300万美元的ETH被转移到了0x3517地址上。[2022/12/25 22:06:35]

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

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

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

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

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

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

Beosin:sDAO项目遭受攻击事件简析:金色财经报道,根据区块链安全审计公司Beosin旗下Beosin?EagleEye 安全风险监控、预警与阻断平台监测显示,BNB链上的sDAO项目遭受漏洞攻击,Beosin分析发现由于sDAO合约的业务逻辑错误导致,getReward函数是根据合约拥有的LP代币和用户添加的LP代币作为参数来计算的,计算的奖励与用户添加LP代币数量正相关,与合约拥有总LP代币数量负相关,但合约提供了一个withdrawTeam的方法,可以将合约拥有的BNB以及指定代币全部发送给合约指定地址,该函数任何人都可调用。而本次攻击者向其中添加了LP代币之后,调用withdrawTeam函数将LP代币全部发送给了指定地址,并立刻又向合约转了一个极小数量的LP代币,导致攻击者在随后调用getReward获取奖励的时候,使用的合约拥有总LP代币数量是一个极小的值,使得奖励异常放大。最终攻击者通过该漏洞获得的奖励兑换为13662枚BUSD离场。Beosin Trace追踪发现被盗金额仍在攻击者账户,将持续关注资金走向。[2022/11/21 7:53:09]

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

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

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

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

慢雾:DEUS Finance 二次被黑简析:据慢雾区情报,DEUS Finance DAO在4月28日遭受闪电贷攻击,慢雾安全团队以简讯的形式将攻击原理分享如下:

1.攻击者在攻击之前先往DeiLenderSolidex抵押了SolidexsAMM-USDC/DEI的LP。

2.在几个小时后攻击者先从多个池子闪电贷借出143200000USDC。

3.随后攻击者使用借来的USDC在BaseV1Pair进行了swap操作,兑换出了9547716.9个的DEI,由于DeiLenderSolidex中的getOnChainPrice函数是直接获取DEI-USDC交易对的代币余额进行LP价格计算。因此在此次Swap操作中将拉高getOnChainPrice函数获取的LP价格。

4.在进行Swap操作后,攻击者在DeiLenderSolidex合约中通过borrow函数进行借贷,由于borrow函数中用isSolvent进行借贷检查,而在isSolvent是使用了getOnChainPrice函数参与检查。但在步骤3中getOnChainPrice的结果已经被拉高了。导致攻击者超额借出更多的DEI。

5.最后着攻击者在把用借贷出来DEI兑换成USDC归还从几个池子借出来的USDC,获利离场。

针对该事件,慢雾安全团队给出以下防范建议:本次攻击的原因主要在于使用了不安全的预言机来计算LP价格,慢雾安全团队建议可以参考Alpha Finance关于获取公平LP价格的方法。[2022/4/28 2:37:18]

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

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

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

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

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

慢雾:Spartan Protocol被黑简析:据慢雾区情报,币安智能链项目 Spartan Protocol 被黑,损失金额约 3000 万美元,慢雾安全团队第一时间介入分析,并以简讯的形式分享给大家参考:

1. 攻击者通过闪电贷先从 PancakeSwap 中借出 WBNB;

2. 在 WBNB-SPT1 的池子中,先使用借来的一部分 WBNB 不断的通过 swap 兑换成 SPT1,导致兑换池中产生巨大滑点;

3. 攻击者将持有的 WBNB 与 SPT1 向 WBNB-SPT1 池子添加流动性获得 LP 凭证,但是在添加流动性的时候存在一个滑点修正机制,在添加流动性时将对池的滑点进行修正,但没有限制最高可修正的滑点大小,此时添加流动性,由于滑点修正机制,获得的 LP 数量并不是一个正常的值;

4. 随后继续进行 swap 操作将 WBNB 兑换成 SPT1,此时池子中的 WBNB 增多 SPT1 减少;

5. swap 之后攻击者将持有的 WBNB 和 SPT1 都转移给 WBNB-SPT1 池子,然后进行移除流动性操作;

6. 在移除流动性时会通过池子中实时的代币数量来计算用户的 LP 可获得多少对应的代币,由于步骤 5,此时会获得比添加流动性时更多的代币;

7. 在移除流动性之后会更新池子中的 baseAmount 与 tokenAmount,由于移除流动性时没有和添加流动性一样存在滑点修正机制,移除流动性后两种代币的数量和合约记录的代币数量会存在一定的差值;

8. 因此在与实际有差值的情况下还能再次添加流动性获得 LP,此后攻击者只要再次移除流动性就能再次获得对应的两种代币;

9. 之后攻击者只需再将 SPT1 代币兑换成 WBNB,最后即可获得更多的 WBNB。详情见原文链接。[2021/5/2 21:17:59]

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

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

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

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

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

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

张剑南:对,通过空投吸引选票是一种常见的共谋。

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

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

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

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

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

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

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

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

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

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

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

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

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

律动BlockBeats:MACI这个概念听起来有些复杂,能否用更通俗的话解释一下的基本逻辑?比如我能否理解为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的第一轮正式的MACIGrant是在今年的ETHDenver。今年的ETHDenver首次通过DoraHacks提供的MACI基础设施进行社区二次方投票。2月20号,ETHDenver22的评委会从数百个项目中选出30个项目,由在场的约12000名参赛开发者和参会者进行投票。

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

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

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

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

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

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

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

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

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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:33ms0-5:861ms