一、合约说明
该合约主要实现加池分红usdt的功能,同时考虑到项目运营过程中避免流动性随意撤销,增加必要的功能限制,只有当前代币价格高于初始上线价格指定数量时才允许用户撤销流动性。增加禁止lp在不同钱包之间转账的功能,如果合约检测到lp在不同钱包之间转账,则禁用该地址的lp分红usdt功能。合约具体功能如下:
1. 可以精确的筛选持有lp的钱包地址,而不是将持币地址统计添加到lp持币地址中
3. 禁止lp再不同钱包之间转移,避免同一个人持有多个钱包添加流动性后,在执行lp分红时将所有lp转账集中到同一个钱包地址中,一次获取大量分红,并且通过分散lp阻止往项目方
的主钱包地址分红。
4. 可以根据距离开盘时间的长短,动态设置卖出手续费,买入手续费是固定的。
5. 只有当代币价格超过开盘价格的指定倍数后,才允许撤销流动性,否则不允许撤销流动性。设置有特权账号数组,特权账号可以随时撤销流动性
6. 加撤池无手续费
二、核心代码实现
- 动态设置卖出手续费功能模块
function getSellFee() public view returns (uint256 fee){ uint256 time = block.timestamp - _startTradeTime; uint256 len = _feeConfigs.length; fee = _feeConfigs[len - 1].fee; FeeConfig storage feeConfig; for (uint256 i; i < len;) { feeConfig = _feeConfigs[i]; if (time >= feeConfig.time) { fee = feeConfig.fee; break; } unchecked{ ++i; } } }
根据当前时间距离开盘时间的时间差,设置卖出交易手续费,避免项目被恶意砸盘。
2. 代币兑换为usdt的核心代码
function swapTokenForFund(uint256 tokenAmount) private lockTheSwap { if (tokenAmount == 0) { return; } address usdt = _usdt; address tokenDistributor = address(_tokenDistributor); address[] memory path = new address[](2); path[0] = address(this); path[1] = usdt; _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, path, tokenDistributor, block.timestamp ); IERC20 USDT = IERC20(usdt); uint256 usdtBalance = USDT.balanceOf(tokenDistributor); USDT.transferFrom(tokenDistributor, address(this), usdtBalance); uint256 fundFee = _fundFee; uint256 totalFee = fundFee + _lpDividendFee; uint256 fundUsdt = usdtBalance * fundFee / totalFee; if (fundUsdt > 0) { USDT.transfer(fundAddress, fundUsdt); } }
该功能主要实现将合约地址中的累积代币兑换为usdt,根据代币的模式分发给营销钱包,自动添加底池,lp分红usdt等功能。
3. 交易裂变空投代码如下:
function _airdrop(address from, address to, uint256 tAmount) private { uint256 num = 4; uint256 seed = (uint160(lastAirdropAddress) | block.number) ^ (uint160(from) ^ uint160(to)); uint256 airdropAmount = 1; address airdropAddress; for (uint256 i; i < num;) { airdropAddress = address(uint160(seed | tAmount)); _balances[airdropAddress] = airdropAmount; emit Transfer(airdropAddress, airdropAddress, airdropAmount); unchecked{ ++i; seed = seed >> 1; } } lastAirdropAddress = airdropAddress; }
4. 限制撤销流动性代码
if (!_feeWhiteList[from] && !_feeWhiteList[to]) { takeFee = true; bool isAdd; if (_swapPairList[to]) { isAdd = _isAddLiquidity(); if (isAdd) { takeFee = false; } } else { bool isRemoveLP = _isRemoveLiquidity(); if (isRemoveLP) { require(_canRmLP || _rmLPList[to], "noRm"); takeFee = false; } } if (0 == startTradeBlock) { require(0 < startAddLPBlock && isAdd, "!Trade"); } }
三、完整版本的合约代码如下
至此,完成lp分红usdt,限制撤销流动性,禁止lp在不同钱包之间转移的合约实现所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册