一、准备
本合约实例演示了bsc上的合约代码,支持pancakeswap和fstswap交易所。合约模式如下:
1、自动添加流动性,交易手续费中扣除一定比例,用于自动添加bnb或者fist交易对的流动性。
2、交易手续费自动卖出转变成BNB回流到营销钱包和开发者钱包地址
3、持币分红fist,对持有本币的用户将交易手续费转变成fist空投到持币用户钱包地址。
4、合约地址中的代币余额超过指定数量就开始执行以上三种模式本币到bnb或者fist的转换
【附注20221216】
持币分红是整改合约的核心功能点,基本原理是分红子合约追踪tracker来分红指定币种。通过追踪子合约与本币的等量关系,转换交易手续费为分红币种,空投给所有持币用户。在子合约部署时要完成基本的合约初始化功能,部署完成后要配合主合约地址,建立关联关系。主合约在部署时要指定子合约地址。以此才能事项主子合约的联动。实现持币分红效果。
二、代码实现
1、主合约功能代码:
function swapBack() internal swapping { uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee; uint256 tokensToSell = swapThreshold.div(rate); uint256 amountToLiquify = tokensToSell.div(totalFee).mul(dynamicLiquidityFee).div(2); uint256 amountToSwap = tokensToSell.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = WBNB; uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountBNB = address(this).balance.sub(balanceBefore); uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2); uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee); uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee); uint256 amountBNBDev = amountBNB.mul(devFee).div(totalBNBFee); try distributor.deposit{value: amountBNBReflection}() {} catch {} (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}(""); (tmpSuccess,) = payable(devFeeReceiver).call{value: amountBNBDev, gas: 30000}(""); // only to supress warning msg tmpSuccess = false; if(amountToLiquify > 0){ router.addLiquidityETH{value: amountBNBLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountBNBLiquidity, amountToLiquify.div(rate)); } }
其中包括自动添加流动性,转账将交易手续费转换成bnb,转账到营销钱包和开发者钱包地址。
2、实时添加持币者到持币分红地址的代码实现
function setIsDividendExempt(address holder, bool exempt) external authorized { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if(exempt){ distributor.setShare(holder, 0); }else{ distributor.setShare(holder, balanceOf(holder)); } }
3、对持币地址判断是否应该获取分红的代码实现
function shouldSwapBack() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _rBalance[address(this)] >= swapThreshold; }
4、分红派发器实时分红firs的代码实现
function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } }
针对以上代码可以修改调整为分红USDT,BNB等任意币种。在以上合约模板基础上可以调整买卖不同的交易手续费,只需要调整对应的手续费比例已经分红的币种合约地址就可以实现,不需要更改合约代码。另外,以上代码可以增加持币分红的条件,比如,持有本币都是才可以获得分红,合约地址余额达到多少才触发swapback等,都可以通过参数配置来实现,无需更改合约代码。
合约代码如下:
至此,完成自动添加流动性营销和开发者钱包分红BNB,持币分红fist的合约代码实现。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册