猴基金分币智能合约
November 15th, 2021

分币智能合约的设计原则

透明性

  •  白名单, 106名参与者地址作为白名单写入合约
  •  数据上链,从白名单写入 到 白名单审核 再到 ETH 分发 所有过程都在链上进行

安全性

  • ETH 严格按照白名单分发, 分发过程由合约控制
  • 合约保证白名单地址的变更一定由原地址的owner发起
  • 白名单一旦审核确认后原则上不可更改
  • 白名单被审核确认后才能开始Claim ETH
  • 敏感操作例如白名单审核确认 只允许多签操作

可追溯

  •  分发的次数、金额和每个地址接收的金额数据 链上永久可查

易用性

  •   合约提供功能 方便查询ETH分发的历史信息 

ETH分发流程

合约部署 => 106名参与者原始白名单导入合约 =>  调用合约更改白名单 => 多签审核确认白名单 => ETH转入合约 => 合约按照白名单分发ETH

LP地址变更流程

换LP的地址是一个很敏感的事情,要避免被冒领的情况发生。
合约提供对LP换地址的验证功能。所以这里需要我们LP用原有的钱包地址链接合约,发起更换地址的请求(request),来证明自己对LP地址的ownership。 再在discord群里发自己的request的序号(Nonce),多签通过合约审核确认request,LP的新地址生效。

非法地址的处理

非法地址指的是交易所地址,当初打币的时候LP误从交易所直接打币的。

这样的地址只能是多签不经过钱包地址owner的验证,直接调用合约更改LP的钱包地址,属于高风险操作。因此在操作前会要在discord群里公示,而且在白名单审核确认后,不再允许绕过owner验证直接修改LP钱包地址的操作。

这样就可以基本保证各个LP的地址的安全,不会被轻易的冒领了。

合约部署在BSC链上

现在合约支持有两个版本,一个是以太主网上的,一个是在BSC链上的, 部署在以太主网上的合约,大家claim的就直接是ETH(不是WETH)在BSC链上版本合约,大家claim的就是 BETH(Binance-peg eth)。考虑到现在主网上平均gas费一直在100以上,所以部署到BSC链上以节省大家claim的气费。

GP rewards的计算

合约里区分本金(Principal) 和利润(Profit),所有进入合约的资金都会被用来优先偿还本金,本金偿还完毕后(106个ETH),后续入账才会用来结算收益和GP的rewards。

利润部分合约会按3份奖励给GP预留,也就是利润部分最开始是除以109分给各个LP的。等大家投票结束,多签会根据投票的结果,通过合约设置最终是几份。如果最终是2份,之前预留多出来的一份,会再分发给各个LP。

Claimable的计算

合约里记录了每一个人的已经claimed的历史记录,合约里的getClaimable()方法会先用当前的累积收入的总数量除来计算每个人应得的quota,这个quota每个人都是一样的,再用quota减去这个人已经claimed的数量,就是他还可以claimable的数量。 最后不管一个LP claim过几次,每个LP最后的拿到的一定符合下面的公式,和claim的次数和时机无关。

总累计ETH没超过 106: LP claimable = 总累计的ETH数量 / 106
总累计ETH超过106 : LP claimable = 1 + (总累计的ETH数量 - 106) / (106 + rewards)

智能合约方法列表

合约源代码

Write Contract

  • addLP 增加一个LP [只能多签] [只能在白名单确认前]
  • addReplaceLPAddressRequest LP提交更换地址的申请 [只能LP]
  • cancelReplaceLpRequest LP撤销更换地址的申请 [只能LP]
  • claim LP claim自己目前的收益 [只能LP] [只能在白名单确认后]
  • claimGPRewards GP claim 奖励 [只能GP] [只能在Rewards放开后]
  • confirmReplaceLPRequest 多签确认LP申请的修改的地址生效 [只能多签]
  • confirmWhiteList 多签审核确认白名单 [只能多签]
  • initialize 部署时初始化合约
  • pullFunds 特殊情况时多签将合约里的资产转到多签钱包 [只能多签]
  • rejectReplaceLPRequest 多签拒绝某个LP地址更改请求 [只能多签]
  • releaseToAll 帮所有LP claim到LP各自的钱包 [只能在白名单确认后]
  • releaseGPRewards 确认GP的rewards份额,并放开提取 [只能多签]
  • removeLP 多签删除一个LP的地址 [只能多签] [只能在白名单确认前]
  • renounceOwnership 使合约无主化 [只能多签]
  • replaceLP 替换一个LP的地址 [只能多签] [只能在白名单确认前]
  • transferOwnership 多签转移合约的所有权给别人 [只能多签]

Read Contract

  • containsLP 检查给定地址是否是LP
  • getClaimable 查询给定的LP目前能claim的ETH的数量
  • getReplaceLPRequest 查询给定序号对应的LP更换地址申请的详细信息
  • lpAtIndex 按给定序号查询对应LP的地址
  • lpClaimed 查询给定LP已经claim的数量
Subscribe to Kingter
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from Kingter

Skeleton

Skeleton

Skeleton