主页 > imtoken最新安卓版本下载 > Solidity 创建自己的数字货币(ERC20 代币)

Solidity 创建自己的数字货币(ERC20 代币)

imtoken最新安卓版本下载 2023-01-16 23:33:29

Solidity 创建自己的数字货币(ERC20 代币)

本文从技术角度详细介绍了如何基于以太坊ERC20创建代币的过程。

合约地址:

p>

0xe70c8efb6e4899974a622e6a37f27f07247e38a4

以太坊测试网浏览器查看合约详情

文章目录

简介

本文中描述的代币是使用以太坊智能合约创建的。

需要知识系统:

令牌

如果不追求精确的定义,代币就是数字货币,比特币和以太坊都是代币。货币。

使用以太坊的智能合约,你可以轻松组成自己的代币,代币可以代表任何可以交易的东西,比如积分、财产、证书等。

所以不管是商业还是学习,很多人都想自己创建token,先发张图看看创建的token是什么样子的。

在这里插入图片描述

ERC20 代币

也许你经常看到ERC20和代币一起出现,ERC20是以太坊定义的代币标准。

我们在实现代币时必须遵守的合约,比如指定代币名称、总量、实现代币交易功能等,只有在合约支持的情况下,以太坊钱包才能支持。

套接字如下:

contract ERC20Interface {
    string public constant name = "Token Name";
    string public constant symbol = "LYU";
    uint8 public constant decimals = 18;
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);
    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

名称说明

名字

令牌名称

符号

代币符号

小数

令牌小数点,令牌的最小单位,18表示我们可以有0.0000000000000000001个令牌单位。

totalSupply()

已发行代币总数。

balanceOf()

查看对应账户的代币余额。

转移()

实现一个代币汇款交易,将代币发送给用户(从我们的账户)。

transferFrom()

对于可以将令牌从我们的帐户(参数 from)发送给另一个用户(参数 to)的授权用户。

津贴()

返回用于授权的令牌数。

批准()

授权用户可以代表我们花费的代币数量。

代码代币合约

pragma solidity 0.4.16;
interface tokenRecipient { 
    function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; 
}
contract TokenERC20{
    string public  name = "LYU Name";
    string public  symbol = "LYU";
    uint8 public  decimals = 18;  // 18 is the most common number of decimal places
    uint256 public totalSupply=10000000000;
    mapping (address => uint256) public balanceOf;  //
    mapping (address => mapping (address => uint256)) public allowance;
    event Transfer(address indexed from, address indexed to, 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;
        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;
    }
}

部署

在开发和测试智能合约时erc20代币是什么意思,MetaMask 和 Remix Solidity IDE 是当今用于部署的两个出色工具。

1、要安装和配置 MetaMask,请参阅开发和部署第一个去中心化应用程序。上篇文章选择了以太坊的测试网络Ropsten。如果您没有余额,请点击下单购买,您进入的网站可以向您发送一些测试以太币。配置完成后界面如下:

在这里插入图片描述

2.在浏览器Solidity IDE中打开Remix,复制粘贴以上源码,参考选项左侧的设置:

在这里插入图片描述

3.打开Metamask界面,切换到TOKENS,点击Add Contract,会出现如下对话框:

填写刚才复制的地址,点击ADD,就可以看到自己创建的token了,如图:

在这里插入图片描述

说明:您已完成代币的创建和部署

将你手中​​的代币分发给其他用户;

在这里插入图片描述

代币交易

由于 MetaMask 插件不提供代币交易功能,并且考虑到很多人没有以太坊钱包或者被以太坊覆盖,网络同步的问题一蹶不振。今天用网页钱包来讲解代币交易。

1.输入网页的钱包地址,有一些安全提示,用户第一次进入时需要确认。

2.进入后按照右图设置:

[(http://note.youdao.com/yws/res/7824/58B670D41E6D4CA288B758E31DF89239)]

3.连接后,如图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HvvOdbiI-1609329388066)(http://note.youdao.com/yws/res/7827/2F29C5AF747B4C26A3087C8D312D1D22)]

您需要添加代币并填写代币合约地址。

4.进行代币转账交易

在这里插入图片描述

在下一次交易确认中,点击确认。

5.交易完成后,可以看到MetaMask中的代币余额减少了。

代币交易是不是很简单,只要了解交易流程erc20代币是什么意思,使用其他钱包也是如此。