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

admin1 2026-03-14 18:27

以太坊作为全球领先的智能合约平台,其上的ERC20代币标准成为了发行可替代代币(如稳定币、功能型代币等)的黄金标准,无论是初学者还是有一定经验的开发者,掌握ERC20代币的开发都是进入区块链领域的重要一步,本文将带你从零开始,一步步完成一个ERC20代币的开发、测试和部署。

什么是ERC20代币

ERC20(Ethereum Request for Comments 20)是一个以太坊代币的技术标准,它定义了一套接口(Interface),使得所有符合该标准的代币都能在以太坊生态中统一交互,就像比特币在每个钱包中都能以相同的方式显示和交易一样,ERC20代币也可以在任何支持ERC20标准的钱包、交易所和DApp中使用。

ERC20标准要求代币合约必须实现以下基本函数(至少):

  • name(): 返回代币的完整名称,如 "MyToken"。
  • symbol(): 返回代币的简称,通常2-3个字符,如 "MTK"。
  • decimals(): 返回代币的小数位数,用于分割代币,如18位表示可以分割到1e-18。
  • totalSupply(): 返回代币的总供应量。
  • balanceOf(address _owner): 返回指定地址的代币余额。
  • transfer(address _to, uint256 _value): 向指定地址转移代币。
  • transferFrom(address _from, address _to, uint256 _value): 从指定地址转移代币(通常需要授权)。
  • approve(address _spender, uint256 _value): 授权某个地址可以花费你的代币。
  • allowance(address _owner, address _spender): 返回某个地址被授权花费的代币数量。

开发环境准备

在开始编写代码之前,我们需要准备以下工具和环境:

  1. Node.js 和 npm/yarn: JavaScript运行时环境,用于运行Solidity编译器和测试框架。

    • 下载地址:https://nodejs.org/
    • 安装完成后,打开终端,输入 node -vnpm -v 检查是否安装成功。
  2. Truffle Suite: 一套流行的以太坊开发框架,包含合约编译、测试、部署等功能。

    • 安装:npm install -g truffle
  3. Ganache: 个人区块链,可以快速创建本地私有链,用于开发和测试,它会提供一系列测试账户和初始以太坊。

  4. MetaMask: 浏览器钱包插件,用于与以太坊网络(包括本地测试网络和主网)交互,管理私钥,发送交易,测试代币转账等。

  5. VS Code: 强大的代码编辑器,推荐安装Solidity插件(如Hardhat Solidity IDE, Solidity by Juan Blanco)以获得更好的语法高亮和代码提示。

创建项目并编写ERC20合约

  1. 创建项目目录

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

    truffle init

    执行后,Truffle会创建以下目录和文件:

    • contracts/: 存放Solidity智能合约文件。
    • migrations/: 存放部署脚本文件。
    • test/: 存放测试文件。
    • truffle-config.js: Truffle配置文件。
  3. 编写ERC20合约 打开 contracts/ 目录,删除 Migrations.sol(如果不需要),然后创建一个新的合约文件,MyToken.sol

    我们可以直接继承OpenZeppelin的ERC20合约,这比从头实现更安全、更可靠,首先需要安装OpenZeppelin合约库:

    npm install @openzeppelin/contracts

    然后在 MyToken.sol 中编写以下代码:

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    import 
    随机配图
    "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract MyToken is ERC20 { constructor(string memory name, string memory symbol) ERC20(name, symbol) { // 在部署时,将1000个代币(根据decimals调整)发送给部署者 _mint(msg.sender, 1000 * 10**decimals()); } }

    代码解释:

    • SPDX-License-Identifier: 指定许可证标识。
    • pragma solidity ^0.8.0; 指定Solidity编译器版本。
    • import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; 导入OpenZeppelin的ERC20标准实现。
    • contract MyToken is ERC20; 声明我们的合约继承自ERC20。
    • constructor(string memory name, string memory symbol) ERC20(name, symbol) {...} 构造函数,在合约部署时调用,用于设置代币名称和简称,并调用父合约ERC20的构造函数。
    • _mint(msg.sender, 1000 * 10**decimals()); _mint 是ERC20合约内部的一个函数,用于铸造代币,这里我们铸造1000个代币给合约部署者(msg.sender),乘以 10**decimals() 是因为ERC20的 decimals() 默认是18,所以实际铸造的是1000 * 10^18个最小单位。

编译合约

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

truffle compile

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

部署合约到本地测试链(Ganache)

  1. 启动Ganache 打开Ganache桌面应用,点击 "QUICKSTART" 按钮,它会启动一个本地区块链,并提供10个测试账户,每个账户有100个ETH(默认),记下其中一个账户的RPC Server地址(如 HTTP://127.0.0.1:7545)和私钥(用于后续测试)。

  2. 配置Truffle连接Ganache 打开 truffle-config.js 文件,添加以下配置(如果还没有的话):

    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)
        },
      },
      compilers: {
        solc: {
          version: "0.8.0",    // 指定Solidity编译器版本,与合约中一致
        }
      }
    };

    注意:port 要与Ganache中显示的端口一致,network_id 通常可以设置为 或 5777(Ganache默认网络ID)。

  3. 创建部署脚本 打开 migrations/ 目录,创建一个新的部署脚本文件,2_deploy_contracts.js

    const MyToken = artifacts.require("MyToken");
    module.exports = function (deployer) {
      deployer.deploy(MyToken, "My Awesome Token", "MAT");
    };

    代码解释:

    • artifacts.require("MyToken") 获取编译好的合约对象。
    • deployer.deploy(MyToken, "My Awesome Token", "MAT") 部署合约,并传入构造函数所需的参数(代币名称和简称)。
  4. 执行部署 在项目根目录终端中,运行以下命令:

    truffle migrate --network development

    如果成功,你会看到部署过程,以及合约部署后的地址,记下这个地址,后续会用到。

测试代币功能

  1. 配置MetaMask连接本地测试链
    • 打开MetaMask插件,点击网络下拉菜单,选择 "添加网络"。
    • 选择 "添加网络 manually"。
    • 网络名称:填写 "Ganache Local" 或自定义。
    • RPC URL:填写Ganache中显示的RPC Server地址(如 HTTP://127.0.0.1:7545)。

本文转载自互联网,具体来源未知,或在文章中已说明来源,若有权利人发现,请联系我们更正。本站尊重原创,转载文章仅为传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如其他媒体、网站或个人从本网站转载使用,请保留本站注明的文章来源,并自负版权等法律责任。如有关于文章内容的疑问或投诉,请及时联系我们。我们转载此文的目的在于传递更多信息,同时也希望找到原作者,感谢各位读者的支持!
最近发表
随机文章
随机文章