教程 | 如何创建 ERC-20 token 详细步骤

在以太坊环境中,ERC20代币如同一把功能广泛的"钥匙",引领我们开启无限可能之门。本文旨在详细解读ERC20代币之核心机制与实践应用,助您于此领域得心应手。

什么是ERC20代币?

ERC20是以太坊生态系统的代币标准协议,所有项目方发行的代币均需遵循此规定。犹如社会秩序的维护,唯有遵循ERC20准则,方可在以太坊社群内畅通无阻。

  contract ERC20 {
      function name() constant returns (string name)
      function symbol() constant returns (string symbol)
      function decimals() constant returns (uint8 decimals)
      function totalSupply() constant returns (uint totalSupply);
      function balanceOf(address _owner) constant returns (uint balance);
      function transfer(address _to, uint _value) returns (bool success);
      function transferFrom(address _from, address _to, uint _value) returns (bool success);
      function approve(address _spender, uint _value) returns (bool success);
      function allowance(address _owner, address _spender) constant returns (uint remaining);
      event Transfer(address indexed _from, address indexed _to, uint _value);
      event Approval(address indexed _owner, address indexed _spender, uint _value);
    }

符合ERC20规范的通证具备强大的兼容性能,就如同电气设备可以轻松匹配线路插座,实现全球网络环境下的灵活运用。此外,因适配多种以太坊电子货币钱包,此类通证在各类平台及项目中得到广泛应用,从而提升其实际操作价值与流动性。

ERC20代币的基本操作

虽然理解ERC20代币运作具有一定难度,但是初学者只要具备基础知识便可轻松上手。首要掌握的技能便是代币转移操作。具体步骤是从一个地址(例如用户钱包)将代币转至另一个地址(例如朋友钱包)。在这个过程中,需要触发特定事件,类似于银行转账中的短信确认交易。

常见的行为包括授权第三方进行代币转发业务。例如,用户可以允许亲朋好友在其账户中转出特定额度的代币。这就好比把家门钥匙交予朋友照顾宠物,虽然他们可以自由出入,但必须建立充分的信任,防止被恶意利用。

pragma solidity ^0.4.16;
contract Token{
    uint256 public totalSupply;
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns   
    (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns 
    (uint256 remaining);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 
    _value);
}
contract TokenDemo is Token {
    string public name;                   //名称,例如"My test token"
    uint8 public decimals;               //返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示.
    string public symbol;               //token简称,like MTT
    function TokenDemo(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) public {
        totalSupply = _initialAmount * 10 ** uint256(_decimalUnits);         // 设置初始总量
        balances[msg.sender] = totalSupply; // 初始token数量给予消息发送者,因为是构造函数,所以这里也是合约的创建者
        name = _tokenName;                   
        decimals = _decimalUnits;          
        symbol = _tokenSymbol;
    }
    function transfer(address _to, uint256 _value) public returns (bool success) {
        //默认totalSupply 不会超过最大值 (2^256 - 1).
        //如果随着时间的推移将会有新的token生成,则可以用下面这句避免溢出的异常
        require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]);
        require(_to != 0x0);
        balances[msg.sender] -= _value;//从消息发送者账户中减去token数量_value
        balances[_to] += _value;//往接收账户增加token数量_value
        Transfer(msg.sender, _to, _value);//触发转币交易事件
        return true;
    }
    function transferFrom(address _from, address _to, uint256 _value) public returns 
    (bool success) {
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);
        balances[_to] += _value;//接收账户增加token数量_value
        balances[_from] -= _value; //支出账户_from减去token数量_value
        allowed[_from][msg.sender] -= _value;//消息发送者可以从账户_from中转出的数量减少_value
        Transfer(_from, _to, _value);//触发转币交易事件
        return true;
    }
    function balanceOf(address _owner) public constant returns (uint256 balance) {
        return balances[_owner];
    }
    function approve(address _spender, uint256 _value) public returns (bool success)   
    { 
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
        return allowed[_owner][_spender];//允许_spender从_owner中转出的token数
    }
    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
}

ERC20代币的高级操作

作为跨越基本转账及授权范畴的高效媒介,ERC20代币具诸多卓越特性。举例来说,使用者可随时查询特定地址内所剩代币数量,如同查阅银行账户余额,以便更精准地把握个人财务状况。

代币的命名及标识象征着其实践应用,犹如宠物之名,既定且具特定含义,每唤起均可引发相应反应。

教程 | 如何创建 ERC-20 token 详细步骤

如何在测试环境中使用ERC20代币

教程 | 如何创建 ERC-20 token 详细步骤

正式实战前,将先在仿真环境中模拟演练。此仿真区犹如虚拟乐园,可无风险地试错与检测。在此网络测试中,您可用"以太币"象玩游戏时收取虚拟货币一样便捷。

巅峰之作,智能编译器REMIX,为我们优化和部署ERC20代币合约提供有力支持。其职责如同是游乐场里精心设计游戏设备的工程师,严谨遵守规则以确保系统的稳定性与安全性。

查看和添加ERC20代币

教程 | 如何创建 ERC-20 token 详细步骤

合约部署成功后,使用者可借助以太坊浏览器查询合约信息,包括其创建地址、现今地址及所在区块等。此数据犹如家具标签,明确展示了其来源与位置。

请将约约定制地址添加至钱包,以便查阅代币详情。犹如添置新居,您可以妥善安置这些工具并加以应用。

ERC20代币的转账操作

教程 | 如何创建 ERC-20 token 详细步骤

ERC20代币的转账是常用操作,可使用以太坊钱包,如同银行业务办理转账般直接操作。只需确认收款方地址与转账金额无误,点击确认,代币余额即按照输出比例进行调整,犹如从钱包提取现金。

教程 | 如何创建 ERC-20 token 详细步骤

总结与展望

通过本文的深度解析,您对ERC20代币应有更全面的理解。从理论核心到实践应用,此领域的发展空间无限广阔。那么,您是否已准备好在此领域大展身手呢?

教程 | 如何创建 ERC-20 token 详细步骤

作者头像
比特派钱包官网创始人

bitpie比特派钱包官方

上一篇:全国首例区块链存证判决在杭州互联网法院诞生,附判决书
下一篇:深度解析:如何有效增强比特币的隐私性