1. 整体流程
在创建激励池时,需要有两个子流程:
一个是通过通过 FS 的 dashboard 来创建一个 allocation,allocation 表示用户在一段时间内的 分配比例,也是参与激励池分配的最终比例,基于用户 claim 的 token来产生。allocation 生成之后会存储到 eas:
另一个是基于 allocation 来创建一个激励池,激励池在创建完成之后,会创建一个新的合约,会在合约中写入 allocation 中的分配比例以及将要分配的 token:
激励池创建完成之后,就可以向激励池中注入资金,资金注入完成之后,用户就可以在激励池中 claim 自己的激励。
2. 激励池具体设计
- FS 激励池技术方案
- 每次创建的 allocation 创建 EAS 记录并到 ipfs
- 激励池合约创建
- 为每个激励池都创建一个新的合约,每次的分配都基于一个新的合约进行
- 激励池合约在创建时需要指定参与分配的用户地址、用户的分配比例、币种、金额
- 指定金额时为了解决如果注入的金额数量不对,避免资金损失的问题,比如分配 1000u,结果注入了 10000u,如果不指定金额,那么参与分配的人会瓜分全部资金
- 方便后续激励池的迭代和升级
- 资金分散在各个合约中,保证合约资金的安全
- 激励池需要有时间锁,在激励池注入资金之后一段时间之后,激励池的资金才能被 claim
- 合约在时间锁范围内支持 refund,用于处理资金注入种类和数额不对的情况,refund 只能退回到原地址,不能指定新地址
- 待定讨论问题:
- 是否支持在单合约中支持多种 token 的分配?(比如一个 pool 中同时打入 1000 USDT 和 1000 USDC)
- 结论:在合约层面支持多种,但是前端页面上暂时支持一种
- refund 是只在时间锁范围内支持还是在后续的任意阶段支持
- 方案 1:注入到激励池中的资金在正确的情况下就不允许再 refund,refund 只能用来处理错误的情况
- 方案 2:剩下的资金只能等所有人都 claim 了之后再 refund
- 比如出现多余资金需要怎么处理?比如分配 1000u,结果注入了 10000u,剩下的 9000u 需要等到所有人将 1000u 都 claim 了之后才能 refund 到原地址
是否支持多币种?