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

币安BSC智能链发币教程——万能分红任何币种+自动筑池+营销钱包+销毁燃烧+买卖不同手续费合约代码部署【pdf+视频BSC发币教程下载】

chatGPT账号

一、准备
1、该合约模式如下:
a. 可以实现分红任何币种,即所谓的万能分红合约,并且分红给的代币合约地址是通过构造函数传入的。
b. 实现自动筑池,添加流动性的 LP 属于黑洞地址 address(0)
c. 手续费回流营销钱包,并且回流的是指定的分红币种,非本币
d. 每笔交易都会有部分手续费销毁掉,转入黑洞地址 0x000000000000000000000000000000000000dEaD ,但是代币的总发行量不会减少。严格来说这不是销毁,是每笔交易都有部分代币作为手续费被永久锁定到BSC公认黑洞地址
e. 该合约可以实现买入卖出配置不同的交易手续费,对应的分红,自动筑池,营销钱包,销毁的手续费可以灵活配置买入卖出时不同的比例。对应的手续费设置为0相当于关闭了该功能。这个功能是非常灵活和强大的,已经包含的功能基本上涵盖了目前市面上绝大部分的主流模式。
2、该合约的部署过程比较复杂,需要先部署 IterableMapping 类库合约,然后再部署 BABYTOKENDividendTracker 合约,并且 BABYTOKENDividendTracker 合约的开源需要依赖IterableMapping 类库,最后才能部署Token合约,在部署Token合约时将 BABYTOKENDividendTracker 的合约地址作为构造函数的参数传入Token合约中。
3、该合约部署完成后,不需要做任何的配置即可实现目标的合约模式。
4、该合约模板是平台自动生成的模板,对应的服务费通过 serviceFeeReceiver_ 和  serviceFee_ 参数来控制。在部署合约时为了实现取消服务费的目的通过设置serviceFeeReceiver_为自己的其他钱包地址,serviceFee_为0的方式来实现,同时避免改动代码。
二、合约部署步骤
1、所有sol文件(包括token文件)全部编译完成后,执行合约的部署。
2、在remix编译器中先部署 BABYTOKENDividendTracker  合约,该合约部署时会同时自动部署 IterableMapping  合约
bsc2022071101
执行分红任意币种的处理代码如下:
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);
    }
3、部署完成后先开源 IterableMapping 合约,再开源 BABYTOKENDividendTracker 合约
IterableMapping合约地址: 0xd847f9a614c89ac3d33ea4caf636181daf5a108b
再开源 BABYTOKENDividendTracker 合约,该合约开源需要如下sol文件:
SafeMath.sol,SafeMathInt.sol,OwnableUpgradeable.sol,DividendPayingToken.sol,Initializable.sol, 
ContextUpgradeable.sol,IERC20.sol,SafeMathUint.sol,ERC20Upgradeable.sol,DividendPayingTokenInterface.sol, 
DividendPayingTokenOptionalInterface.sol,IERC20Upgradeable.sol,IERC20MetadataUpgradeable.sol,BABYTOKENDividendTracker.sol,IterableMapping.sol
共计需要15个合约文件。
并且开源合约时需要附加必需的IterableMapping类库
BABYTOKENDividendTracker合约地址:0xxxxbe1205xxxxxca8cxxxa8b3932272xxxx09
4、部署Token合约
合约需要输入相关的构造函数参数。其中包括三个数组,数组作为构造函数参数时的输入格式如下:
本次合约部署输入的构造函数参数如下:
bsc2022071102
输入参数解析:
a. 分红的代币为USDT
b. uniswapV2Router地址即PancakeSwapV2Router
c. 营销钱包地址
开源后的构造函数输入参数显示如下:
5、开源Token合约
开源合约时使用所有sol文件,不需要附加任何类库。
不需要附加 IterableMapping  和 BABYTOKENDividendTracker  类库即可开源成功。
BABYTOKENDividendTracker  合约需要依赖 IterableMapping  类库,开源 BABYTOKENDividendTracker  合约时必须附加 IterableMapping  类库。
Token合约中是clone了一个BABYTOKENDividendTracker  类似合约,不是直接调用的 BABYTOKENDividendTracker  合约。
Token中合约克隆BABYTOKENDividendTracker  类似合约的代码如下:
bsc2022071103
IterableMapping类代码如下:
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint256) values;
        mapping(address => uint256) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint256) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key)
    public
    view
    returns (int256)
    {
        if (!map.inserted[key]) {
            return -1;
        }
        return int256(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint256 index)
    public
    view
    returns (address)
    {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint256) {
        return map.keys.length;
    }

    function set(
        Map storage map,
        address key,
        uint256 val
    ) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint256 index = map.indexOf[key];
        uint256 lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

bsc2022071104

执行合约克隆代码如下:
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Clones {
    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     */
    function clone(address implementation) internal returns (address instance) {
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
            instance := create(0, ptr, 0x37)
        }
        require(instance != address(0), "ERC1167: create failed");
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple time will revert, since
     * the clones cannot be deployed twice at the same address.
     */
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
            instance := create2(0, ptr, 0x37, salt)
        }
        require(instance != address(0), "ERC1167: create2 failed");
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
            mstore(add(ptr, 0x38), shl(0x60, deployer))
            mstore(add(ptr, 0x4c), salt)
            mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))
            predicted := keccak256(add(ptr, 0x37), 0x55)
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(address implementation, bytes32 salt)
        internal
        view
        returns (address predicted)
    {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

至此,完成万能分红任何币种+自动筑池+营销钱包+消耗+买卖不同手续费合约代码部署所有操作流程。

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

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

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

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

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

免责声明

发文时比特币价格:$23249

免责声明:

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

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

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

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

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

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

评论 抢沙发

评论前必须登录!

 

服务于区块链创业者

业务范围商务合作

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

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

支付宝扫一扫打赏

微信扫一扫打赏

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