以太坊发币全攻略,从零开始编写你的第一个ERC20代币代码

在区块链世界中,代币(Token)是以太坊生态最基础也最强大的应用之一,无论是社区治理、项目融资,还是数字资产流转,ERC20标准的代币都扮演着核心角色,本文将带你从零开始,手把手教你编写一个以太坊发币代码,并完成部署与测试的全流程。

什么是ERC20代币?为什么选择它

ERC20是以太坊上最代币标准之一,由以太坊社区在2015年提出,它定义了一套统一的接口规范,包括转账(transfer)、转账From(transferFrom)、余额查询(balanceOf)、 allowance(授权)等核心功能,所有遵循ERC20标准的代币都能兼容以太坊钱包(如MetaMask)、交易所、去中心化应用(DApp)等基础设施,实现无缝流通。

ERC20就像“代币界的USB接口”——只要你的代币符合这个标准,就能插进以太坊的“生态插座”里使用,这也是绝大多数新项目选择发行ERC20代币的原因。

发币前的准备工作:工具与环境

在写代码之前,你需要准备好以下工具和环境:

开发环境

  • Node.js和npm:用于运行Solidity编译器和部署脚本(建议安装Node.js 16+版本)。
  • Solidity编译器(solc):将Solidity代码编译成以太坊虚拟机(EVM)可执行的字节码。
  • 以太坊钱包:MetaMask(浏览器插件),用于管理账户和私钥,与测试网交互。

测试网络

为了避免消耗真实的以太币(ETH),建议在测试网(如Goerli、Sepolia)上部署,测试网ETH可以通过“水龙头”(Faucet)免费获取,

开发框架(可选)

虽然可以直接写Solidity代码,但使用HardhatTruffle等框架能大幅简化开发流程(包括编译、测试、部署等),本文以Hardhat为例,因为它对新手更友好,且文档完善。

编写ERC20代币代码:从零到一

ERC20代币的核心逻辑其实很简单:记录每个地址的代币余额,实现转账功能,并支持授权(允许其他地址转移你的代币),下面是一个完整的ERC20代币合约代码,我们一步步拆解。

安装Hardhat

创建一个项目目录并初始化Hardhat:

mkdir my-erc20-token
cd my-erc20-token
npm init -y
npm install --save-dev hardhat
npx hardhat

在交互式命令中选择“Create a basic sample project”,然后安装依赖(@nomicfoundation/hardhat-toolbox等)。

编写Solidity合约

contracts目录下创建MyToken.sol文件,粘贴以下代码:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
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**18); // 初始发行100万个代币,18位小数
    }
}

代码解析:

  • SPDX-License-Identifier: MIT:声明许可证类型(MIT是开源常用许可证)。
  • pragma solidity ^0.8.20:指定Solidity编译器版本(0.8.20及以上,0.9以下)。
  • import "@openzeppelin/contracts/token/ERC20/ERC20.sol":导入OpenZeppelin的ERC20标准合约,OpenZeppelin是经过审计的合约库,能避免安全漏洞,强烈推荐使用。
  • contract MyToken is ERC20:声明合约继承自ERC20,自动实现所有标准接口。
  • constructor:构造函数,在合约部署时执行。
    • string memory name, string memory symbol:代币名称(如“My Token”)和符号(如“MTK”)。
    • _mint(msg.sender, 1000000 * 10**18):向部署者地址 mint(发行)100万个代币。10**18是ERC20标准的小数位数(相当于1代币=10^18个最小单位,类似以太坊的wei)。

编译合约

在项目根目录运行:

npx hardhat compile

编译成功后,合约字节码会生成在artifacts/contracts/MyToken.sol/MyToken.json中。

部署合约到测试网

配置Hardhat网络

hardhat.config.js中添加测试网配置(以Goerli为例):

require("@nomicfoundation/hardhat-toolbox");
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.20",
  networks: {
    goerli: {
      url: "https://goerli.infura.io/v3/YOUR_INFURA_PROJECT_ID", // 替换为你的Infura项目ID
      accounts: ["
随机配图
YOUR_PRIVATE_KEY"] // 替换为你的测试网私钥(以0x开头) } } };
  • 获取Infura项目ID:访问Infura官网,注册并创建新项目,选择“Web3 API”,复制HTTPS URL中的ID。
  • 获取私钥:在MetaMask中点击账户→“导出私钥”(注意:私钥等同于密码,切勿泄露给他人!仅在测试网使用)。

编写部署脚本

scripts目录下创建deploy.js

async function main() {
  const MyToken = await ethers.getContractFactory("MyToken");
  const myToken = await MyToken.deploy("My Token", "MTK");
  await myToken.deployed();
  console.log("MyToken deployed to:", myToken.address);
}
main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

部署合约

确保你的MetaMask已切换到Goerli测试网,且账户中有测试网ETH,运行:

npx hardhat run scripts/deploy.js --network goerli

部署成功后,你会看到类似输出:

MyToken deployed to: 0x1234567890123456789012345678901234567890

这个0x...就是你的代币合约地址!

验证代币与测试功能

验证合约(可选)

为了增加可信度,可以将合约代码上传到区块链浏览器(如Etherscan)进行验证,在Goerli Etherscan中,找到你的合约地址,点击“Verify and Publish”,选择“Solidity (Single File)”,输入合约代码和版本信息即可。

测试代币功能

  • 查看余额:在Etherscan的合约页面,点击“Contract”→“Read Contract”,输入你的MetaMask地址,点击“balanceOf”即可查看代币余额(初始应为1000000个)。
  • 转账测试:点击“Write Contract”→“transfer”,输入接收地址和转账数量(如100),点击“transact”,MetaMask会弹出签名窗口,确认后即可完成转账。

注意事项与最佳实践

  1. 安全第一

    • 始终使用OpenZeppelin等经过审计的合约库,避免自己实现核心逻辑(如转账、授权)。
    • 私钥绝不泄露,测试网私钥也建议使用新创建的账户,与主网隔离。
  2. 代币参数设计

    • 名称和符号:简洁明了,避免侵权(如“Bitcoin”“Ethereum”等敏感词可能被平台屏蔽)。
    • 小数位数:ERC20标准建议18位(与以太坊一致),但可根据需求调整(如稳定币常用18位,部分代币用6位)。
    • 初始发行量:根据项目需求设定,避免过度通胀或稀缺。
  3. 合规性
    如果计划发行真实代币,需遵守当地法律法规(如反洗钱、KYC等),避免用于非法活动。

通过以上步骤,你已经成功编写、部署并测试了一个ERC20代币!从代码编写到部署上链,整个过程大约需要30分钟(取决于网络速度),ERC20代币是进入区块链开发的“敲门砖”,掌握它后,你还可以尝试发行NFT

本文由用户投稿上传,若侵权请提供版权资料并联系删除!