引言:为什么选择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 }, }, }, };