币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】

  • A+
所属分类:币安BSC

chatGPT账号

币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】

一、说明

合约主要实现用户添加流动性获取lp分红功能,lp分红本币。买卖收取相应的交易税费,区分买入和撤销流动性,卖出和添加流动性的交易手续费比例,钱包之间转账不收取手续费。同时,lp分红不是添加一次就可以永久获取lp分红的,需要用户不断的复投,才能持续性的获取lp分红。

随着资金池中代币数量的减少,用户按照lp权重实际所属的资金池中的本币数量相应的减少。当达到LP分红的阈值时,停止lp分红。需要用户再继续添加流动性,维持资金池中代币属于永远高于LP分红的阈值就会持续性的获取LP分红。因此,该机制可以极大的推动用户添加流动性的积极性。

二、合约具体实现功能

1. 合约功能非常简单即加池分红本币

2. 加池分红本币时要求分红的目标钱包地址持有本币达到最小数量限制,添加到资金池里的本币达到最小数量限制。并且随着代币价格的拉升,资金池里用户所属添加的代币数量在不断减少,低于指定的最小加池本币数量时停止lp分红,如果用户想继续获取lp分红就必须再次加池。因此该模式设置迫使原来lp加池的用户不断的加池以获取lp分红。、

3. 合约提供了判断加池和撤池的新写法,可以单独把加池撤池功能分离出来。不用再继续写到_transfer买入,卖出,转账固定框架中了。

4. 合约提供了精确识别满足条件的加池用户的筛选方法,不是常规的从所有持币用户中盲晒。

5. 合约提供了另外一种枚举类型的SET数组处理方式,包括增删改查等。

6. Ownerable合约中没有提供放弃管理员权限功能,生产环境使用时需要替换新的Ownerable合约文件。

三、功能模块完整代码

  1. 针对地址类型数组的枚举类型变量的处理类库
library EnumerableSet {
   
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

    
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }


    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

   
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }


    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

   
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

   
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

2. lp分红结构体对象的声明

struct Interest{
        uint256 index;
        uint256 period;
        uint256 lastSendTime;
        uint minAward;
        uint award;
        uint sendCount;
        IERC20  token;
        EnumerableSet.AddressSet tokenHolder;
    }

3. 业务主合约构造函数

constructor (
        address _route,
        address _holder,
        address _token) public {
        
        lpAwardCondition = LpAwardCondition(1e8,1e8);
        holder = _holder;
        _tOwned[holder] = _tTotal;
        token = _token;
        _isExcludedFromFee[_holder] = true;
        _isExcludedFromFee[address(this)] = true;

        uniswapV2Router = IUniswapV2Router02(_route);
         
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), token);
        
        ammPairs[uniswapV2Pair] = true;

        _owner = msg.sender;
        lpInterest.token = IERC20(uniswapV2Pair);
        lpInterest.lastSendTime = block.timestamp;
        lpInterest.minAward = 1e3;
        lpInterest.period = 3600;
        lpInterest.sendCount = 50;
        emit Transfer(address(0), _holder, _tTotal);
    }

4. LP权重对应资金池中的本币数量检测

function checkLpAwardCondition(address owner)internal view returns(bool){

        uint supply = lpInterest.token.totalSupply();
        uint lpAmount = lpInterest.token.balanceOf(owner);

        (,uint r1,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        address token1 = IUniswapV2Pair(address(uniswapV2Pair)).token1();

        if( token1 == address(this) && supply > 0){
            return lpAmount  / supply >= lpAwardCondition.lpHoldAmount 
                && balanceOf(owner) >= lpAwardCondition.balHoldAmount;
        }
    }

5. LP分红有效地址实时维护

function setEst(address owner) private {
       
        if( lpInterest.tokenHolder.contains(owner) ){
            if( !checkLpAwardCondition(owner) ) {
                lpInterest.tokenHolder.remove(owner);
            }
            return;
        }

        
        if( checkLpAwardCondition(owner)){
            lpInterest.tokenHolder.add(owner);
        }
    }

6. 遍历所有有效LP分红用户地址,下发分红本币到添加流动性的钱包地址

while (sendedCount < sendCountLimit && iterations < shareholderCount) {
            if (index >= shareholderCount) {
                index = 0;
            }
            uint256 amount = nowbanance.mul(lpInterest.token.balanceOf(shareholder));

            if (
                balanceOf(address(this)) < amount 
                ||  surplusAmount < amount ) break;

            if (amount >= 1e4) {
                surplusAmount -= amount;
                _doTransfer(address(this), amount);
            }
            iterations++;
            index ++;
        }

四、完整版合约源代码如下:

币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】

源码及合约部署、开源、上线交易所、动态参数配置教程下载地址:

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

至此,完成添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程的所有操作流程。

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

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

币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】

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

币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】

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

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

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

币安BSC智能链发币教程——添加流动性分红本币,强制复投获取LP分红合约开发部署及配置全流程【pdf+视频BSC发币教程下载】

免责声明

发文时比特币价格:$31249

当前比特币价格:[crypto coins=”BTC” type=”text” show=”price”]

当前比特币涨幅:[crypto coins=”BTC” type=”text” show=”percent”]

免责声明:

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

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

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

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

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

 

本文是全系列中第70 / 241篇:通证发行

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

发表评论

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