持币分红模式的合约代码一直是是市场上合约包含的主流模式之一,由于分红算法多样化,分红本币的合约采用分摊算法来抵消掉持币分红的手续费,分红其他币种的合约,有的根据指定的分红币种开发,有的通过分红中转派发器实现。本例中讲述通过的分红合约模板,可以实现分红任何币种的合约,俗称万能分红合约,只需要修改分红的代币合约地址,另外配置相关的分红参数就可以实现分红指定的任意币种(包括主流币已经自定义的代币通证)。
【附注20221213】
加池分红任意币种模式指的是持币分红任意币种,而非加池分红即添加流动性分红任何币种。这是两个不同的概念。从合约是实现功能复杂度上来看,持币分红的实现方式要复杂些,合约执行时相应产生的gas费用要高于加池分红。
BABYTOKENDividendTracker合约即为tracker派发器合约,该合约的部署是整个合约的重点。涉及到父子合约部署的情况,需要先部署子合约,再部署主合约。合约部署完成后还需要同时配置父子合约,互相验证两个合约,配置参数,挂钩父子合约,才能联动,否则父子合约不能配合实现持币分红功能。
在设计合约时通常只会选择一种分红模式,不会同时包含持币分红和加池分红。如果两种分红模式都包含在合约中,当触发该两种分红的交易叠加到同一笔卖出交易时,产生的gas费用非常高,非常容易导致交易失败,因此两种分红模式不应该同时出现在同一个合约中。
持币分红主要的实现原理:通过派发器兑换交易手续费按照用户持有的tracker代币的权重分红到所有持币地址中。在合约部署时需要先部署tracker合约,再部署主合约。
BABYTOKENDividendTracker代码初始化函数如下:
function initialize( address rewardToken_, uint256 minimumTokenBalanceForDividends_ ) external initializer { DividendPayingToken.__DividendPayingToken_init( rewardToken_, "DIVIDEND_TRACKER", "DIVIDEND_TRACKER" ); claimWait = 3600; minimumTokenBalanceForDividends = minimumTokenBalanceForDividends_; }
初始化代币tricker的名称为DIVIDEND_TRACKER 。
因为作为分红跟踪器,要禁用转账功能,实现代码如下:
function _transfer( address, address, uint256 ) internal pure override { require(false, "Dividend_Tracker: No transfers allowed"); }
设置黑白名单功能如下,通过黑名单排除指定地址分红,比如大的项目方地址,流动池地址,开发或者营销钱包地址等,都可以通过黑名单实现。排除大的分红地址,可以让普通用户更能感受到实际的分红,否则按照权重分红的话,普通用户可获得的分红寥寥无几,分红效果不够明显。
执行分红功能的实现代码如下:
function process(uint256 gas) public returns ( uint256, uint256, uint256 ) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if (numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= tokenHoldersMap.keys.length) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if (canAutoClaim(lastClaimTimes[account])) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); }
满足指定条件后,执行指定币种的分红操作,空投给所有满足条件的持币地址。
至此,完成万能分红任何币种合约源代码解析及部署所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册