在区块链的世界里,以太坊凭借其智能合约功能,成为了发行代币(通常指基于以太坊的代币)最流行、最灵活的平台之一,无论是用于项目众筹、社区治理,还是作为生态内的 utility 代币,在以太坊上发币都是许多开发者和项目方的首选,本文将为你详细拆解在以太坊上发行代币的全过程,从基础概念到实操步骤,助你轻松上手。

了解以太坊代币标准:ERC
在开始之前,我们需要明白以太坊上的代币通常遵循一定的“标准”,以确保它们与以太坊生态系统中的钱包、交易所和其他服务兼容,最常见的标准有:
- ERC-20 (Ethereum Request for Comments 20):这是最著名、使用最广泛的代币标准,它定义了一套统一的接口(函数和事件),使得代币可以在以太坊网络上轻松转移、交易,并被各种钱包和交易所支持,绝大多数 fungible token(同质化代币,即每个代币无差异,可互换)都遵循ERC-20标准。
- ERC-721:这是非同质化代币(NFT)的标准,每个代币都是独一无二的,不可互换,主要用于数字艺术品、收藏品等。
- ERC-1155:多代币标准,允许在一个智能合约中创建多种不同类型的代币(包括同质化和非同质化),更高效且节省 gas 费。
对于大多数初学者和项目而言,ERC-20 是首选,本文将主要围绕 ERC-20 代币的发行进行讲解。
发行以太坊代币的准备工作
在动手编写代码之前,你需要做好以下准备:
-
明确代币用途和属性:
- 代币名称:"My Awesome Token"。
- 代币符号:"MAT",通常2-3个字符。
- 总供应量:你计划发行多少枚代币。
- 小数位数:代币可分割的最小单位位数,类似于比特币的小数点后8位,ERC-20 默认支持18位小数,你也可以自定义。
- 代币用途:代币在项目中扮演什么角色?是功能型代币、治理代币还是证券型代币(需注意合规性)?
-
安装必要的开发工具:
- Node.js 和 npm (或 yarn):Node.js 是一个 JavaScript 运行时,npm 是其包管理器,你可以在官网下载并安装。
- Truffle Suite:Truffle 是一个流行的以太坊开发框架,用于编译、部署和测试智能合约,你可以通过
npm install -g truffle安装。 - MetaMask:一个浏览器插件钱包,用于与以太坊网络交互、管理私钥、支付 gas 费等,你需要安装并配置好 MetaMask,并确保有足够的 ETH 支付部署合约的费用。
-
选择开发环境:
- 你可以使用 Remix IDE:一个基于浏览器的 Solidity 智能合约开发环境,非常适合初学者,无需本地配置。
- 或者使用 本地开发环境:如使用 Truffle 初始化项目,在本地编写、编译和测试合约,然后部署到测试网或主网。
创建 ERC-20 代币智能合约
ERC-20 代币的核心是其智能合约,你可以选择以下两种方式之一来创建:

使用 OpenZeppelin 标准合约库(推荐)
OpenZeppelin 是一个开源的智能合约库,提供了经过审计的安全标准模板,包括 ERC-20 代币的实现,使用它可以大大减少安全漏洞的风险。
-
安装 OpenZeppelin:如果你使用 Truffle 项目,在项目目录下运行
npm install @openzeppelin/contracts。 -
编写合约代码: 创建一个新的 Solidity 文件,
MyToken.sol,然后编写如下代码:// 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()); // 发行 1,000,000 枚代币,假设小数位数为 18 } }SPDX-License-Identifier:许可证标识。pragma solidity ^0.8.0;:指定 Solidity 编译器版本。import "@openzeppelin/contracts/token/ERC20/ERC20.sol";:导入 OpenZeppelin 的 ERC20 合约。contract MyToken is ERC20:定义一个名为MyToken的合约,继承自ERC20。constructor:构造函数,在合约部署时调用,这里我们传入代币名称和符号,并在构造函数中调用_mint函数向合约部署者(msg.sender)发行指定数量的代币。1000000 * 10 decimals()表示发行 100 万代币,乘以10^decimals()是因为 OpenZeppelin 的 ERC20 默认小数位数为 18,你需要根据你的总供应量和小数位数调整计算方式,如果总供应量是 1,000,000,小数位数 18,那么就是1000000 * 10**18。
从零开始编写简单的 ERC-20 合约(不推荐初学者)

这种方式需要你实现 ERC-20 标准的所有接口函数(如 totalSupply, balanceOf, transfer, transferFrom, approve, allowance 等),代码量较大且容易出错,除非你有特殊需求,否则不建议采用。
编译智能合约
-
使用 Remix IDE:
- 打开 Remix IDE,将你编写的
MyToken.sol代码粘贴到 "File Explorers" 标签页。 - 切换到 "Solidity Compiler" 标签页,选择合适的编译器版本(与你的 pragma 语句一致),然后点击 "Compile MyToken.sol" 按钮,如果编译成功,会在合约名称旁边看到一个绿色的对勾。
- 打开 Remix IDE,将你编写的
-
使用 Truffle:
- 在 Truffle 项目的
contracts目录下放置你的MyToken.sol。 - 在项目根目录的
truffle-config.js中配置编译器版本等。 - 运行
truffle compile命令,编译成功后,生成的 ABI(应用二进制接口)和字节码会保存在build/contracts目录下。
- 在 Truffle 项目的
部署智能合约到以太坊网络
部署合约需要支付 gas 费,建议先在测试网(如 Ropsten, Goerli, Sepolia)进行测试,确认无误后再部署到主网。
-
准备测试网 ETH:
从官方水龙头(faucet)获取测试网 ETH,Goerli 水龙头:https://goerlifaucet.com/(注意:水龙头可能有每日限额或需要完成某些任务)。
-
配置 MetaMask:
在 MetaMask 中添加测试网络(如 Goerli Test Network),并导入你获取测试网 ETH 的账户。
-
部署合约:
-
使用 Remix IDE:
- 切换到 "Deploy & Run Transactions" 标签页。
- 在 "ENVIRONMENT" 下拉菜单中选择 "Injected Provider - MetaMask",此时会连接到你的 MetaMask 钱包。
- 在 "CONTRACT" 下拉菜单中选择你编译好的 "MyToken" 合约。
- 在 "DEPLOY" 按钮下方,你可以输入构造函数所需的参数,例如代币名称 "My Awesome Token" 和符号 "MAT"。
- 点击 "DEPLOY" 按钮,MetaMask 会弹出交易确认窗口,确认并支付 gas 费,等待交易被打包,部署成功后,你可以在 "Deployed Contracts" 部分看到你的合约地址。
-
使用 Truffle:
-
创建一个迁移脚本(migrations script),
2_deploy_contracts.js,放在migrations目录下:const MyToken = artifacts.require("MyToken"); module.exports = function (deployer) { deployer.deploy(MyToken, "My Awesome Token", "MAT"); }; -
连接到测试网:
truffle console --network <network_name>(truffle console --network goerli)。 -
在控制台中运行:
migrate --network <network_name>,Truffle 会自动执行迁移脚本并部署合约。
-
-
