发行自己的以太坊ERC20代币---超级详细

Posted goog_man

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发行自己的以太坊ERC20代币---超级详细相关的知识,希望对你有一定的参考价值。

1、安装MetaMask插件+新建钱包

注意:电脑是需要ke学上网的,并且需要使用谷歌浏览
注意:电脑是需要ke学上网的,并且需要使用谷歌浏览
注意:电脑是需要ke学上网的,并且需要使用谷歌浏览

  1. 在谷歌浏览器中打开这个地址安装MetaMask钱包插件:https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?authuser=2
    在这里插入图片描述
  2. 打开页面点击点击到浏览器即可完安装操作。安装成功后会自动打开MetaMask的页面,点击【创建钱包】进行创建钱包操作。(发行代币是需要旷工费的,并且以eth形式支付)
    在这里插入图片描述在这里插入图片描述
  3. 输入钱包名后即可创建,创建后会自动生成助记词,助记词一定要保留好。后续会让你输入助记词验证成功后钱包才会创建成功。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2、进行合约的创建+发布

  1. 打开网站:https://www.myetherwallet.com/点击【Access My Wallet】接着在新页面点击【MEW CX】
    在这里插入图片描述在这里插入图片描述
  2. 勾选我接受后点击【Access My Wallet】此时会自动打开之前安装好的MetaMask钱包插件,在MetaMask钱包插件页面点击【下一步】接着点击【连接】即可。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  3. 上一步点击【连接】后会自动回到这个页面,点击【Contract】—【Deploy Contract】即可。保留此页面不要关闭

在这里插入图片描述

  1. 接着在新的标签页打开Remix网页,这是一个在线的Solidity编译器。网站地址:Remix网页
  2. Solidity编译器页面点击【contracts】可以看到自带的3个文件,此时我们新建一个文件并将如下代码复制进去即可。
    在这里插入图片描述
pragma solidity ^0.4.16;

interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }

contract TokenERC20 {
    string public name;
    string public symbol;
    uint8 public decimals = 18;  // 18 是建议的默认值
    uint256 public totalSupply;
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Burn(address indexed from, uint256 value);
    
    function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public {
        totalSupply = initialSupply * 10 ** uint256(decimals);
        balanceOf[msg.sender] = totalSupply;
        name = tokenName;
        symbol = tokenSymbol;
    }
    
    function _transfer(address _from, address _to, uint _value) internal {
        require(_to != 0x0);
        require(balanceOf[_from] >= _value);
        require(balanceOf[_to] + _value > balanceOf[_to]);
        uint previousBalances = balanceOf[_from] + balanceOf[_to];
        balanceOf[_from] -= _value;
        balanceOf[_to] += _value;
        Transfer(_from, _to, _value);
        assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
    }
    
    function transfer(address _to, uint256 _value) public returns (bool) {
        _transfer(msg.sender, _to, _value);
        return true;
    }
    
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        require(_value <= allowance[_from][msg.sender]);     // Check allowance
        allowance[_from][msg.sender] -= _value;
        _transfer(_from, _to, _value);
        return true;
    }
    
    function approve(address _spender, uint256 _value) public
        returns (bool success) {
        allowance[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }
    
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) {
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, this, _extraData);
            return true;
        }
    }
    
    function burn(uint256 _value) public returns (bool success) {
        require(balanceOf[msg.sender] >= _value);
        balanceOf[msg.sender] -= _value;
        totalSupply -= _value;
        Burn(msg.sender, _value);
        return true;
    }
    
    function burnFrom(address _from, uint256 _value) public returns (bool success) {
        require(balanceOf[_from] >= _value);
        require(_value <= allowance[_from][msg.sender]);
        balanceOf[_from] -= _value;
        allowance[_from][msg.sender] -= _value;
        totalSupply -= _value;
        Burn(_from, _value);
        return true;
    }
}
  1. 点击编译按钮,选择版本号要和代码中的一致(此处是0.4.16),选择好后点击【compile】即可完成编译。此时最下面会有【ABI】、【Bytecode】两个按钮,点击对应的即可复制相关内容。打开上述的网站粘贴复制的内容即可。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  2. 复制完成后继续填写相关信息,最后点击【Sing Transaction】按钮,此时会打开MetaMask钱包插件,可以看到完成发布需要支付181$的手续费给矿工,手续费以eth形式支付(到此我先暂时停止后续操作了,毕竟手续费略贵)
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  3. 如果你给钱包里充值了eth并且足够支付手续费的话即可点击上述页面的【确定】按钮完成后续的发布和验证

3、提交合约+发布合约+验证

以下内容来自网络,并非自己实际操作。
以下内容来自网络,并非自己实际操作。
以下内容来自网络,并非自己实际操作。

  1. 点击“确定”后,就可以看到MetaMask弹出的“CONFIRM TRANSACTION”的页面,这个页面是用来确认发送的,点击“CONFIRM”确认提交。
    在这里插入图片描述

  2. 点击刚刚发布的智能合约地址,就会调转到Etherscan(以太坊的区块浏览器),耐性等待智能合约的创建。
    在这里插入图片描述

  3. 点击确认,支付成功后,然后他会自动部署合约,等一会,去区块浏览器查你的ETH主账号的事物:地址为:https://etherscan.io/address/(加上你自己的支付矿工费用的ETH账号地址);点击进入
    在这里插入图片描述

  4. 下图则为你的代币地址,然后查看代币的具体信息:地址为:
    https://etherscan.io/token/(你自己的代币地址)
    在这里插入图片描述

  5. 验证是否正常:打开MetaMask钱包插件,点击【add token】,在【token address】中输入token地址
    在这里插入图片描述在这里插入图片描述

  6. 此时在MetaMask钱包插件即可看到刚刚添加的token。
    在这里插入图片描述

以上是关于发行自己的以太坊ERC20代币---超级详细的主要内容,如果未能解决你的问题,请参考以下文章

发行自己的以太坊ERC20代币---超级详细

以太坊ERC20代币开发

以太坊上发行ERC20代币

手把手教你发行代币

如何从以太坊地址获取 ERC20、ERC721 和 ERC827 代币列表

ERC20代币标准初识