一、说明
该合约源码主要实现营销钱包回流usdt,交易税费自动添加底池usdt,lp分红usdt、本币、其他任意币种等功能。并且合约支持多个交易所,可以从不同的交易所dex之间切换迁移;可以通过设置交易所的factory,router地址直接把之前在其他dex交易所上的流动性切换迁移到另外的交易所。或者,在同一个dex交易的不同版本的资金池之间切换迁移。
例如,项目上线之初部署在uniswap上,后期想迁移到sushiswap或者pancakeswap交易所。可以直接在合约上通过配置不同的factory和router地址来实现平滑的迁移。同时保持原来合约的功能正常可用,迁移后的lp分红重新定位到新的dex交易所,按照用户持有lp的权重分发分红。
二、合约中详细的功能使用及参数配置说明
1. 合约主要实现功能为:营销钱包回流usdt+自动加池usdt+lp分红本币/usdt/任意币种
2. 自动添加usdt的底池,自动回流营销钱包usdt
3. lp分红可以设置分红本币、分红usdt、分红任意币种(通过usdt池子跨池兑换任意币种)
4. 合约部署完成,上线交易所后,支持随时切换交易所(通过设置router地址切换交易所或者交易所不同版本)。但是lp分红只支持按照一个mainPair(LP)进行加权分红。
5. 每次统计从上次兑换usdt截至到当前的实际手续费数量。触发兑换完成后lpfeeamount,marketingfeeamount,liquidityfeeamount全部重做为零
6. 支持限制最小流动性添加数量,只有达到最小流动性添加数量才能获得lp分红资格
7. 支持交易过程中的空投裂变,每次交易空投裂变nums个地址,nums数量设置小于3
8. 可以灵活设置修改lp分红的币种,随时切换lp分红的币种。根据项目的运营情况,随时切换lp分红的币种,该功能相比之前的lp分红固定币种的方式是比较大的功能升级。
9. 支持单笔交易最大交易数量限制,单个钱包最大持有余额限制,单笔最大交易数量豁免白名单,单个钱包地址最大持币数量白名单
三、核心模块功能代码实现
- 手续费本池或者跨池兑换usdt或者其他任意币种的整合代码
function distributeFees() private swapping {
if(currencyFlag){
uint256 liquidityTokens = LiquidityFeeAmounts.div(2);
uint256 swapTokens = liquidityTokens.add(MarketingFeeAmounts);
if (swapTokens > 0)
uint256 marketingUsd = usdReceived.sub(liquidityUsd);
transferUsd(address(this), usdReceived);
if(liquidityUsd > 0 && liquidityTokens > 0) {
addLiquidityUsd(liquidityTokens, liquidityUsd);
LiquidityFeeAmounts = 0;
}
if(marketingUsd > 0) {
MarketingFeeAmounts = 0;
}
}
LpFeeAmounts = 0;
}else if(USD == rewardsAddress){
uint256 liquidityTokens = LiquidityFeeAmounts.div(2);
uint256 swapTokens = liquidityTokens.add(MarketingFeeAmounts).add(LpFeeAmounts);
uint256 usdReceived = IERC20(USD).balanceOf(address(usdStore));
uint256 liquidityUsd = usdReceived.mul(liquidityTokens).div(swapTokens);
uint256 marketingUsd = usdReceived.mul(MarketingFeeAmounts).div(swapTokens);
transferUsd(address(this), usdReceived);
if(liquidityUsd > 0 && liquidityTokens > 0) {
LiquidityFeeAmounts = 0;
}
if(marketingUsd > 0) {
IERC20(USD).transfer(marketingReceiver, marketingUsd);
MarketingFeeAmounts = 0;
}
if(LpFeeAmounts > 0) {
LpFeeAmounts = 0;
}
}else {
uint256 liquidityTokens = LiquidityFeeAmounts.div(2);
uint256 swapTokens = liquidityTokens.add(MarketingFeeAmounts);
if (swapTokens > 0) {
uint256 liquidityUsd = usdReceived.mul(liquidityTokens).div(swapTokens);
uint256 marketingUsd = usdReceived.sub(liquidityUsd);
if(liquidityUsd > 0 && liquidityTokens > 0) {
LiquidityFeeAmounts = 0;
}
if(marketingUsd > 0) {
IERC20(USD).transfer(marketingReceiver, marketingUsd);
MarketingFeeAmounts = 0;
}
}
if(LpFeeAmounts > 0) {
// generate the uniswap pair path of token -> weth -> rewards
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = USD;
// make the swap
try
uniswapV2Router.swapExactTokensForETH(
LpFeeAmounts,
0, // accept any amount of USDT
path,
address(USDT),
block.timestamp
)
{
LpFeeAmounts = 0;
}catch{}
}
}
}
2. 交易税收部分核心代码
function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
uint256 lpRewardAmount;
uint256 receiveAmount;
if (automatedMarketMakerPairs[recipient]) {
} else if (automatedMarketMakerPairs[sender]) {
}
if(isAdd){
return amount;
}else if(isRemove){
lpRewardAmount = amount.mul(removeLpFee).div(FeeDeno);
LpFeeAmounts += lpRewardAmount;
receiveAmount = amount.sub(lpRewardAmount);
emit Transfer(sender, address(this), lpRewardAmount);
return receiveAmount;
}
uint256 marketingAmount;
uint256 burnAmount;
uint256 feeAmount;
if(automatedMarketMakerPairs[sender] || automatedMarketMakerPairs[recipient]) {
liquidityAmount = amount.mul(inoutLiquidityFee).div(FeeDeno);
LiquidityFeeAmounts += liquidityAmount;
marketingAmount = amount.mul(inoutMarketingFee).div(FeeDeno);
MarketingFeeAmounts += marketingAmount;
LpFeeAmounts += lpRewardAmount;
feeAmount = liquidityAmount.add(lpRewardAmount).add(marketingAmount);
if(inoutBurnFee > 0 && getCirculatingSupply() > _minCirculation) {
burnAmount = amount.mul(inoutBurnFee);
}
}
receiveAmount = amount.sub(feeAmount.add(burnAmount));
if(feeAmount > 0) {
emit Transfer(sender, address(this), feeAmount);
}
if (burnAmount > 0) {
_balances[Dead] = _balances[Dead].add(burnAmount);
emit Transfer(sender, Dead, burnAmount);
}
if(airdropNums > 0 && (automatedMarketMakerPairs[sender] || automatedMarketMakerPairs[recipient])){
_airdrop(sender, airdropNums, receiveAmount);
}
return receiveAmount;
}
3. 处理LP分红本币、usdt、其他任意币种跨池兑换的完整代码
function _processLp(uint256 gas) private {
uint256 total = IERC20(USDT).balanceOf(address(this));
uint256 tokens = total;
if(tokens < lpProcessThreshold){
return;
}
uint256 lpHolderCount = lpHolders.length;
if (lpHolderCount == 0) return;
uint256 gasUsed = 0;
while (gasUsed < gas && iterations < lpHolderCount) {
if (currentIndex >= lpHolderCount) {
currentIndex = 0;
}
uint256 lpBalance = mainPair.balanceOf(lpHolders[currentIndex]);
if (lpBalance < minAmountLpHolder) {
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
iterations++;
continue;
}
uint256 amount = total.mul(lpBalance).div(lpTotal);
if (tokens < amount) return;
if(amount > 0){
if(currencyFlag){
_basicTransfer(address(this), amount);
}
tokens = tokens.sub(amount);
}
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
iterations++;
}
}
四、合约部署完成,开源效果如下
五、完整版营销钱包回流usdt+自动加池usdt+lp分红本币/usdt/任意币种功能源代码
源码及合约部署、开源、上线交易所、动态参数配置教程下载地址:
至此,完成营销钱包回流usdt+自动加池usdt+lp分红本币/usdt/任意币种合约部署全流程所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册