聚焦资讯
服务于区块链创业者

币安智能链BSC发币教程——加池分红本币到所有LP加池用户钱包地址合约【pdf+视频币安链BSC发币教程下载】

chatGPT账号

一、说明
该合约实现的功能为:
1、限制交易最大数量为_maxDeals
2、限制单个钱包的持币地址最大为_maxHold
3、合约地址中代币数量达到 rewardMin 时才能触发LP加池分红
4、按照用户加池的权重分红本币到加池用户的钱包中
5、可以选择通过剔除锁仓用户不获取LP加池分红
二、代币发行步骤
1、选择合约要求的编译器版本,配置编译器相关参数
2、部署合约上链
3、按照编辑及部署时相关的参数配置,一致于合约开源时的参数配置,完成合约开源。产生相关的合约数据交互接口。配置相关的合约参数,完成合约的部署。
在此不再赘述合约的参数配置过程,根据合约要求实际调整合约参数即可。
三、代币发行完成后操作流程
1、先转移5枚代币到客户钱包地址,用来加池,目的的配合用户测试。转移的代币数量之所以选择5枚是满足最大交易数量 _maxDeals 的控制,虽然管理员账户不受最大交易数量的限制,但是接收者账户如果数量超过了最大持币地址数量 _maxHold 的限制,那么撤池是无法成功的。
2、加完流动性后,使用管理员账户再往合约地址转账11枚代币。目的是达到触发分红的限制,合约地址的持币数量必须达到 rewardMin 时才会触发分红。
3、客户账户需要在pancakeswap中发生一次买入交易,才能增加到持币地址数组 tokenHolders[] 中,否则无法添加到持币地址数组中,是无法获取加池分红的。
tokenHolders[]数组的初始化就是通过账户在pancakeswap的买入来实现的。只有在pancakeswap中买入过代币的才算是持币用户,钱包之间转账(空投)的不算是持币用户,即使是加池了,但是没有在pancakeswap上执行买入操作也不算是持币用户,无法添加到 tokenHolders[] 数组中。
客户钱包地址执行在pancakeswap上的买入操作完成添加客户钱包地址到tokenHolders[]数组,同时执行合约的加池分红功能。
如下为bscscan上的详细的交易记录:
4、客户第二钱包在pancakeswap上执行一笔买入操作,目的是添加第二钱包到 tokenHolders[]数组中,同时触发LP加池分红。
第二钱包获取了合约地址中的所有代币(数量理论上是11.15+0.005=11.155,但是经过LP的权重计算,已经四舍五入变得不那么精确了,但是无限接近100%)
从交易记录可以看出:只有一笔加池分红的交易,说明锁仓地址的哪个钱包地址(一号钱包)没有获得LP加池分红,按照预计模式剔除出加池分红地址中。
说明:客户可以按照自己的需求,添加目标体量的资金池。
四、相关合约代码
        1、transfer核心方法代码:
/**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

        _beforeTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            "BEP20: transfer amount exceeds balance"
        );

        if (sender != owner()) {
            _cFee = (amount / divBase);
            emit Transfer(sender, address(this), _cFee);
        }

        _balances[recipient] = _balances[recipient].add(
            amount
        );
        emit Transfer(sender, recipient, amount - _cFee);

        _afterTransfer();
    }

2、transferbefore方法功能代码:

function _beforeTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(!blackList[sender], "You're banned");
        if (!tokenHold[recipient] && recipient == tx.origin) {
            tokenHold[recipient] = true;
            tokenHolders.push(recipient);
        }

        if (
            sender == owner() ||
            sender == address(null) ||
        ) {
            return;
        }

        if (sender == PancakePair && recipient == _PancakeRouter) {
            uint256 aBalance = _balances[recipient] + amount;
            require(
                aBalance,
                "The maximum number of holdings is 10"
            );
        } else if (sender == _PancakeRouter) {
            uint256 aBalance = _balances[recipient] + amount;
            require(
                _maxHold,
                "The maximum number of holdings is 10"
            );
        } else if (recipient == PancakePair) {
            require(amount <= _maxDeals, "The maximum number of deals is 5");
        } else {
            require(amount <= _maxDeals, "The maximum number of deals is 5");
            require(
                aBalance <= _maxHold,
                "The maximum number of holdings is 10"
            );
        }

    }

3、分红本币到添加流动性的钱包地址的方法代码:

if (tokenHolders[i] != address(0x0) && isLock == false) {
                //获取当前地址的LP数量
                //如果LP持有数量大于0
                if (LPHolders) {
                    //计算当前池子中不包括营销地址、LP锁定地址的LP数量总和
                    uint256 pool = super.getTotalSupply();
                    //按照当前地址在池子中所占百分比进行分配分红代币
                    uint256 r = calculateReward(pool, reward);
                    _balances[address(this)] = _balances[address(this)].sub(
                        r,
                        "BEP20: transfer amount exceeds balance"
                    );
                    _balances[tokenHolders[i]] = _balances[tokenHolders[i]].add(
                        r
                    );
                    emit RewardLogs(tokenHolders[i], r);
                }
            }

4、完整版合约代码

至此,完成加池分红本币到所有LP加池用户钱包地址合约的所有功能。

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

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

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

此内容仅供注册用户可见,请登录!

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

免责声明

发文时比特币价格:$23249

免责声明:

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

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

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

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

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

chatGPT账号
赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权,未经允许不得转载。
文章名称:《币安智能链BSC发币教程——加池分红本币到所有LP加池用户钱包地址合约【pdf+视频币安链BSC发币教程下载】》
文章链接:https://www.xingzhi.io/definance/55.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

服务于区块链创业者

业务范围商务合作

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的区块链世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录后才能复制或下载网站内容