:2026-04-08 5:21 点击:2
以太坊作为全球领先的智能合约平台,其ERC20代币标准已成为发行可替代代币(如功能型代币、稳定币、社区币等)的黄金标准,无论是对于初学者还是有一定经验的开发者,掌握ERC20代币的开发都是进入区块链领域的重要一步,本文将为您提供一份详尽的、从零开始的以太坊ERC20代币开发教程,助您快速上手。
ERC20(Ethereum Request for Comments 20)是一个技术标准,用于在以太坊区块链上实现代币,它定义了一套规则和接口,确保所有ERC20代币都具有一致的行为方式,从而使得钱包、交易所和其他DApp能够轻松地与它们交互。
ERC20标准要求代币合约实现以下基本功能(通过函数):
totalSupply() - 返回代币的总供应量。balanceOf(address _owner) - 返回指定地址的代币余额。transfer(address _to, uint256 _value) - 将指定数量的代币从调用者地址转移到指定地址。allowance(address _owner, address _spender) - 返回 _spender 被允许从 _owner 支出的代币数量。approve(address _spender, uint256 _value) - 允许 _spender 从调用者地址最多支出 _value 数量的代币。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) - 在批准授权时触发。在开始编写代码之前,您需要准备以下开发环境:
npm install -g truffle创建一个新的项目文件夹:
mkdir MyERC20Token cd MyERC20Token
初始化 Truffle 项目:
truffle init
这将创建以下目录结构:
contracts/:存放 Solidity 智能合约文件。migrations/:部署脚本文件。test/:测试文件。truffle-config.js:Truffle 配置文件。进入 contracts 目录,删除 Migrations.sol(如果不需要),然后创建一个新的代币合约文件,MyToken.sol。
打开 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-Identifier 和 pragma solidity 是标准声明。ERC20 和 Ownable(用于所有权管理,可选但推荐)。contract MyToken is ERC20, Ownable 表示我们的合约继承自 ERC20 和 Ownable。constructor 是构造函数,在合约部署时执行一次,我们在这里代币名称(name)和符号(symbol),并使用 _mint 函数向部署者地址发行初始供应量,注意 10**decimals() 是因为 ERC20 标准通常使用 18 位小数,所以我们要将数量转换为正确的精度。mint 函数是一个可选的额外函数,允许所有者后续铸造更多代币。在项目根目录下打开终端,运行以下命令编译合约:
truffle compile
如果编译成功,您会在 build/contracts/ 目录下看到编译后的 JSON 文件,其中包含 ABI(应用程序二进制接口)和字节码等信息。
部署脚本用于告诉 Truffle 如何部署您的合约到区块链。
进入 migrations 目录,创建一个新的部署脚本文件,2_deploy_contracts.js(数字前缀用于执行顺序)。

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)上进行测试。
启动 Ganache(本地区块链):
配置 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 等
},
// ... 其他配置 ...
};
部署合约: 在项目根目录终端运行:
truffle migrate --network development
如果一切顺利,Truffle 会将合约部署到 Ganache 的本地区块链,并显示合约地址,请务必记下这个合约地址!
MyToken 合约地址。本文由用户投稿上传,若侵权请提供版权资料并联系删除!