从创建配捐池到将资金发放到申请项目手中,需要经历哪些流程?参考文档https://github.com/smartzplatform/constructor-eth-merkle-airdrophttps://github.com/gitcoinco/matching_contractshttps://hackmd.io/@dcgtc/rkKViMJJt#fn6
撰文:Ai 姨
什么是 Matching Pool?
Gitcoin Matching Pool 是由以太坊基金会,用户捐助,赞助机构(或个人)共同构成的配捐池,供 Grants Round 期间,向获得用户投票的项目捐助更多资金。
工作流程
在 GR 期间,为了配捐池的安全和资金分配的合理,从创建配捐池到将资金发放到申请项目手中,Matching Pool 需要经历以下流程:
1. 创建新的 Matching Pool
创建一个新的、多签控制的 Matching Pool 合约,每一轮的多签合约是不一样的,目前 Matching Pool 的多签由 5 个人控制(David Hoffman, Kevin Owocki, Hudson Jameson, Anthony Sassal, Eric Conoar)。
2. 计算获捐情况
GR 完成后,Gitcoin 会计算每笔捐款获得的最终匹配金额,并将每个项目的地址和匹配金额写进 Merkle Tree 中,Merkle Tree 用于提交分配,而不会将所有地址及其份额存储在链上,这是一种常用的空投技术。
3. 将获捐情况「导入」合约
Matching Pool 合约所有者通过调用合约中的 setPayouts
方法,设置 _payouts
变量,并将之前计算好的 Merkle Tree 与其映射。
4. 锁定获捐情况
Matching Pool 合约所有者调用 finalize
方法,将其设置为 true
。注意这里一旦设置为 true
,则 Merkle Tree 的映射将不再能被更新。
5. 向 Matching Pool 转入资金
资助者审查支付映射,如果他们认为没有问题,则可以通过普通的转账形式,将配捐资金转移到 Matching Pool 合约地址上。
6. 打开领取开关
收到配捐资金后, Matching Pool 合约所有者就会调用 enablePayouts
方法,该方法像一个开关,允许 Grants 获取方领取他们的资金。
7. 获捐者领取资金
拿到 Grants 的项目方,调用 claimMatchPayout
方法来领取自己的 grants。
分配方式
在之前的 Gitcoin 101 中我们曾提到 GR 是根据二次方投票方式进行配捐的,但具体是如何分配的呢?
算法很简单,比如项目 A 的可拿配捐资金为
其中 m 为配捐池的总金额,n_a 为项目 A 获得的用户投票数,Totalvotes 为 GR 中所有项目获得的总票数。
不过,为了避免头部效应,让更多的项目方获得资助,Gitcoin 对每轮 GR 的单项目获取 Grants 数量设置了 2.5% 的硬顶。比如 GR 配捐池的总金额为 100 万美金,那么一个项目最多也只能拿到 2.5 万美金的配捐,超出部分,则返回配捐池,重新进行分配。