币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】

  • A+
所属分类:币安BSC
摘要

ERC315协议标准是在ERC314协议标准基础上衍生而来,仍然支持ERC314协议标准的所有功能模块和操作流程。基于ERC314协议标准从安全性层面,用户体验层面,技术健壮性和运维层面做了进一步的优化升级。


chatGPT账号

币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】

一、什么是ERC315协议标准

ERC315协议标准是在ERC314协议标准基础上衍生而来,仍然支持ERC314协议标准的所有功能模块和操作流程。基于ERC314协议标准从安全性层面,用户体验层面,技术健壮性和运维层面做了进一步的优化升级。ERC315协议标准主要有如下功能特点:

  1.  向合约地址转账WETH即视为买入,合约会根据当前资金池中的价格核算买入的代币数量,然后实时的从合约地址中转出对于代币到msg.sender中。
  2. 向合约地址中转入相应代币即视为卖出行为,根据当前资金池中的代币价格计算应该获取的WETH,向msg.sender payable对应数量的WETH。
  3. 限制只有合约管理员地址才能添加流动性和撤销流动性。一旦完成流动性的初始化init即开发ERC315协议代币的swap交易。
  4. 可以在ERC315协议代币的买卖交易过程中扣除指定的WETH税率和代币税费自动兑换为指定币种用于其他机制模式。
  5. 所有ERC315协议的持币者都可以获取相应的WETH分红。这是ERC315区别于ERC314协议的主要特点。持币者获取WETH分红的方式可以是按照用户持币权重直接分红,也可以是对于代币持币数量mint tricker,按照tricker比例加权实时分红,也可以平均分红。具体的分红方式根据实际的业务需求确定。

币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】

二、ERC315协议核心功能源代码实现

  1.  ERC315协议接口标准如下:
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

interface IERC315 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    event AddLiquidity(uint32 blockToUnlockLiquidity, uint256 ethAmount, uint256 tokenAmount);
    event RemoveLiquidity(uint256 ethAmount, uint256 tokenAmount);
    event Swap(address indexed sender, uint amountEthIn, uint amountTokenIn, uint amountEthOut, uint amountTokenOut);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);

    function addLiquidity(uint32 blockToUnlockLiquidity) external payable;
    function removeLiquidity() external;
    function getAmountOut(uint256 amountIn, bool isBuy) external view returns (uint256);
    function liquidityProvider() external view returns(address);
    function tradingEnable() external view returns(bool);
    function liquidityAdded() external view returns(bool);
    function blockToUnlockLiquidity() external view returns(uint32);
    function getReserves() external view returns (uint256 reserveEth, uint256 reserveToken);
}

2. 合约管理权限控制模块功能代码如下:

/**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

3. 外部extental合约接口ABI码底层调用函数接口

function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

4. ERC315协议标准兼容ERC20协议标准的transfer函数接口

function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC315InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC315InvalidReceiver(address(0));
        }

        if (tradingEnable && to == address(this) && (startTime > 0 && startTime < block.timestamp)) {
            _sell(value);
        } else if (tradingEnable && to == address(this)) {
            revert ERC315TransferError();
        } else {
            _update(from, to, value);
        }

        _holderDividend();
    }

5. 向合约地址转入WETH即可实现ERC315协议的买入功能


function _buy() internal virtual onlyOnceSwapInSameBlock {
        if (!tradingEnable || ((startTime == 0 || startTime > block.timestamp) && !excluded[_msgSender()])) {
            revert ERC315TradingNotEnable();
        }

        address sender = msg.sender;
        uint256 ethAmount = msg.value;
        uint256 swapEthAmount = ethAmount;

        if (!excluded[_msgSender()]) {
            uint256 marketFee = ethAmount * marketFeeRate / feeDenominator;
            if (marketFee > 0) {
                payable(marketFeeAddress).transfer(marketFee);
                swapEthAmount = ethAmount - marketFee;
            }
        }

        uint256 tokenAmount = swapEthAmount * _balances[address(this)] / address(this).balance;
        if (tokenAmount == 0) {
            revert ERC315InvalidAmountOut();
        }

        _update(address(this), sender, tokenAmount);

        if (!excluded[sender]) {
            payable(holderDividendManager).transfer(ethAmount * holderDividendFeeRate / feeDenominator);
        }

        emit Swap(sender, swapEthAmount, 0, 0, tokenAmount);
    }

6. 向合约地址转入ERC315协议标准代币即被视为卖出操作

function _sell(uint256 tokenAmount) internal virtual onlyOnceSwapInSameBlock {
        if (!tradingEnable || startTime == 0 || startTime > block.timestamp) {
            revert ERC315TradingNotEnable();
        }

        address sender = msg.sender;
        uint256 swapTokenAmount = tokenAmount;

        if (startTime + 5 minutes > block.timestamp && !excluded[_msgSender()]) {
            uint256 burnTokenAmount = tokenAmount * 20 / 100;
            _update(sender, dead, burnTokenAmount);

            swapTokenAmount = tokenAmount - burnTokenAmount;
        }

        uint256 ethAmount = swapTokenAmount * address(this).balance / (swapTokenAmount + _balances[address(this)]);

        if (ethAmount == 0) {
            revert ERC315InvalidAmountOut();
        }

        _update(sender, address(this), swapTokenAmount);

        uint256 marketFee;
        if (!excluded[_msgSender()]) {
            marketFee = ethAmount * marketFeeRate / feeDenominator;
            if (marketFee > 0) {
                payable(marketFeeAddress).transfer(marketFee);
            }
        }

        payable(sender).transfer(ethAmount - marketFee);

        emit Swap(sender, 0, swapTokenAmount, ethAmount, 0);
    }

至此,完成部署ERC315协议标准通证流程已经功能说明所有操流程。

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

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

币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】

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

币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】

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

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

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

币安BSC智能链合约开发教程——部署ERC315协议标准通证流程以及功能说明【pdf+视频BSC链合约开发教程下载】
免责声明

免责声明:

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

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

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

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

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

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

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

发表评论

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