以太坊ERC20代币发行全攻略,从零开始创建你的第一个代币
什么是ERC20代币?
ERC20是以太坊上最受欢迎的代币标准(Ethereum Request for Comments 20),它定义了一组智能合约必须实现的接口规范,只要一个智能合约遵循ERC20标准,它发行的代币就可以被钱包、交易所和其他去中心化应用(DApp)识别和支持。
知名的ERC20代币包括USDT(泰达币)、LINK(Chainlink)、UNI(Uniswap)等,ERC20标准主要规定了以下核心函数:
- totalSupply():代币总供应量
- balanceOf():查询某个地址的代币余额
- transfer():转账
- approve():授权他人使用代币
- transferFrom():被授权方执行转账
发行ERC20代币前的准备工作
在开始发行代币之前,你需要准备以下几样东西:
-
一个以太坊钱包:推荐使用MetaMask(小狐狸钱包),用于管理账户和支付gas费用。
-
一定数量的ETH:部署合约需要支付gas费,主网部署成本较高,建议先在测试网练习,测试网ETH可以在水龙头(Faucet)网站免费领取。
-
开发工具:
- Remix IDE(推荐新手):基于浏览器的智能合约开发环境,无需安装
- Hardhat / Truffle:适合有编程基础的开发者
-
基础概念了解:智能合约一旦部署到区块链上就无法修改,因此务必在测试网充分测试后再部署主网。
编写ERC20智能合约
使用OpenZeppelin标准库(推荐)
OpenZeppelin是经过审计的安全合约库,新手直接使用可以避免大部分安全漏洞。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor() ERC20("My Token", "MTK") {
// 发行100万枚代币,ERC20默认18位小数
_mint(msg.sender, 1000000 * 10 ** decimals());
}
}
在这个合约中:
"My Token"是代币全名"MTK"是代币符号1000000 * 10 ** decimals()表示发行100万枚代币
手写完整ERC20合约(学习用)
如果想深入理解原理,可以自己实现全部接口:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract SimpleERC20 {
string public name = "My Token";
string public symbol = "MTK";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor() {
totalSupply = 1000000 * 10 ** uint256(decimals);
balanceOf[msg.sender] = totalSupply;
}
function transfer(address to, uint256 value) public returns (bool success) {
require(balanceOf[msg.sender] >= value, "Insufficient balance");
balanceOf[msg.sender] -= value;
balanceOf[to] += value;
emit Transfer(msg.sender, to, value);
return true;
}
function approve(address spender, uint256 value) public returns (bool success) {
allowance[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return true;
}
function transferFrom(address from, address to, uint256 value) public returns (bool success) {
require(balanceOf[from] >= value, "Insufficient balance");
require(allowance[from][msg.sender] >= value, "Insufficient allowance");
allowance[from][msg.sender] -= value;
balanceOf[from] -= value;
balanceOf[to] += value;
emit Transfer(from, to, value);
return true;
}
}
部署ERC20代币的详细步骤
第1步:打开Remix并创建合约
访问 remix.ethereum.org,新建一个 .sol 文件,粘贴上面写好的合约代码。
第2步:编译合约
在左侧“Solidity Compiler”面板中,选择合适的编译器版本(如0.8.20),点击“Compile”按钮进行编译。
第3步:连接钱包并切换网络
- 打开MetaMask,连接Remix
- 练习阶段先切换到Sepolia测试网
- 确保钱包里有测试网ETH支付gas费
第4步:部署合约
在“Deploy & Run Transactions”面板中:
- Environment选择“Injected Provider - MetaMask”
- 点击“Deploy”按钮
- 在MetaMask中确认交易并支付gas费
等待几秒到几十秒,合约部署完成后,下方会出现合约地址,请务必保存好这个地址。
部署后的验证与管理
在Etherscan上验证合约
将合约地址粘贴到Etherscan,为了方便他人查看合约源码,建议进行合约验证:
- 进入Etherscan的“Verify & Publish”页面
- 选择合约类型和编译器版本
- 粘贴源代码并提交
验证后,任何人都能查看你的代币合约详情,也可以直接在Etherscan页面上调用transfer等函数。
添加代币到钱包
在MetaMask中点击“导入代币”,输入合约地址,即可看到你的代币余额。
代币分发
作为合约部署者,初始代币都在你的地址中,你可以通过钱包直接转账给社区成员、注入流动性池,或用于其他用途。
发行ERC20代币的成本与注意事项
成本方面:使用OpenZeppelin标准合约部署,主网gas费通常在数美元到数十美元之间,具体取决于网络拥堵程度,选择gas价格较低的时段部署可以节省成本。
重要注意事项:
-
安全第一:合约部署后不可修改,任何代码漏洞都可能导致代币被盗,重要项目务必请专业机构审计。
-
谨慎设定参数:代币名称、符号、总量、小数位部署后无法更改。
-
合规风险:在中国大陆,发行代币融资(ICO)属于非法金融活动,个人学习和技术研究请仅限于测试网,务必了解并遵守所在地区的法律法规。
-
防骗提醒:网络上有些“一键发币平台”可能存在风险,自己动手用Remix部署是最透明安全的学习方式。
发行ERC20代币的技术门槛其实并不高:准备钱包 → 编写合约 → 测试网测试 → 主网部署 → 验证合约,整个流程熟练后半小时内即可完成,真正困难的不是“发币”这个动作,而是代币背后的经济模型设计、安全审计、社区运营和合规要求。
对于区块链开发者而言,亲手发行一个ERC20代币是学习智能合约开发的绝佳入门实践,建议初学者先在测试网上完整走一遍流程,充分理解每一行
发布于:2026-10-08,除非注明,否则均为原创文章,转载请注明出处。

