- A+
持币分红模式的合约代码一直是是市场上合约包含的主流模式之一,由于分红算法多样化,分红本币的合约采用分摊算法来抵消掉持币分红的手续费,分红其他币种的合约,有的根据指定的分红币种开发,有的通过分红中转派发器实现。本例中讲述通过的分红合约模板,可以实现分红任何币种的合约,俗称万能分红合约,只需要修改分红的代币合约地址,另外配置相关的分红参数就可以实现分红指定的任意币种(包括主流币已经自定义的代币通证)。
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发币教程及多模式组合合约源代码下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
本文是全系列中第168 / 243篇:通证发行
- 我的微信
- 这是我的微信扫一扫
-
- 我的电报
- 这是我的电报扫一扫
-