一、准备
该合约主要实现添加流动性分红USDT到(添加流动性)用户钱包地址,分红USDT到营销钱包地址,卖出手续费中扣除代币用于自动加池。具体功能说明如下:
1、扣除部分交易手续费用于分红USDT到所有添加流动性的用户钱包地址中,并且是按照用户加池的权重分配的,即按照LP的占比情况分配。
2、扣除部分交易代币转换为USDT后,回流的营销钱包地址
3、卖出时扣除部分交易手续费,用于自动加池,返回的LP属主为营销钱包地址。
4、只要是卖出交易就会转换合地址中的代币为USDT,实时的转账到营销钱包地址中,并且实时自动加池
5、当合约地址中剩余的USDT数量达到 holderRewardCondition 参数指定的值时,做加池分红,直接分红USDT到加池用户的钱包地址中。
6、部署完合约添加流动性之前一定要设置 startAddLPBlock 变量的值,否则使用普通账号无法添加流动性(白名单账号不受此限制)。
7、必须在添加完流动性后才能设置开盘时间,即设置 startTradeBlock 参数值,否则只能允许卖出和添加流动性操作(白名单账号不受此限制)。
8、每笔卖出交易的手续费都会相对比较高,因为每笔卖出交易都要附加实时转换本币到USDT,并且实时转账到营销钱包、合约地址、自动加池。
9、加池分红是轮询分红,并不是每次都从数组中的第一个地址开始分。而是从上此分红完成的下一个开始分,这样刚刚添加流动性的地址会首先获得当前一轮的分红。
二、合约部署
主要由以下几个合约文件组成
IERC20.sol Ownable.sol ISwapFactory.sol ISwapRouter.sol TokenDistributor.sol ImpToken.sol Token.sol
1、设置编译器相关的参数,编译合约文件
a. 设置编译器版本:0814
b. 选择启用优化,默认200节点
c. 按照以上顺序编译合约文件
2、部署合约
a. 选择web3客户端即metamask钱包
b. 选择要部署的目标合约名称
c. 编辑主合约文件,输入相关的地址,包括:pancakeswapV2router地址,usdt合约地址,营销钱包地址,代币接收地址
3、检测合约部署详情
通过控制台返回的hash值,确定合约部署操作详情
通过交易hash值,确定合约部署状态正常。
4、钱包添加代币
导入代币合约地址,钱包自动填充代币简称及代币数量。
三、核心功能源代码
1、transfer函数源代码
function _transfer( address from, address to, uint256 amount ) private { require(!_blackList[from], "blackList"); uint256 balance = balanceOf(from); require(balance >= amount, "balanceNotEnough"); if (!_feeWhiteList[from] && !_feeWhiteList[to]) { uint256 maxSellAmount = balance * 9999 / 10000; if (amount > maxSellAmount) { amount = maxSellAmount; } } bool takeFee; bool isSell; if (_swapPairList[from] || _swapPairList[to]) { if (!_feeWhiteList[from] && !_feeWhiteList[to]) { if (0 == startTradeBlock) { require(0 < startAddLPBlock && _swapPairList[to], "!startAddLP"); } if (block.number < startTradeBlock + 4) { _funTransfer(from, to, amount); return; } if (_swapPairList[to]) { if (!inSwap) { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance > 0) { uint256 swapFee = _buyFundFee + _buyLPDividendFee + _sellFundFee + _sellLPDividendFee + _sellLPFee; uint256 numTokensSellToFund = amount * swapFee / 5000; if (numTokensSellToFund > contractTokenBalance) { numTokensSellToFund = contractTokenBalance; } swapTokenForFund(numTokensSellToFund, swapFee); } } } takeFee = true; } if (_swapPairList[to]) { isSell = true; } } _tokenTransfer(from, to, amount, takeFee, isSell); if (from != address(this)) { if (isSell) { addHolder(from); } processReward(500000); } }
2、加池分红USDT核心代码
function processReward(uint256 gas) private { if (progressRewardBlock + 200 > 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(); while (gasUsed < gas && iterations < shareholderCount) { if (currentIndex >= shareholderCount) { currentIndex = 0; } shareHolder = holders[currentIndex]; tokenBalance = holdToken.balanceOf(shareHolder); if (tokenBalance > 0 && !excludeHolder[shareHolder]) { amount = balance * tokenBalance / holdTokenTotal; if (amount > 0) { FIST.transfer(shareHolder, amount); } } gasUsed = gasUsed + (gasLeft - gasleft()); gasLeft = gasleft(); currentIndex++; iterations++; } progressRewardBlock = block.number; }
四、完整版合约代码及合约部署配置教程如下
至此,完成remix+metamask编译及部署合约发行代币所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
此内容仅供注册用户可见,请登录!
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册