以太坊作为全球领先的智能合约平台,不仅支持加密货币以太坊(ETH)的交易,更重要的是,它使得任何人都可以在其区块链上发行自己的代币,这些代币遵循以太坊上的标准,其中最著名和广泛使用的是ERC-20标准(用于 fungible tokens,即同质化代币,如交易所的交易币)和ERC-721标准(用于 NFTs,即非同质化代币,每个代币独一无二),本教程将以最常用的ERC-20代币为例,带你一步步了解如何在以太坊上发行自己的代币。
重要提示: 发行代币涉及技术、财务和法律风险,在尝试之前,请确保你已充分了解相关风险,并可能需要咨询法律和财务专业人士,本教程仅供学习和参考,不构成任何投资建议。
第一部分:发行代币前的准备工作
在开始编写智能合约之前,你需要准备以下工具和环境:
-
一个以太坊钱包:
- 这是你与以太坊交互的工具,用于存储ETH和代币,以及支付交易费用。
- 推荐使用 MetaMask,它是一款浏览器扩展钱包,支持Chrome、Firefox等,使用广泛且易于上手。
- 访问 MetaMask 官网 (metamask.io) 下载并安装,按照提示创建钱包并妥善保存好你的助记词(Seed Phrase),这是你找回钱包的唯一凭证,绝对不要泄露给他人。
-
以太币(ETH):
- 在以太坊网络上执行任何操作(包括部署智能合约)都需要支付 gas 费用,这个费用是以 ETH 支付的。
- 确保你的 MetaMask 钱包中有足够的 ETH,用于支付部署代币合约时的 gas 费,费用会根据网络拥堵程度而变化。
-
代码编辑器:
- 用于编写和修改智能合约代码,推荐使用 Visual Studio Code (VS Code),它免费且功能强大,并支持 Solidity 语言插件。
-
Solidity 编译器:
- Solidity 是以太坊智能合约的主要编程语言,你可以在 VS Code 中安装 Solidity 插件,它内置了编译器,方便你编译代码。
-
(可选)Remix IDE:
- 如果你不想在本地配置环境,可以使用 Remix IDE,它是一个基于浏览器的 Solidity 开发环境,无需安装,非常适合初学者快速上手和测试智能合约,本教程将以 Remix IDE 为例进行讲解,因为它更简洁直观。
第二部分:使用 Remix IDE 创建 ERC-20 代币
Remix IDE 是一个对初友好的在线工具,我们通过它来创建和部署代币合约。
-
访问 Remix IDE:
- 打开浏览器,访问
remix.ethereum.org。
- 打开浏览器,访问
-
创建新文件:
- 在 Remix IDE 左侧的文件浏览器中,点击“新建文件”图标,创建一个新文件,命名为
MyToken.sol(或你喜欢的任何名字,后缀必须是.sol)。
- 在 Remix IDE 左侧的文件浏览器中,点击“新建文件”图标,创建一个新文件,命名为
-
编写 ERC-20 代币合约代码:
- 在右侧的代码编辑区,粘贴以下标准的 ERC-20 代币合约代码,这是一个非常基础的代币合约,包含了代币名称、符号、总供应量以及基本的转账功能。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract MyToken is ERC20 { constructor(uint256 initialSupply) ERC20("My Token", "MTK") { _mint(msg.sender, initialSupply); } }代码解释:
SPDX-License-Identifier: MIT:声明许可证类型。pragma solidity ^0.8.0;:指定 Solidity 编译器版本,这里使用 0.8.0 或更高版本。import "@openzeppelin/contracts/token/ERC20/ERC20.sol";:导入 OpenZeppelin 库中的标准 ERC-20 合约实现,OpenZeppelin 提供了经过审计的安全合约模板,强烈建议使用,而不是自己从头实现所有逻辑,以避免安全漏洞。contract MyToken is ERC20 { ... }:定义一个名为MyToken的新合约,它继承自 OpenZeppelin 的ERC20合约,因此自动获得了所有 ERC-20 标准的功能(如总供应量、余额查询、转账、授权等)。constructor(uint256 initialSupply) ERC20("My Token", "MTK") { ... }:构造函数,在合约部署时执行一次。ERC20("My Token", "MTK"):调用父类 ERC20 的构造函数,设置代币的名称(Name)为 "My Token",符号(Symbol)