以太坊ERC20代币开发全教程,从零开始构建你的第一个代币
ERC20标准简介
在开始开发前,我们需要先理解ERC20是什么,ERC20是以太坊上最广泛代币标准之一,由以太坊社区提出,规范了代币的基本功能(如转账、授权、查询余额等),确保不同代币之间的兼容性和互操作性,遵循ERC20标准的代币可以轻松与钱包、交易所、DApp等工具集成。
ERC20的核心接口包括:
- 函数:
totalSupply()(总供应量)、balanceOf(address)(查询地址余额)、transfer(address, uint256)(转账)、transferFrom(address, address, uint256)(授权转账)、approve(address, uint256)(授权)、allowance(address, address)(查询授权额度)。 - 事件:
Transfer(address, address, uint256)(转账事件)、Approval(address, address, uint256)(授权事件)。
开发环境准备
在开发ERC20代币前,我们需要搭建以下环境:
安装基础工具
- Node.js:建议安装LTS版本(v16+),从Node.js官网下载安装。
- npm:Node.js自带包管理器,无需单独安装。
安装开发框架
我们使用Truffle作为智能合约开发框架,它提供了编译、部署、测试等工具,打开终端,执行:
npm install -g truffle
安装OpenZeppelin合约库
OpenZeppelin提供了经过审计的ERC20标准实现,避免重复造轮子并提升安全性,在项目中安装:
npm install @openzeppelin/contracts
配置本地测试网络
使用Ganache搭建本地以太坊节点,用于测试合约部署和交互。
- 下载Ganache:Ganache官网(选择桌面版或命令行版)。
- 启动Ganache,默认会创建10个测试账户,每个账户有100个ETH(用于测试转账Gas费)。
创建Truffle项目
- 创建项目文件夹并初始化:
mkdir my-erc20-token cd my-erc20-token truffle init
- 项目结构说明:
contracts/:存放智能合约代码。migrations/:存放部署脚本(用于部署合约到区块链)。test/:存放测试脚本。truffle-config.js:Truffle配置文件(指定网络、编译器等)。
编写ERC20代币合约
我们基于OpenZeppelin的ERC20模板编写代币合约,实现一个名为“MyToken”(简称MTK)的代币,总供应量为1亿(18位小数,ERC20标准要求)。
- 在
contracts/目录下创建MyToken.sol如下:// SPDX-License-Identifier: MIT pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 { constructor(string memory name, string memory symbol) ERC20(name, symbol) { // 部署时铸造1亿代币,18位小数,分配给部署者 _mint(msg.sender, 1000000000 * 10**18); } }
**代码解释**:
- `SPDX-License-Identifier`:声明许可证(MIT为开源许可证)。
- `pragma solidity ^0.8.20`:指定Solidity版本(0.8.20及以上,兼容OpenZeppelin)。
- `import "@openzeppelin/contracts/token/ERC20/ERC20.sol"`:引入OpenZeppelin的ERC20合约。
- `contract MyToken is ERC20`:继承ERC20合约,获得所有ERC20功能。
- `constructor`:构造函数,在部署时调用,`_mint()`是ERC20提供的内部函数,用于铸造代币,参数为接收地址和数量(`10**18`是18位小数的精度,1亿代币实际为`1000000000 * 10^18`)。
## 五、编译智能合约
在终端执行编译命令:
```bash
truffle compile
编译成功后,build/contracts/目录下会生成MyToken.json文件,包含合约的ABI(应用二进制接口,用于与合约交互)和字节码(部署到区块链的代码)。
部署合约到本地网络
配置truffle-config.js
打开truffle-config.js,添加本地Ganache网络配置(默认Ganache端口为7545):
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*", // 匹配任何网络ID
},
},
compilers: {
solc: {
version: "0.8.20", // 与合约版本一致
},
},
};
编写部署脚本
推荐阅读