以太坊上创建代币完全指南,从零开始构建你的ERC-20代币
以太坊作为全球最大的智能合约平台,为去中心化应用(DApps)和数字代币的发行提供了强大的基础设施,基于以太坊的ERC-20代币标准是最广泛使用和应用最成熟的代币标准,它使得代币在以太坊生态内的互操作性成为可能,无论是用于项目融资、社区激励、还是代表某种权益或资产,创建一枚ERC-20代币都是许多开发者和项目方的必备技能,本文将为你详细介绍如何在以太坊上创建一枚属于自己的ERC-20代币。
创建以太坊代币前的准备工作
在开始编码之前,你需要做好以下准备:
-
明确代币的用途和属性:
- 代币名称:My Awesome Token”。
- 代币符号:MAT”,通常是2-3个字母。
- 总供应量:你计划发行的代币总数,例如1000000000000000000000000 (18位小数,即1000万枚)。
- 小数位数:以太坊建议使用18位小数,与ETH保持一致,便于计算和兼容。
- 代币用途:它是功能型代币、治理代币,还是资产抵押代币?这将影响智能合约的复杂度。
-
开发环境搭建:
- Node.js和npm/yarn:JavaScript运行时环境和包管理器,用于运行Solidity编译器和开发框架。
- 代码编辑器:如VS Code,并安装Solidity插件。
- Truffle Suite 或 Hardhat:流行的以太坊开发框架,用于编译、部署和测试智能合约,本文将以Hardhat为例进行介绍,因为它更现代化且社区活跃。
- MetaMask:浏览器插件钱包,用于与以太坊网络交互、管理账户和支付部署 gas 费。

-
以太坊账户和ETH:
你需要一个包含足够ETH的MetaMask账户,用于支付部署智能合约时的gas费用,Gas是以太坊网络中执行操作的计算费用。
使用Hardhat创建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项目结构。
-
安装OpenZeppelin Contracts: OpenZeppelin是一个提供安全、可审计的智能合约库的社区项目,它实现了ERC-20标准以及其他重要的标准,我们使用它来避免重复造轮子并提高安全性。
npm install @openzeppelin/contracts
-
编写ERC-20代币智能合约: 在
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, 1000000000000000000000000); // 初始供应量:1000万,18位小数 } }SPDX-License-Identifier:许可证标识符。pragma solidity ^0.8.0;:指定Solidity编译器版本。import "@openzeppelin/contracts/token/ERC20/ERC20.sol";:导入OpenZeppelin的ERC20合约。contract MyToken is ERC20:声明我们的合约继承自ERC20。constructor:构造函数,在合约部署时调用,它接收代币名称和符号作为参数。_mint(msg.sender, 1000000000000000000000000):铸造初始代币供应量给合约部署者,这里的数量是1000万乘以10的18次方(因为18位小数)。
-
配置Hardhat网络: 确保你的
hardhat.config.js文件正确配置,默认情况下,它会连接到本地Hardhat网络,如果你想在以太坊测试网(如Goerli、Sepolia)或主网上部署,你需要添加相应的网络配置,并配置你的MetaMask私钥到环境变量中(推荐使用.env文件和dotenv包)。 -
编译智能合约: 在终端执行:
npx hardhat compile
Hardhat会编译
contracts目录下的所有Solidity文件,并在artifacts目录下生成编译后的ABI和字节码。 -
编写部署脚本: 在
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 deployed to:", myToken.address); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });这个脚本会获取我们的合约工厂,然后部署合约。
-
部署智能合约: 在部署之前,确保你的MetaMask已经连接到正确的网络(本地测试网或测试网/主网),并且账户有足够的ETH。 执行部署脚本:
npx hardhat run scripts/deploy.js --network <network_name>
如果是本地网络,
<network_name>可以是hardhat;如果是测试网,需要替换为你在hardhat.config.js中配置的网络名称,例如goerli,部署成功后,终端会输出你部署的代币合约地址。
验证和测试你的代币
-
验证代币: 为了让其他人可以与你的代币交互并查看其源代码,你需要将合约代码验证到以太坊区块链上(如果使用测试网或主网),大多数区块链浏览器(如Etherscan)都支持合约验证,你需要提供合约的源代码、编译器版本、ABI、字节码等信息,OpenZeppelin的合约通常有标准的验证方式。
-
测试代币功能:
- 查看代币信息:在Etherscan上输入你的代币地址,可以查看代币名称、符号、总供应量、合约创建者等信息。
- 使用MetaMask添加代币:在MetaMask中,点击“添加代币”,选择“自定义代币”,然后输入你的代币合约地址和18位小数,MetaMask会自动填充代币名称和符号。
- 转账测试:你可以使用MetaMask或其他支持ERC-20的钱包(如MyEtherWallet)进行代币转账测试,验证转账功能是否正常。
后续注意事项
- 安全性:智能合约一旦部署,修改成本极高,在部署前务必进行充分的测试,可以使用Hardhat的单元测试功能编写测试用例,也可以考虑进行专业的安全审计。
- Gas优化:对于复杂的代币逻辑,需要注意Gas消耗,避免用户因Gas费过高而无法使用。
- 代币经济模型:如果你的代币有特定的经济模型(如挖矿、销毁、手续费等),需要在智能合约中实现相应的逻辑,这会使合约更复杂。
- 合规性:发行代币可能涉及法律和监管问题,请务必了解并遵守当地法律法规。
通过以上步骤,你已经成功地在以太坊上创建并部署了一枚属于自己的ERC-20代币,从环境搭建、智能合约编写、编译部署到测试验证,每一步都至关重要,虽然创建过程相对直接,但背后涉及到的区块链原理、智能合约安全和代币经济设计等知识值得深入学习,希望这份指南能为你开启以太坊代币开发之旅提供有力的帮助,安全永远是第一位的,谨慎对待每一行代码。