Arbitrum链发币教程——Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程【pdf+视频Arbitrum发币教程下载】

  • A+
所属分类:Arbitrum(ARBI)

chatGPT账号

Arbitrum链发币教程——Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程【pdf+视频Arbitrum发币教程下载】

一、准备

该合约主要实现添加流动性分红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链发币教程——Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程【pdf+视频Arbitrum发币教程下载】

至此,完成Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程

pdf+视频Arbitrum链发币教程及多模式组合合约源代码下载:

Arbitrum链发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:

Arbitrum链发币教程——Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程【pdf+视频Arbitrum发币教程下载】

多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:

Arbitrum链发币教程——Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程【pdf+视频Arbitrum发币教程下载】Arbitrum链发币教程——Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程【pdf+视频Arbitrum发币教程下载】

pdf+视频Arbitrum链发币教程及多模式组合合约源代码下载地址:

此处为隐藏的内容!
登录后才能查看!

添加VX或者telegram获取全程线上免费指导

Arbitrum链发币教程——Arbitrum(ARB)链上加池分红ARB(LP分红)(流动性分红)合约代码部署及配置操作流程【pdf+视频Arbitrum发币教程下载】
免责声明

免责声明:

本文不代表知点网立场,且不构成投资建议,请谨慎对待。用户由此造成的损失由用户自行承担,与知点网没有任何关系;

知点网不对网站所发布内容的准确性,真实性等任何方面做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,知点网对项目的真实性,准确性等任何方面均不做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,知点网不对其构成任何投资建议,用户由此造成的损失由用户自行承担,与知点网没有任何关系;

知点区块链研究院声明:知点区块链研究院内容由知点网发布,部分来源于互联网和行业分析师投稿收录,内容为知点区块链研究院加盟专职分析师独立观点,不代表知点网立场。

本文是全系列中第193 / 238篇:通证发行

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的电报
  • 这是我的电报扫一扫
  • weinxin
chatGPT账号

发表评论

您必须登录才能发表评论!