一、准备
本合约实列主要实现添加流动性分红usdt,代币燃烧通缩功能。用户添加流动性资金池获取对应数量的LP,按照用户获取LP数量的权重分红对应的手续费转换为USDT到添加流动性的用户钱包地址中。同时,代币线上交易时燃烧通缩到部分代币,变相提升代币稀缺度。具体的合约实现功能如下:
1、总计5%手续费,其中2%燃烧,3%加池分红usdt
2、线上交易收手续费,线下转账不收手续费
3、自动设置开盘时间为首次添加流动性时间戳
4、代币派发器合约SMCWarp可以设置usdt回流到指定的开发者钱包地址,正常情况应该是转账到业务主合约地址
5、加池分红usdt,最多分红20个加池地址,避免过多子交易导致gas费升高。下次分红从上次分红的结束索引继续开始分
二、合约代码实现
1、业务主合约构造函数:
constructor(address tokenOwner) ERC20("Bitcoin", "BTC") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), address(_baseToken)); uint256 total = 80000 * 10**18; _approve(address(this), address(0x10ED43C718714eb63d5aA57B78B54704E256024E), total.mul(1000)); USDT = IERC20(_baseToken); pair = IERC20(_uniswapV2Pair); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _tokenOwner = tokenOwner; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFees[tokenOwner] = true; _isExcludedFromFees[tokenOwner] = true; _isExcludedFromVipFees[address(this)] = true; swapTokensAtAmount = total.div(10000); _mint(tokenOwner, total); }
2、代币兑换为USDT合约代码实现:
function swapTokensForOtherUsdt(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = address(_baseToken); uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(warp), block.timestamp ); warp.withdraw(); }
3、当前流动性资金池状态判断功能:
function _isAddLiquidityV1()internal view returns(bool ldxAdd){ address token0 = IUniswapV2Pair(address(uniswapV2Pair)).token0(); address token1 = IUniswapV2Pair(address(uniswapV2Pair)).token1(); (uint r0,uint r1,) = IUniswapV2Pair(address(uniswapV2Pair)).getReserves(); uint bal1 = IERC20(token1).balanceOf(address(uniswapV2Pair)); uint bal0 = IERC20(token0).balanceOf(address(uniswapV2Pair)); if( token0 == address(this) ){ if( bal1 > r1){ uint change1 = bal1 - r1; ldxAdd = change1 > 1000; } }else{ if( bal0 > r0){ uint change0 = bal0 - r0; ldxAdd = change0 > 1000; } } }
4、添加流动性分红usdt按照LP持币权重分发代码实现:
function _splitOtherSecond(uint256 sendAmount) private { uint256 buySize = ldxUser.length; uint256 totalAmount = pair.totalSupply(); if(buySize>0 && totalAmount > 0){ address user; if(buySize >20){ for(uint256 i=0;i<20;i++){ if(ldxindex >= buySize){ldxindex = 0;} user = ldxUser[ldxindex]; uint256 amountUsdt = pair.balanceOf(user).mul(sendAmount).div(totalAmount); if(amountUsdt>10**10){ USDT.transfer(user,amountUsdt); } ldxindex = ldxindex.add(1); } }else{ for(uint256 i=0;i<buySize;i++){ user = ldxUser[i]; uint256 amountUsdt = pair.balanceOf(user).mul(sendAmount).div(totalAmount); if(amountUsdt>10**10){ USDT.transfer(user,amountUsdt); } } } } }
5、SMCWarp接口具体实现类代码如下:
contract SMCWarp is Owner { IERC20 public usdtToken; IERC20 public dorToken; function initialize(IERC20 _usdtToken, IERC20 _dorToken) external isOwner { usdtToken = _usdtToken; dorToken = _dorToken; usdtToken.approve(address(dorToken), uint256(-1)); } function approve() external { usdtToken.approve(address(dorToken), uint256(-1)); } function withdraw() external returns(bool){ uint256 amountUsdt = usdtToken.balanceOf(address(this)); usdtToken.transfer(dorToken,amountUsdt); return true; } }
三、完整版本合约源代码及部署配置教程文档如下
至此,完成添加流动性分红USDT+燃烧通缩合约代码实现所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册