引言:为什么选择ERC20?
在区块链的世界里,以太坊无疑是智能合约和代币发行的摇篮,ERC20(Ethereum Request for Comments 20)是以太坊上最著名、应用最广泛的代币标准,它定义了一套统一的接口(规则),使得所有遵循该标准的代币都能在以太坊生态中的钱包、交易所和DApp(去中心化应用)之间无缝流转,无论是项目方的融资代币(如早期的STO、IEO),还是社区积分、NFT的辅助代币,ERC20都扮演着不可或缺的角色。
本教程将带你一步步,从环境搭建到代码编写,再到最终的代币部署,手把手教你创建属于你自己的第一个以太坊ERC20代币。
第一步:准备工作——搭建你的开发环境
在开始编码之前,我们需要准备好三样核心工具:
- 代码编辑器: 推荐使用 Visual Studio Code (VS Code),它轻量且拥有丰富的插件生态。
- Node.js 和 npm: Solidity智能合约的编译和部署通常需要Node.js环境,请访问 Node.js官网 下载并安装LTS(长期支持)版本,安装完成后,打开终端或命令行工具,输入
node -v和npm -v确认安装成功。 - 以太坊钱包: 你需要一个钱包来支付部署智能合约所需的Gas费用,并接收你创建的代币,推荐使用 MetaMask,请前往 MetaMask官网 安装浏览器插件,并按照提示创建好你的钱包。切记:妥善保管你的助记词,切勿泄露!
第二步:创建项目并安装必要框架
为了简化开发流程,我们将使用业界最流行的以太坊开发框架 Hardhat。
-
创建项目文件夹: 在你的终端中,输入以下命令,创建一个新的项目文件夹并进入其中。
mkdir my-erc20-token cd my-erc20-token
-
初始化Hardhat项目: 运行以下命令,Hardhat会自动为你生成一个标准化的项目结构。
npx hardhat
在交互式界面中,选择
Create a JavaScript project,然后一路回车(或根据你的需求选择),完成项目初始化。 -
安装OpenZeppelin合约库: OpenZeppelin是一个提供安全、审计过的智能合约库的组织,我们将使用他们的ERC20模板,这能极大地保证我们代币的安全性和标准性。
npm install @openzeppelin/contracts
第三步:编写智能合约代码
让我们来编写代币的核心逻辑。
-
找到合约文件: 在
contracts文件夹下,你会看到一个Lock.sol文件,我们可以重命名它,或者直接创建一个新文件,MyToken.sol。 -
编写合约代码: 打开
MyToken.sol文件,输入以下代码,代码中已经包含了详细的注释,解释了每一部分的作用。// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; // 导入OpenZeppelin提供的标准ERC20合约 import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; // 继承ERC20合约,我们的代币将拥有所有ERC20标准的功能 contract MyToken is ERC20 { // 构造函数,在合约部署时自动执行一次 // _name: 代币的全称,"My Awesome Token" // _symbol: 代币的代码,"MAT" constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) { // msg.sender 是部署合约的地址(也就是你) // _totalSupply 是你希望创建的代币总供应量 // 这里我们创建 1,000,000 个代币,乘以 10 的 18 次方是因为以太坊中最小的单位是 Wei, // 1 个代币 = 10^18 Wei,这是ERC20标准的要求。 _mint(msg.sender, 1000000 * 10**18); } }
第四步:编译和测试合约
在部署到真实的以太坊主网之前,我们必须先在本地环境中进行测试和编译。
-
配置测试网络: 打开
hardhat.config.js文件,我们需要添加一个本地的测试网络配置,确保文件中包含以下内容(如果使用Hardhat默认模板,它应该已经存在):require("@nomicfoundation/hardhat-toolbox"); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { solidity: "0.8.20", networks: { hardhat: { // forking 可以让你模拟以太坊主网的环境进行测试 forking: { url: `https://eth-mainnet.g.alchemy.com/v2/YOUR_ALCHEMY_API_KEY`, // 你可以替换成自己的Alchemy或Infura API Key }, }, }, }; -
编译合约: 在终端中运行以下命令,Hardhat会根据
hardhat.config.js的配置来编译你的MyToken.sol合约。npx hardhat compile
如果看到
Compiled successfully,说明编译成功!编译后的合约文件会保存在artifacts/contracts/MyToken.sol/MyToken.json。 -
编写测试脚本(可选但推荐): 在
test文件夹下创建一个my-token.test.js文件,编写一些简单的测试用例来验证你的代币是否按预期工作。
第五步:部署合约到以太坊测试网
为了确保一切正常,我们先在测试网上(如 Sepolia)进行部署,测试网的ETH是免费的,你可以从“水龙头”网站获取。
-
配置测试网: 你需要获取一个测试网的RPC URL和私钥,推荐使用 Alchemy 或 Infura 创建一个项目,获取Sepolia测试网的URL,从你的MetaMask钱包中,导出你的测试网账户的私钥(警告:请勿在代码中直接使用主网私钥!)。
在
hardhat.config.js中添加Sepolia网络的配置:require("@nomicfoundation/hardhat-toolbox"); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { solidity: "0.8.20", networks: { hardhat: { forking: { url: `https://eth-mainnet.g.alchemy.com/v2/YOUR_ALCHEMY_API_KEY`, }, }, sepolia: { url: "https://eth-sepolia.g.alchemy.com/v2/YOUR_SEPOLIA_API_KEY", // 替换成你的Sepolia RPC URL accounts: ["YOUR_TESTNET_PRIVATE_KEY"], // 替换成你的测试网私钥 }, }, };
-
创建部署脚本: 在
scripts文件夹下,创建一个deploy.js文件,内容如下:async function main() { // 获取要部署的合约工厂 const MyToken = await ethers.getContractFactory("MyToken"); // 部署合约,并传入代币名称和代码 const myToken = await MyToken.deploy("My Awesome Token", "MAT"); // 等待部署完成 await myToken.deployed(); // 输出部署成功的消息,包含合约地址 console.log("MyToken deployed to:", myToken.address); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); }); -
执行部署: 在终端中,运行以下命令,将合约部署到Sepolia测试网。
npx hardhat run scripts/deploy.js --network sepolia
等待交易确认后,终端会输出你的代币合约地址。恭喜!你的ERC20代币已经成功部署到区块链上了!
第六步:验证和测试你的新代币
-
在区块浏览器中查看: 复制上一步输出的合约地址,粘贴到 Etherscan Sepolia (https://sepolia.etherscan.io/) 中,你就能看到你的代币交易记录、合约代码等信息。
-
在MetaMask中添加代币:
- 打开你的MetaMask钱包,确保网络切换到 "Sepolia Test Network"。
- 点击资产








