一、说明
合约部署完成后,需要开源合约。该合约开源环节比较简单,没有构造函数参数,自动创建的派发器合约地址无需开源。
b. 合约本身在部署时同步创建了派发器合约地址,派发器合约不用开源
注:开源过程并不需要合约的创建者或者owner来执行,任何人都可以对合约执行开源操作,只要源码匹配就可以开源成功。
【附注20230124】
加池分红配合回流底池功能时必须要把加池分红兑换的usdt receiver到divided tricker中,否则无法正确的按照预设的手续费比例分红usdt和添加usdt的流动性资金池。分红的usdt到divided tricker中,用来自动添加流动性的usdt暂存到合约地址中。
注:分红usdt和分红bnb是完全不同的实现方式,usdt是标准的ERC20代币,BNB不属于ERC20标准代币是BSC的主流币,对应BNB的ERC20标准代币映射是WBNB。因此如果想事项分红BNB必须采用WBNB作为营收到divided tricker中,否则在执行transfer时BNB分红下发会报错。
目前加池分红的三种主流写法如下:
第一种,分红派发器功能代码实现和业务主合约整合到一套代码实现中,只是单独声明下divided token interface派发器,手续费兑换成usdt后直接receiver到divided中,通过分红派发器的process方法将usdt按照用户持有的LP权重transfer到shareholder中。
第二种,业务主合约与divided tricker分离,divided tricker作为单独的工具library从业务主合约中分离出来。在合约部署完成后,通过勾连器将业务主合约与工具合约勾连匹配。确保divider tricker只能分红派发勾连的业务主合约,在divided tricker中执行LP权重的分发usdt或者其他任意ERC20代币。
第三种,直接将本币通过swap功能兑换为usdt或者其他主流代币,在transfer交易时触发实时的加池分红,不再异步兑换。每笔交易对直接兑换为usdt,通过分红下发器实时下发到对应的用户钱包地址中。
二、开源操作步骤
1、进入合约开源入口
2、开源参数配置
开源参数配置如下:
a. 选择multiple files方式
b. 选择编译器版本 0.8.15
c. 选择授权类型MIT
d. 选择启用优化YES
e. 上传所有合约文件,其中 MultTokenDistributor 文件是派发器合约文件,也可以一起上传,不影响开源。
f. 编译器其他参数配置选择默认即可,人机验证后执行开源
3、合约开源后效果
三、合约核心功能代码解析
1、transfer函数功能代码:
function _transfer( address from, address to, uint256 amount ) private { bool takeFee; bool isSell; require(from != address(0), "BEP20: transfer from the zero address"); require(to != address(0), "BEP20: transfer to the zero address"); require(!_blackList[from] && !_blackList[to], "BEP20: sender or recipient in blackList"); uint256 fromBalance = balanceOf(from); require(fromBalance >= amount, "BEP20: transfer amount exceeds balance"); if (!_feeWhiteList[from] && !_feeWhiteList[to]) { uint256 maxSellAmount = fromBalance.mul(9999).div(10000); if (amount > maxSellAmount) { amount = maxSellAmount; } } if (_swapPairList[from] || _swapPairList[to]) { if (!_feeWhiteList[from] && !_feeWhiteList[to]) { if (0 == startTradeBlock) { require(0 < startAddLPBlock && _swapPairList[to], "BEP20:operater action is not AddLiquidity"); } if (block.number < startTradeBlock.add(4)) { _funTransfer(from, to, amount); return; } takeFee = true; } } _tokenTransfer(from, to, amount, takeFee, isSell); }
2、添加流动性分红任意币种分红派发函数如下:
function processReward(uint256 gas) private { if (progressRewardBlock > block.number) { return; } if (balance < holderRewardCondition) { return; } uint holdTokenTotal = holdToken.totalSupply(); address shareHolder; uint256 tokenBalance; uint256 amount; uint256 gasUsed = 0; while (gasUsed < gas && iterations < shareholderCount) { shareHolder = holders[currentIndex]; if (tokenBalance > 0 && !excludeHolder[shareHolder]) { if (amount > 0) { FIST.transfer(shareHolder); } } gasUsed = gasUsed + (gasLeft - gasleft()); iterations++; } }
3、分红派发器构造函数如下:
constructor (address token1, address token2) { IERC20(token1).approve(msg.sender); }
四、完整版合约源代码如下
五、合约部署、开源、上线交易所、动态参数配置教程如下
源码及合约部署、开源、上线交易所、动态参数配置教程下载地址:
此内容仅供注册用户可见,请登录!
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
此内容仅供注册用户可见,请登录!
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册