从零开始,以太坊ERC20代币开发完整教程

 :2026-04-08 5:21    点击:2  

以太坊作为全球领先的智能合约平台,其ERC20代币标准已成为发行可替代代币(如功能型代币、稳定币、社区币等)的黄金标准,无论是对于初学者还是有一定经验的开发者,掌握ERC20代币的开发都是进入区块链领域的重要一步,本文将为您提供一份详尽的、从零开始的以太坊ERC20代币开发教程,助您快速上手。

什么是ERC20?

ERC20(Ethereum Request for Comments 20)是一个技术标准,用于在以太坊区块链上实现代币,它定义了一套规则和接口,确保所有ERC20代币都具有一致的行为方式,从而使得钱包、交易所和其他DApp能够轻松地与它们交互。

ERC20标准要求代币合约实现以下基本功能(通过函数):

  • 总供应量 (Total Supply)totalSupply() - 返回代币的总供应量。
  • 账户余额 (Balance Of)balanceOf(address _owner) - 返回指定地址的代币余额。
  • 转移 (Transfer)transfer(address _to, uint256 _value) - 将指定数量的代币从调用者地址转移到指定地址。
  • 从 approve 到 transferFrom (Allowance)allowance(address _owner, address _spender) - 返回 _spender 被允许从 _owner 支出的代币数量。
  • 批准 (Approve)approve(address _spender, uint256 _value) - 允许 _spender 从调用者地址最多支出 _value 数量的代币。
  • 从授权地址转移 (Transfer From)transferFrom(address _from, address _to, uint256 _value) - 从 _from 地址转移 _value 数量的代币到 _to 地址,前提是调用者已被 _from 授权。

还包括两个可选的事件:

  • Transfer(address indexed from, address indexed to, uint256 value) - 在代币转移时触发。
  • Approval(address indexed owner, address indexed spender, uint256 value) - 在批准授权时触发。

开发环境准备

在开始编写代码之前,您需要准备以下开发环境:

  1. Node.js 和 npm/yarn:JavaScript 运行时环境和包管理器,建议安装 LTS 版本。
  2. Truffle Suite:一套流行的以太坊开发框架,包含 Truffle(开发环境、测试框架、编译器)、Ganache(个人区块链)和 Drizzle(前端库)。
    • 安装:npm install -g truffle
  3. MetaMask:一款浏览器插件钱包,用于与以太坊区块链交互、管理账户和测试代币。
  4. 代码编辑器:如 VS Code,并安装 Solidity 插件以获得语法高亮和智能提示。
  5. Solidity 编译器:Truffle 通常会自动管理,但确保安装了合适版本(0.8.x 或 0.5.x,根据您的需求选择)。

创建新项目

  1. 创建一个新的项目文件夹:

    mkdir MyERC20Token
    cd MyERC20Token
  2. 初始化 Truffle 项目:

    truffle init

    这将创建以下目录结构:

    • contracts/:存放 Solidity 智能合约文件。
    • migrations/:部署脚本文件。
    • test/:测试文件。
    • truffle-config.js:Truffle 配置文件。

编写 ERC20 代币合约

  1. 进入 contracts 目录,删除 Migrations.sol(如果不需要),然后创建一个新的代币合约文件,MyToken.sol

  2. 打开 MyToken.sol,编写您的 ERC20 代币合约,我们可以继承 OpenZeppelin 提供的经过审计的 ERC20 合约,这样可以确保安全性和符合标准,避免重复造轮子。

    • 首先安装 OpenZeppelin Contracts:

      npm install @openzeppelin/contracts
    • MyToken.sol 示例代码:

      // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.0;
      import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
      import "@openzeppelin/contracts/access/Ownable.sol";
      contract MyToken is ERC20, Ownable {
          constructor(string memory name, string memory symbol) ERC20(name, symbol) {
              // 在部署时向合约所有者(部署者)发行 1,000,000 个代币
              _mint(msg.sender, 1000000 * 10**decimals());
          }
          // 可选:添加一个铸币函数(仅所有者可调用)
          function mint(address to, uint256 amount) public onlyOwner {
              _mint(to, amount);
          }
      }

      代码解释:

      • SPDX-License-Identifierpragma solidity 是标准声明。
      • 导入 ERC20Ownable(用于所有权管理,可选但推荐)。
      • contract MyToken is ERC20, Ownable 表示我们的合约继承自 ERC20 和 Ownable。
      • constructor 是构造函数,在合约部署时执行一次,我们在这里代币名称(name)和符号(symbol),并使用 _mint 函数向部署者地址发行初始供应量,注意 10**decimals() 是因为 ERC20 标准通常使用 18 位小数,所以我们要将数量转换为正确的精度。
      • mint 函数是一个可选的额外函数,允许所有者后续铸造更多代币。

编译合约

在项目根目录下打开终端,运行以下命令编译合约:

truffle compile

如果编译成功,您会在 build/contracts/ 目录下看到编译后的 JSON 文件,其中包含 ABI(应用程序二进制接口)和字节码等信息。

编写部署脚本

部署脚本用于告诉 Truffle 如何部署您的合约到区块链。

  1. 进入 migrations 目录,创建一个新的部署脚本文件,2_deploy_contracts.js(数字前缀用于执行顺序)。

    随机配图
  2. 2_deploy_contracts.js 示例代码:

    const MyToken = artifacts.require("MyToken");
    module.exports = function (deployer) {
      // 部署合约时传入代币名称和符号
      deployer.deploy(MyToken, "My Awesome Token", "MAT");
    };

    代码解释:

    • artifacts.require("MyToken") 告诉 Truffle 我们要部署的是 MyToken.sol 编译后的合约。
    • deployer.deploy(MyToken, ...) 执行部署,并传递构造函数所需的参数(代币名称和符号)。

部署合约到测试网络

在部署到真实的以太坊主网之前,我们通常会在本地测试网络或测试网(如 Ropsten, Goerli, Sepolia)上进行测试。

  1. 启动 Ganache(本地区块链)

    • 打开 Ganache,选择 "QUICKSTART"。
    • 记下其中一个账户的地址和私钥(用于后续测试和充币)。
  2. 配置 Truffle 连接 Ganache

    • 打开 truffle-config.js,在 networks 对象中添加 Ganache 的配置:
      module.exports = {
        // ... 其他配置 ...
        networks: {
          development: {
            host: "127.0.0.1",     // Localhost (default: none)
            port: 7545,            // Standard Ethereum port (default: none)
            network_id: "*",       // Any network (default: none)
          },
          // 如果要部署到测试网,需要添加相应配置,并配置 infura 等
        },
        // ... 其他配置 ...
      };
  3. 部署合约: 在项目根目录终端运行:

    truffle migrate --network development

    如果一切顺利,Truffle 会将合约部署到 Ganache 的本地区块链,并显示合约地址,请务必记下这个合约地址!

测试您的代币

  1. 在 MetaMask 中添加代币
    • 打开 MetaMask,切换到 Ganache 提供的测试网络("Localhost 8545")。
    • 点击顶部的资产,然后点击“添加代币”。
    • 在“合约地址”字段中粘贴您部署的 MyToken 合约地址。
    • MetaMask 通常会自动填充代币符号和小数位数,点击“下一步”添加代币”。
    • 您应该能看到 Meta

本文由用户投稿上传,若侵权请提供版权资料并联系删除!