首页 默认分类 正文
从零开始,以太坊ERC20代币开发完整教程
日期:2026-05-25 11:51
作者:admin
分类:默认分类
阅读:2 W
评论:99+
以太坊作为全球领先的智能合约平台,其上的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): 向指定地址转移代币。
i>
transferFrom(address _from, address _to, uint256 _value): 从指定地址转移代币(通常需要授权)。
approve(address _spender, uint256 _value): 授权某个地址可以花费你的代币。
allowance(address _owner, address _spender): 返回某个地址被授权花费的代币数量。
开发环境准备
在开始编写代码之前,我们需要准备以下工具和环境:
Node.js 和 npm/yarn : JavaScript运行时环境,用于运行Solidity编译器和测试框架。
Truffle Suite : 一套流行的以太坊开发框架,包含合约编译、测试、部署等功能。
安装:npm install -g truffle
Ganache : 个人区块链,可以快速创建本地私有链,用于开发和测试,它会提供一系列测试账户和初始以太坊。
MetaMask : 浏览器钱包插件,用于与以太坊网络(包括本地测试网络和主网)交互,管理私钥,发送交易,测试代币转账等。
VS Code : 强大的代码编辑器,推荐安装Solidity插件(如Hardhat Solidity IDE, Solidity by Juan Blanco)以获得更好的语法高亮和代码提示。
创建项目并编写ERC20合约
创建项目目录
mkdir MyERC20Token
cd MyERC20Token
初始化Truffle项目
truffle init
执行后,Truffle会创建以下目录和文件:
contracts/: 存放Solidity智能合约文件。
migrations/: 存放部署脚本文件。
test/: 存放测试文件。
truffle-config.js: Truffle配置文件。
编写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)
启动Ganache
打开Ganache桌面应用,点击 "QUICKSTART" 按钮,它会启动一个本地区块链,并提供10个测试账户,每个账户有100个ETH(默认),记下其中一个账户的RPC Server地址(如 HTTP://127.0.0.1:7545)和私钥(用于后续测试)。
配置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)。
创建部署脚本
打开 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") 部署合约,并传入构造函数所需的参数(代币名称和简称)。
执行部署
在项目根目录终端中,运行以下命令:
truffle migrate --network development
如果成功,你会看到部署过程,以及合约部署后的地址,记下这个地址,后续会用到。
测试代币功能
配置MetaMask连接本地测试链
打开MetaMask插件,点击网络下拉菜单,选择 "添加网络"。
选择 "添加网络 manually"。
网络名称:填写 "Ganache Local" 或自定义。
RPC URL:填写Ganache中显示的RPC Server地址(如 HTTP://127.0.0.1:7545)。