以太坊ERC20代币发行全攻略,从零开始创建你的第一个代币

博主:neragonerago 2026-10-08 09:14:48 3

什么是ERC20代币?

ERC20是以太坊上最受欢迎的代币标准(Ethereum Request for Comments 20),它定义了一组智能合约必须实现的接口规范,只要一个智能合约遵循ERC20标准,它发行的代币就可以被钱包、交易所和其他去中心化应用(DApp)识别和支持。

以太坊ERC20代币发行全攻略,从零开始创建你的第一个代币

知名的ERC20代币包括USDT(泰达币)、LINK(Chainlink)、UNI(Uniswap)等,ERC20标准主要规定了以下核心函数:

  • totalSupply():代币总供应量
  • balanceOf():查询某个地址的代币余额
  • transfer():转账
  • approve():授权他人使用代币
  • transferFrom():被授权方执行转账

发行ERC20代币前的准备工作

在开始发行代币之前,你需要准备以下几样东西:

  1. 一个以太坊钱包:推荐使用MetaMask(小狐狸钱包),用于管理账户和支付gas费用。

  2. 一定数量的ETH:部署合约需要支付gas费,主网部署成本较高,建议先在测试网练习,测试网ETH可以在水龙头(Faucet)网站免费领取。

  3. 开发工具:

    • Remix IDE(推荐新手):基于浏览器的智能合约开发环境,无需安装
    • Hardhat / Truffle:适合有编程基础的开发者
  4. 基础概念了解:智能合约一旦部署到区块链上就无法修改,因此务必在测试网充分测试后再部署主网。

编写ERC20智能合约

使用OpenZeppelin标准库(推荐)

OpenZeppelin是经过审计的安全合约库,新手直接使用可以避免大部分安全漏洞。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
    constructor() ERC20("My Token", "MTK") {
        // 发行100万枚代币,ERC20默认18位小数
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }
}

在这个合约中:

  • "My Token" 是代币全名
  • "MTK" 是代币符号
  • 1000000 * 10 ** decimals() 表示发行100万枚代币

手写完整ERC20合约(学习用)

如果想深入理解原理,可以自己实现全部接口:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract SimpleERC20 {
    string public name = "My Token";
    string public symbol = "MTK";
    uint8 public decimals = 18;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    constructor() {
        totalSupply = 1000000 * 10 ** uint256(decimals);
        balanceOf[msg.sender] = totalSupply;
    }
    function transfer(address to, uint256 value) public returns (bool success) {
        require(balanceOf[msg.sender] >= value, "Insufficient balance");
        balanceOf[msg.sender] -= value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);
        return true;
    }
    function approve(address spender, uint256 value) public returns (bool success) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }
    function transferFrom(address from, address to, uint256 value) public returns (bool success) {
        require(balanceOf[from] >= value, "Insufficient balance");
        require(allowance[from][msg.sender] >= value, "Insufficient allowance");
        allowance[from][msg.sender] -= value;
        balanceOf[from] -= value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);
        return true;
    }
}

部署ERC20代币的详细步骤

第1步:打开Remix并创建合约

访问 remix.ethereum.org,新建一个 .sol 文件,粘贴上面写好的合约代码。

第2步:编译合约

在左侧“Solidity Compiler”面板中,选择合适的编译器版本(如0.8.20),点击“Compile”按钮进行编译。

第3步:连接钱包并切换网络

  • 打开MetaMask,连接Remix
  • 练习阶段先切换到Sepolia测试网
  • 确保钱包里有测试网ETH支付gas费

第4步:部署合约

在“Deploy & Run Transactions”面板中:

  1. Environment选择“Injected Provider - MetaMask”
  2. 点击“Deploy”按钮
  3. 在MetaMask中确认交易并支付gas费

等待几秒到几十秒,合约部署完成后,下方会出现合约地址,请务必保存好这个地址。

部署后的验证与管理

在Etherscan上验证合约

将合约地址粘贴到Etherscan,为了方便他人查看合约源码,建议进行合约验证:

  • 进入Etherscan的“Verify & Publish”页面
  • 选择合约类型和编译器版本
  • 粘贴源代码并提交

验证后,任何人都能查看你的代币合约详情,也可以直接在Etherscan页面上调用transfer等函数。

添加代币到钱包

在MetaMask中点击“导入代币”,输入合约地址,即可看到你的代币余额。

代币分发

作为合约部署者,初始代币都在你的地址中,你可以通过钱包直接转账给社区成员、注入流动性池,或用于其他用途。

发行ERC20代币的成本与注意事项

成本方面:使用OpenZeppelin标准合约部署,主网gas费通常在数美元到数十美元之间,具体取决于网络拥堵程度,选择gas价格较低的时段部署可以节省成本。

重要注意事项:

  1. 安全第一:合约部署后不可修改,任何代码漏洞都可能导致代币被盗,重要项目务必请专业机构审计。

  2. 谨慎设定参数:代币名称、符号、总量、小数位部署后无法更改。

  3. 合规风险:在中国大陆,发行代币融资(ICO)属于非法金融活动,个人学习和技术研究请仅限于测试网,务必了解并遵守所在地区的法律法规。

  4. 防骗提醒:网络上有些“一键发币平台”可能存在风险,自己动手用Remix部署是最透明安全的学习方式。

发行ERC20代币的技术门槛其实并不高:准备钱包 → 编写合约 → 测试网测试 → 主网部署 → 验证合约,整个流程熟练后半小时内即可完成,真正困难的不是“发币”这个动作,而是代币背后的经济模型设计、安全审计、社区运营和合规要求。

对于区块链开发者而言,亲手发行一个ERC20代币是学习智能合约开发的绝佳入门实践,建议初学者先在测试网上完整走一遍流程,充分理解每一行

The End

发布于:2026-10-08,除非注明,否则均为区块链社区- 欧亿APP下载原创文章,转载请注明出处。