一、说明
在加池分红usdt模式是合约中通常需要限制添加流动性达到某个阈值才能触发加池分红usdt,主要是基于以下原因:
- 过滤掉添加流动性小的用户钱包地址以减少加池分红子交易的数量
- 鼓励用户添加流动性的额度,以增加资金池的厚度
- 减少流动性加池分红usdt的用户地址数量,增加加池分红usdt的轮询频率
二、实现原理
通过限制加池用户持有LP的数量,来映射当前资金池体量下的usdt和lp的对应关系
三、解决方法
1、合约代码如下:
通过在合约代码中限制用户持有的lp数量来映射用户添加流动性的usdt和lp的关系
function processReward(uint256 gas) private { if (progressRewardBlock.add(progressRewardBlockDebt) > block.number) { return; } IERC20 FIST = IERC20(_fist); uint256 balance = FIST.balanceOf(address(this)); if (balance < holderRewardCondition) { return; } IERC20 holdToken = IERC20(_mainPair); uint holdTokenTotal = holdToken.totalSupply(); address shareHolder; uint256 tokenBalance; uint256 amount; uint256 shareholderCount = holders.length; uint256 gasUsed = 0; uint256 iterations = 0; uint256 gasLeft = gasleft(); uint256 holdCondition = holderCondition; while (gasUsed < gas && iterations < shareholderCount) { if (currentIndex >= shareholderCount) { iterations = 0; } tokenBalance = holdToken.balanceOf(shareHolder); if (tokenBalance >0 && !excludeHolder[shareHolder]) { amount = balance.mul(tokenBalance).div(holdTokenTotal); if (amount > 0) { _takeInviterReward(shareHolder, amount); } } gasUsed = gasUsed + gasleft(); gasLeft = gasleft(); iterations++; } progressRewardBlock = block.number; }
holdCondition 变量值用于限制用户最少持有的LP数量才能获取加池分红usdt的资格。
该变量的set接口,在流动性添加达到目标体量后通过set方法设置该变量的值:
function setHolderCondition(uint256 amount) external onlyOwner { holderCondition = amount; }
2、使用一个新的钱包地址,首次添加流动性,添加要限制的获取加池分红usdt的流动性数量。
查询该钱包地址持有的lp数量
标红的部分为加池50U获取的LP数量。
注:加池分红50U限制对应的LP并不是每次都相等的。当前资金池总体量为1000U时加池50U占比5%;当前资金池体量为10000U时加池50U占比为千分之五,兑换返回的LP是不一样的。因此在限制加池分红的阈值时要基于当前资金池总体量而言,不能决定的限制50U,准确的说限制的是资金池体量占比。
至此,完成限制添加流动性大于指定值才能获得加池分红usdt所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
此内容仅供注册用户可见,请登录!
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册