:2026-03-23 10:00 点击:7
以太坊作为全球领先的智能合约平台,其上的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): 返回某个地址被授权花费的代币数量。在开始编写代码之前,我们需要准备以下工具和环境:
Node.js 和 npm/yarn: JavaScript运行时环境,用于运行Solidity编译器和测试框架。
node -v 和 npm -v 检查是否安装成功。Truffle Suite: 一套流行的以太坊开发框架,包含合约编译、测试、部署等功能。
npm install -g truffleGanache: 个人区块链,可以快速创建本地私有链,用于开发和测试,它会提供一系列测试账户和初始以太坊。
MetaMask: 浏览器钱包插件,用于与以太坊网络(包括本地测试网络和主网)交互,管理私钥,发送交易,测试代币转账等。
VS Code: 强大的代码编辑器,推荐安装Solidity插件(如Hardhat Solidity IDE, Solidity by Juan Blanco)以获得更好的语法高亮和代码提示。
创建项目目录
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桌面应用,点击 "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
如果成功,你会看到部署过程,以及合约部署后的地址,记下这个地址,后续会用到。
HTTP://127.0.0.1:7545)。本文由用户投稿上传,若侵权请提供版权资料并联系删除!