在区块链的世界里,以太坊凭借其智能合约平台的优势,成为了发行代币的首选之地,ERC20(Ethereum Request for Comments 20)是最具影响力和广泛应用的代币标准之一,它定义了一套统一的接口(函数和事件),使得不同的代币可以在以太坊生态中无缝交互,例如交易所可以轻松支持多种ERC20代币,钱包也能统一管理它们,本文将详细介绍以太坊ERC20代币的完整发行过程,助你从零开始创建自己的数字资产。
准备工作:发行前的必要条件
在正式开始编写和部署代币合约之前,你需要做好以下准备工作:
- 以太坊钱包:你需要一个以太坊钱包来管理你的私钥和接收以太币(ETH),MetaMask是最常用的浏览器钱包插件,它方便与以太坊节点和开发工具集成。
- ETH余额:部署智能合约需要支付 gas 费用(矿工费),你的钱包中必须拥有足够的 ETH,用于支付部署过程中的各项开销。
- 基本的编程知识:虽然可以复制现成的合约模板,但了解 Solidity 语言(以太坊智能合约的编程语言)的基础知识能帮助你更好地理解合约结构、自定义参数并进行安全审计。
- 开发环境(可选):对于更复杂的开发,你可以使用如 Remix IDE(在线集成开发环境,非常适合初学者)、Truffle、Hardhat 等开发框架,Remix IDE 无需安装,直接在浏览器中即可完成合约的编写、编译和部署。
编写ERC20代币智能合约
ERC20代币的核心是一段遵循ERC20标准的Solidity智能合约,这个合约主要实现了以下几个关键的接口函数:
name():返回代币的完整名称,"My Awesome Token"。symbol():返回代币的简称,通常2-4个字符,"MAT"。decimals():返回代币的小数位数,用于分割代币,类似于以太坊的18位小数,大多数ERC20代币都使用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):查询某个地址被授权花费的代币数量。- 以及对应的事件,如
Transfer和Approval。
编写合约的方式:
-
使用Remix IDE:
- 打开Remix IDE(https://remix.ethereum.org/)。
- 在 "File Explorers" 标签页创建一个新的
.sol文件,MyToken.sol。 - 在 "Solidity Compiler" 标签页,选择合适的编译器版本(建议使用较新的稳定版本)。
- 编写或粘贴ERC20标准合约代码,你可以从以太坊官方文档或开源社区(如OpenZeppelin)获取经过审计的、安全的ERC20合约模板作为起点,OpenZeppelin的合约库提供了安全、可升级的合约实现,强烈推荐使用。
示例(基于OpenZeppelin的简化ERC20合约):
// 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) { _mint(msg.sender, 1000000 * 10**decimals()); // 初始发行100万代币,考虑小数位数 } }这个例子中,我们继承自OpenZeppelin的ERC20合约,并在构造函数中指定了代币名称和简称,同时使用
_mint函数向合约部署者(msg.sender)发行了100万个代币(乘以10**decimals()来考虑小数点位)。 -
使用本地开发框架:如Truffle或Hardhat,你需要安装相关依赖,编写合约代码,然后通过命令行进行编译和部署。
编译智能合约
编写完合约代码后,需要将其编译成以太坊虚拟机(EVM)能够理解的字节码(Bytecode)和应用程序二进制接口(ABI)。
- 在Remix IDE中:
- 切换到 "Solidity Compiler" 标签页。
- 确保选择了正确的编译器版本。
- 点击 "Compile MyToken.sol" 按钮,如果编译成功,会在 "Compile" 下方显示绿色的对勾,并在 "File Explorers" 中看到生成的ABI文件(
MyToken.json)。
部署智能合约到以太坊网络
编译成功后,就可以将合约部署到以太坊网络上了。
-
在Remix IDE中:
- 切换到 "Deploy & Run Transactions" 标签页。
- 在 "ENVIRONMENT" 下拉菜单中选择你要部署的网络:
- Remix VM (Shanghai):这是Remix内置的模拟以太坊网络,适合测试和学习,无需真实ETH。
- Injected Provider- MetaMask:连接到你的MetaMask钱包,部署到真实的以太坊主网(Mainnet)或测试网(如Ropsten, Goerli, Sepolia等),此时会使用你MetaMask账户中的ETH支付gas费。

- Remote - HTTP/WS:连接到远程节点服务(如Infura, Alchemy)。
- 在 "ACCOUNT" 下选择用于部署的MetaMask账户。
- 在 "CONTRACT" 下选择已编译的合约(如 "MyToken")。
- 在 "DEPLOY" 按钮旁边的输入框中,可以输入构造函数所需的参数,例如代币名称和符号(如 "My Awesome Token" 和 "MAT")。
- 点击 "DEPLOY" 按钮,MetaMask会弹出交易确认窗口,显示gas预估费用,确认后交易将被发送到网络。
- 等待交易被打包确认,部署成功后,你可以在 "Deployed Contracts" 部分看到你的合约实例,并显示其合约地址(Contract Address)。这个地址非常重要,它是你代币的唯一标识!
-
使用本地开发框架:部署命令会因框架而异,例如在Truffle中,你会使用
truffle migrate命令,确保配置文件中指向了正确的网络。
验证代币合约(可选但推荐)
部署到主网的代币合约,尤其是面向公众的,最好进行源代码验证,验证后,任何人都可以在以太坊区块浏览器(如Etherscan)上查看合约的源代码,增加透明度和可信度。
- 在Remix IDE中:
- 在 "Deploy & Run Transactions" 标签页,找到已部署的合约实例。
- 点击合约地址旁边的 "At Address" 按钮,输入你的合约地址,加载已部署的合约。
- 切换到 "Contract" 标签页,点击 "Verify and Publish" 按钮。
- 按照Etherscan(或其他浏览器)的要求,填写合约名称、版本号、编译器版本、源代码(或Flattened代码)、许可证类型等信息,提交验证。
测试代币功能
合约部署并验证后,你需要测试代币的各项功能是否正常:
- 查询代币信息:使用合约的
name(),symbol(),decimals(),totalSupply()函数查询代币的基本信息。 - 查询余额:使用
balanceOf(address)查询你自己或其他地址的代币余额,初始时,部署者地址应该拥有所有代币。 - 转账测试:
- 使用
transfer(address to, uint256 value)函数向另一个地址(可以是朋友的钱包地址或另一个测试账户)转一定数量的代币。 - 在区块浏览器上查看交易记录,确认转账成功。
- 再次查询双方余额,确认余额已正确更新。
- 使用
- 授权和转账测试:
- 使用
approve(address spender, uint256 value)函数授权某个地址(如交易所合约)可以花费你的代币。 - 被授权方可以使用 `transferFrom(address from, address to, uint256
- 使用