一、准备
该合约主要实现添加流动性分红ARB到(添加流动性)用户钱包地址,分红ARB到营销钱包地址,卖出手续费中扣除代币用于自动加池。具体功能说明如下:
1、扣除部分交易手续费用于分红ARB到所有添加流动性的用户钱包地址中,并且是按照用户加池的权重分配的,即按照LP的占比情况分配。
2、扣除部分交易代币转换为ARB后,回流的营销钱包地址
3、卖出时扣除部分交易手续费,用于自动加池,返回的LP属主为营销钱包地址。
4、只要是卖出交易就会转换合地址中的代币为ARB,实时的转账到营销钱包地址中,并且实时自动加池
5、当合约地址中剩余的ARB数量达到 holderRewardCondition 参数指定的值时,做加池分红,直接分红ARB到加池用户的钱包地址中。
6、部署完合约添加流动性之前一定要设置 startAddLPBlock 变量的值,否则使用普通账号无法添加流动性(白名单账号不受此限制)。
7、必须在添加完流动性后才能设置开盘时间,即设置 startTradeBlock 参数值,否则只能允许卖出和添加流动性操作(白名单账号不受此限制)。
8、每笔卖出交易的手续费都会相对比较高,因为每笔卖出交易都要附加实时转换本币到ARB,并且实时转账到营销钱包、合约地址、自动加池。
9、加池分红是轮询分红,并不是每次都从数组中的第一个地址开始分。而是从上此分红完成的下一个开始分,这样刚刚添加流动性的地址会首先获得当前一轮的分红。
二、完整版合约源代码分析
1、LPDividend流动性分红派发器合约代码如下:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/interfaces/IUniswapV2Pair.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.0/contracts/token/ERC20/IERC20.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.0/contracts/token/ERC20/utils/SafeERC20.sol"; contract LPDividend { using SafeERC20 for IERC20; IERC20 public arbToken; IUniswapV2Pair public lpToken; mapping(address => uint256) public lpBalances; uint256 public totalLpBalance; uint256 public totalDividend; constructor(IERC20 _arbToken, IUniswapV2Pair _lpToken) { arbToken = _arbToken; lpToken = _lpToken; } function addLiquidity() external { uint256 lpAmount = lpToken.balanceOf(msg.sender); require(lpAmount > 0, "LPDividend: no LP tokens found"); lpBalances[msg.sender] += lpAmount; totalLpBalance += lpAmount; lpToken.safeTransferFrom(msg.sender, address(this), lpAmount); } function distributeDividend() external { uint256 arbBalance = arbToken.balanceOf(address(this)); require(arbBalance > 0, "LPDividend: no ARB tokens found"); uint256 dividendPerLp = arbBalance / totalLpBalance; require(dividendPerLp > 0, "LPDividend: dividend per LP too small"); for (uint256 i = 0; i < lpToken.balanceOf(address(this)); i++) { address lpOwner = lpToken.ownerOf(i); uint256 lpAmount = lpToken.balanceOf(lpOwner); uint256 lpDividend = lpAmount * dividendPerLp; arbToken.safeTransfer(lpOwner, lpDividend); totalDividend += lpDividend; } } function withdrawDividend() external { uint256 dividend = totalDividend * lpBalances[msg.sender] / totalLpBalance; require(dividend > 0, "LPDividend: no dividend to withdraw"); totalDividend -= dividend; lpBalances[msg.sender] = 0; arbToken.safeTransfer(msg.sender, dividend); } }
该合约的主要功能如下:
- 用户可以通过调用
addLiquidity
函数将其 LP 令牌存入智能合约中。 - 调用
distributeDividend
函数时,智能合约会按照 LP 令牌的持有量分配代币。 - 用户可以通过调用
withdrawDividend
函数来提取其应得的分红代币。
2、以下功能模块是合约中增加的防止抢开盘的功能模块,增加杀机器人功能,防止开盘后代币被机器人软件抢购
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.0/contracts/access/Ownable.sol"; contract AntiBot is Ownable { mapping(address => bool) private _whitelist; function addToWhitelist(address _address) public onlyOwner { _whitelist[_address] = true; } function removeFromWhitelist(address _address) public onlyOwner { _whitelist[_address] = false; } function isWhitelisted(address _address) public view returns (bool) { return _whitelist[_address]; } function checkTx() public view { require(isWhitelisted(msg.sender), "AntiBot: not whitelisted"); require(tx.origin == msg.sender, "AntiBot: transaction initiated by contract"); } function transferOwnership(address newOwner) public override onlyOwner { require(!isWhitelisted(newOwner), "AntiBot: new owner cannot be whitelisted address"); super.transferOwnership(newOwner); } }
该合约的主要功能如下:
- 通过
addToWhitelist
和removeFromWhitelist
函数,智能合约的所有者可以添加或删除白名单地址,这些地址将被允许执行交易操作。 isWhitelisted
函数可用于检查给定地址是否在白名单中。checkTx
函数用于检查当前交易是否由智能合约发起,如果不是,则要求调用者必须在白名单中,这可以防止恶意机器人通过智能合约发起交易。transferOwnership
函数被覆盖以确保新的所有者不在白名单中,从而防止一个恶意机器人掌握智能合约的所有权。三、完整版合约源代码如下
至此,完成Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程
pdf+视频Arbitrum链发币教程及多模式组合合约源代码下载:
Arbitrum链发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频Arbitrum链发币教程及多模式组合合约源代码下载地址:
此内容仅供注册用户可见,请登录!添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册