在区块链和加密货币的世界里,代币(Token)扮演着至关重要的角色,它们不仅是价值储存和交换的媒介,更是驱动去中心化应用(DApp)、社区治理和数字资产创新的核心,以太坊,作为全球最大的智能合约平台,凭借其强大的图灵完备性和庞大的开发者生态,成为了创建代币的首选之地,本文将为您提供一份全面的指南,带您了解如何基于以太坊构建自己的代币。
在开始之前,我们首先要明白为什么以太坊是构建代币的“黄金标准”:
对于大多数初次构建代币的开发者来说,ERC-20 是最理想的起点。

在敲下第一行代码之前,您需要准备以下几样东西:
以下是使用 Hardhat 框架创建一个简单 ERC-20 代币的详细步骤:
创建 Hardhat 项目
打开您的终端,运行以下命令:
mkdir my-erc20-token cd my-ERC20-token npm init -y npm install --save-dev hardhat npx hardhat
在交互式提示中,选择 "Create a basic sample project"。

编写智能合约
Hardhat 会为您生成一个 contracts 文件夹,您可以创建自己的 Solidity 文件,MyToken.sol。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
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 万个代币
}
}
代码解析:
SPDX-License-Identifier 和 pragma solidity 是标准声明。import "@openzeppelin/contracts/token/ERC20/ERC20.sol";:我们引入了 OpenZeppelin 库中的 ERC20 合约,这是一个经过安全审计、生产就绪的 ERC-20 实现,可以避免从零开始编写时可能出现的漏洞。contract MyToken is ERC20:我们的 MyToken 合约继承自 ERC20,从而自动获得了所有标准代币的功能(如 transfer, approve, allowance 等)。constructor:合约的构造函数,只在部署时运行一次,我们在这里代币的名称和符号,并使用 _mint 函数向合约部署者(msg.sender)发行初始供应量,注意 10**decimals() 的乘法,因为 ERC-20 标准通常将代币表示为最小单位(如 wei 以太坊),decimals() 通常为 18。配置部署脚本

在 scripts 文件夹中,创建一个部署脚本,deploy.js:
async function main() {
// 获取合约工厂
const MyToken = await ethers.getContractFactory("MyToken");
// 部署合约
const myToken = await MyToken.deploy("My Awesome Token", "MAT");
// 等待部署完成
await myToken.deployed();
console.log("MyToken 合约已部署到:", myToken.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
编译和测试
在终端中运行:
npx hardhat compile npx hardhat test
编译成功后,您的合约代码会生成在 artifacts 目录中,测试环节确保您的合约按预期工作。
部署到以太坊网络
这是最后一步,在部署前,请确保您的 MetaMask 已连接到正确的网络(主网或测试网,如 Sepolia)。
在终端中运行部署命令:
npx hardhat run scripts/deploy.js --network <network-name>
将 <network-name> 替换为您要部署到的网络名称,sepolia,您需要在 hardhat.config.js 文件中预先配置好该网络的信息。
部署成功后,终端会输出您的代币合约地址,恭喜!您已经成功在以太坊上创建了一个属于自己的代币。
创建代币只是第一步,要让它产生价值,还需要: