TrustWallet钱包官网下载-Trust钱包官网入口 基于以太坊测试链与ERC20标准规范发行代币的完整指南:从Remix到MetaMask
你的位置:TrustWallet钱包官网下载 > TrustWallet钱包官网版下载 > Trust钱包官网入口 基于以太坊测试链与ERC20标准规范发行代币的完整指南:从Remix到MetaMask
Trust钱包官网入口 基于以太坊测试链与ERC20标准规范发行代币的完整指南:从Remix到MetaMask
发布日期:2025-05-20 14:40    点击次数:56

在以太坊的领域中,代币的发行以及交易存在着严谨的规则与流程。只有掌握了这些知识,才能够顺利地开启关于代币的旅程。千万不要小瞧每一个步骤,倘若其中一个环节出现了错误,就有很大可能会使你的代币发行计划付诸东流。

pragma solidity ^0.4.19;
contract Token {
    /// token总量,默认会为public变量生成一个getter函数接口,名称为totalSupply().
    uint256 public totalSupply;
    /// 获取账户_owner拥有token的数量
    function balanceOf(address _owner) constant returns (uint256 balance);
    //从消息发送者账户中往_to账户转数量为_value的token
    function transfer(address _to, uint256 _value) returns (bool success);
    //从账户_from中往账户_to转数量为_value的token,与approve方法配合使用
    function transferFrom(address _from, address _to, uint256 _value) returns  (bool success);
    //消息发送账户设置账户_spender能从发送账户中转出数量为_value的token
    function approve(address _spender, uint256 _value) returns (bool success);
    //获取账户_spender可以从账户_owner中转出token的数量
    function allowance(address _owner, address _spender) constant returns  (uint256 remaining);
    //发生转账时必须要触发的事件 
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    //当函数approve(address _spender, uint256 _value)成功执行时必须触发的事件
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

pragma solidity ^0.4.19;
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;  // decimals 可以有的小数点个数,最小的代币单位。18 是建议的默认值
    uint256 public totalSupply;
    // 用mapping保存每个地址对应的余额
    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);  // 供应的份额,份额跟最小的代币单位有关,份额 = 币数  10  decimals。
        balanceOf[msg.sender] = totalSupply;                // 创建者拥有所有的代币
        name = tokenName;                                   // 代币名称
        symbol = tokenSymbol;                               // 代币符号
    }
    /
      代币交易转移的内部实现
     /
    function _transfer(address _from, address _to,TrustWallet安卓版下载 uint _value) internal {
        // 确保目标地址不为0x0,
TrustWallet官网因为0x0地址代表销毁
        require(_to != 0x0);
        // 检查发送者余额
        require(balanceOf[_from] >= _value);
        // 确保转移为正数个
        require(balanceOf[_to] + _value > balanceOf[_to]);
        // 以下用来检查交易,
        uint previousBalances = balanceOf[_from] + balanceOf[_to];
        // Subtract from the sender
        balanceOf[_from] -= _value;
        // Add the same to the recipient
        balanceOf[_to] += _value;
        Transfer(_from, _to, _value);
        // 用assert来检查代码逻辑。
        assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
    }
    /
       代币交易转移
      从自己(创建交易者)账号发送`_value`个代币到 `_to`账号
     
      @param _to 接收者地址
      @param _value 转移数额
     /
    function transfer(address _to, uint256 _value) public {
        _transfer(msg.sender, _to, _value);
    }
    /
      账号之间代币交易转移
      @param _from 发送者地址
      @param _to 接收者地址
      @param _value 转移数额
     /
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        require(_value = _value);   // Check if the sender has enough
        balanceOf[msg.sender] -= _value;            // Subtract from the sender
        totalSupply -= _value;                      // Updates totalSupply
        Burn(msg.sender, _value);
        return true;
    }
    /
      销毁用户账户中指定个代币
     
      Remove `_value` tokens from the system irreversibly on behalf of `_from`.
     
      @param _from the address of the sender
      @param _value the amount of money to burn
     /
    function burnFrom(address _from, uint256 _value) public returns (bool success) {
        require(balanceOf[_from] >= _value);                // Check if the targeted balance is enough
        require(_value 

代币实现协议要点

实现代币需要遵守协议,指定代币名称以及确定总量等方面是很关键的。这就如同给孩子取名字以及确定其身份信息一般,明确了基本的信息。例如在以太坊的环境里,只有依照这些规则,代币才能够被以太坊钱包所支持。拥有了标准协议之后,代币就能够在不同的应用当中进行使用,像钱包以及去中心化交易所等,从而极大地提升了代币的通用性和流动性。

image

image

代币合约编译部署

image

代币合约编写完毕后,能够在 Etherscan 测试链上进行发布。由于公链部署需要购买 ether 并且速度较为缓慢,因此建议开发工作在测试链上进行。我借助 Remix 在线浏览器 IDE 来进行编译和部署,打开其页面之后,将相关代码进行复制,IDE 的左边会自动对合约编写的准确性进行校验,若存在错误会进行提示,而对于警告则可以忽略不计。这样能帮我们提前发现编写中的问题,保证后续流程顺利。

image

测试链账户创建

image

在以太坊的测试链上发行合约需要 ether,并且可以免费获得。首先需要拥有测试链账户,我们可以通过使用 MetaMask chrome 插件来进行链接和创建。在安装好该插件之后,浏览器的右上角会出现图标,点击该图标后,按照步骤一步步填写密码,这样就能够创建 MetaMask 钱包。它会生成 12 个英文助记词。这些助记词一定要保存好。因为以后导入新账户时可能会用到它们。要是万一丢失了,就找不回账户了。

image

测试链 ether 获取

image

账户创建好后可能没有 ether,需要按照步骤去获取。首先点击图标,建议点击一到两次,每次都会给账户放入 1 个 ether,实际上部署合约 1 个就足够了。拥有了这个,就相当于拥有了进入以太坊测试世界的通行证,能够让合约顺利地进行部署。如果不知道怎么获取,那么合约就无法在测试链上运行起来。

image

代币合约部署发布

image

前面的准备工作完成之后,就能够部署代币合约了。首先点击 IDE 右侧横栏中的“run”,接着按照 1 到 3 来确认相关信息,然后在 4 处编写要发行的代币信息,例如 100000000 、“GaoTeB”、“GTB”等(分别对应发行总量、发行币全称、发行币简称)。在确认所有信息都无误之后,点击“create”按钮,将其发布到测试链上。点击 submit 之后,如果没有报错,就会显示合约信息。当点击合约打开页面时,能够看到正在创建的状态。

https://www.gxhis.com

代币交易操作流程

image

MetaMask 插件不具备代币交易功能。许多人要么没有以太坊钱包,要么受到网络同步问题的困扰。接下来为大家讲解代币交易的相关内容。初次进入时,会有一系列确认信息。点击后可来到相应页面,然后选择与 MetaMask 处于同一个网络链(即以太坊测试链)。点击链接后,页面会与 MetaMask 连接成功,此时能够看到账户信息,但 Token 信息需要手动添加。之后就可以开始进行代币交易了,接着可以尝试向别的账户进行转账,只要填好相关信息,然后依次点击相应的按钮就可以了。

image

看完这篇文章后,你对于以太坊代币的发行以及交易是否有了更为清晰的认知?在代币操作的过程里,你遭遇过哪些问题?赶快在评论区留下你的留言,同时也不要忘记点赞和分享这篇文章!

image

image