从 DeFi 治理币到游戏内通证,ERC-20 已成为以太坊生态最主流的代币标准之一。本文将带你用 ERC-20、Solidity 与 智能合约 三大关键词完成一次“从零到主网”的深度实战,兼顾代码细节与消费场景,确保程序员与产品经理都能读得懂、上手快。
一、准备武器:开发环境 5 分钟搞定
安装开发工具
- Node.js 18.0+
- npm →
npm install -g truffle - Ganache 或本地 Hardhat Network
- Chrome + MetaMask(助记词请抄写离线保存)
- 配置钱包测试网
把 MetaMask 网络切到「Goerli」, faucet 领水 0.2 ETH 即可开启ERC-20代币全流程。
二、拆解 ERC-20 标准:6 个必补函数 + 2 个提醒
| 函数 | 用途 | 触发场景 |
|---|---|---|
totalSupply() | 查看代币总量 | 浏览器读合约 |
balanceOf(account) | 查指定地址余额 | 钱包余额刷新 |
transfer(to, amount) | 直接转账 | 用户 A 发给用户 B |
approve(spender, amount) | 授权他人代花 | DEX 合约调用 |
transferFrom(from, to, amount) | 代理转账 | Uniswap 成交 |
allowance(owner, spender) | 查授权剩余额度 | UI 显示授权上限 |
::: tip 两个提醒
- 不是写了这几个函数就能称作 ERC-20,事件
Transfer与Approval也必须完整触发。 - decimals 默认 18,少写 0 会直接升值 10^18 倍,踩坑率 100%。
:::
三、30 行代码跑通首个 Solidity 代币
以下为最安全写法,直接继承 OpenZeppelin 的 audited 代码,减少重新踩坑:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract KittenCoin is ERC20 {
constructor() ERC20("KittenCoin", "CAT") {
// 铸造 100 万枚并全部发到部署者地址
_mint(msg.sender, 1_000_000 * 10 ** decimals());
}
}部署脚本示例(Hardhat):
const hre = require("hardhat");
async function main() {
const cat = await hre.ethers.deployContract("KittenCoin");
await cat.waitForDeployment();
console.log("Deployed at:", cat.target);
}运行指令:
npx hardhat run scripts/deploy.js --network goerli一键出合约地址后,复制到 Etherscan「Verify & Publish」填 Compiler 版本 0.8.19,即可完成公开源码。
四、进阶玩法:增发、销毁与权限控制
1. 可增发代币(Mintable)
沿用 OpenZeppelin 的 ERC20PresetMinterPauser:
contract MintableCAT is ERC20PresetMinterPauser {
constructor() ERC20PresetMinterPauser("MintableCAT", "MCAT") {}
}MINTER_ROLE 可授予 DAO 多签,避免单一地址作恶。
2. 通缩模型(燃烧机制)
在转账或卖出时进行 burn,减少 ERC-20 总供应量:
function _transfer(address from, address to, uint256 amount) internal override {
uint256 burn = amount * 2 / 100; // 2% 燃烧
super._transfer(from, address(0), burn);
super._transfer(from, to, amount - burn);
}3. 黑名单风控(黑名单映射)
根据合规需求扩展,将指定地址禁止转账。注意更新时做好事件记录防止争议。
五、本地测试 vs 主网部署:三套工具对比
- Hardhat
速度最快,console.log()调试友好,能让新手 5 分钟调试完智能合约。 - Truffle + Ganache
经典搭配,教学资源丰富,可视化 UI 强。 - Foundry
rust 实现,Gas 估算更准,大型代码库 CI/CD 必备。
六、合规与安全:不能跳过的 3 个 Checklist
- 审计
主网部署前提交 CertiK、SlowMist 等至少中级审计。 - 税务
在新加坡或瑞士发行做白名单,避开多国重复征税。 - 法律声明
智能合约中增加「非证券」及「非投资建议」注释,可降低监管风险。
常见问题 FAQ
Q1:为什么同一个合约,MetaMask 显示 18 位小数?
A:Solidity 内部全部用整数计算,钱包端自己除 10^decimals() 展示。如把 decimals 设为 0,1 枚即 1 个单位,价格波动剧烈,新手慎用。
Q2:可以只在 Remix 上部署直接去 Uniswap 吗?
A:可以,但 Remix 没有经过源代码验证,在 DEX 地址栏粘贴合约,区块浏览器会提示风险,导致流动性池无人问津。请至少通过 Etherscan 验证。
Q3:Gas 费太贵,有没有 Layer2 直接发行?
A:Arbitrum、Optimism 都已支持 ERC-20 代币,部署成本小于 1 USD;跨链桥到主网后,即可在所有 DEX 交易。
Q4:如何空投给 10,000 地址而不失效率?
A:使用「Merkle Tree 空投」+「签名领取」模式,用户自提省 Gas,还可防范机器人薅羊毛。
七、彩蛋:代币经济模型 5 步小脚本
- 总量 100%:铸造 100 万枚
CAT。 - 流动性池 40% → 锁仓 2 年,合约Ownership 转时间锁。
- 团队 15% → 1 年 cliff、24 月线性释放。
- 空投 20% → 早期 NFT 持有者快照。
- 社区奖励 25% → DAO 治理每月提案投票决定。
👉 领取完整经济模型 Excel 模板与 Google 表格链接
写在最后
发行 ERC-20代币 的技术门槛已经越来越低,但真正的差距来自 产品定位 与 社区共识。把代码开源到 GitHub,用中文 README 做入门教程,再提交一次审计报告,你的项目就能在开发者圈层迅速积累首批忠实用户。祝各位都在下一轮牛市里「写合约,发真币」。