ZBLOG

以太坊发币全攻略,从零开始创建你的ERC代币

在区块链的世界里,以太坊凭借其智能合约功能,成为了发行代币(通常指基于以太坊的代币)最流行、最灵活的平台之一,无论是用于项目众筹、社区治理,还是作为生态内的 utility 代币,在以太坊上发币都是许多开发者和项目方的首选,本文将为你详细拆解在以太坊上发行代币的全过程,从基础概念到实操步骤,助你轻松上手。

了解以太坊代币标准:ERC

在开始之前,我们需要明白以太坊上的代币通常遵循一定的“标准”,以确保它们与以太坊生态系统中的钱包、交易所和其他服务兼容,最常见的标准有:

  1. ERC-20 (Ethereum Request for Comments 20):这是最著名、使用最广泛的代币标准,它定义了一套统一的接口(函数和事件),使得代币可以在以太坊网络上轻松转移、交易,并被各种钱包和交易所支持,绝大多数 fungible token(同质化代币,即每个代币无差异,可互换)都遵循ERC-20标准。
  2. ERC-721:这是非同质化代币(NFT)的标准,每个代币都是独一无二的,不可互换,主要用于数字艺术品、收藏品等。
  3. ERC-1155:多代币标准,允许在一个智能合约中创建多种不同类型的代币(包括同质化和非同质化),更高效且节省 gas 费。

对于大多数初学者和项目而言,ERC-20 是首选,本文将主要围绕 ERC-20 代币的发行进行讲解。

发行以太坊代币的准备工作

在动手编写代码之前,你需要做好以下准备:

  1. 明确代币用途和属性

    • 代币名称:"My Awesome Token"。
    • 代币符号:"MAT",通常2-3个字符。
    • 总供应量:你计划发行多少枚代币。
    • 小数位数:代币可分割的最小单位位数,类似于比特币的小数点后8位,ERC-20 默认支持18位小数,你也可以自定义。
    • 代币用途:代币在项目中扮演什么角色?是功能型代币、治理代币还是证券型代币(需注意合规性)?
  2. 安装必要的开发工具

    • Node.js 和 npm (或 yarn):Node.js 是一个 JavaScript 运行时,npm 是其包管理器,你可以在官网下载并安装。
    • Truffle Suite:Truffle 是一个流行的以太坊开发框架,用于编译、部署和测试智能合约,你可以通过 npm install -g truffle 安装。
    • MetaMask:一个浏览器插件钱包,用于与以太坊网络交互、管理私钥、支付 gas 费等,你需要安装并配置好 MetaMask,并确保有足够的 ETH 支付部署合约的费用。
  3. 选择开发环境

    • 你可以使用 Remix IDE:一个基于浏览器的 Solidity 智能合约开发环境,非常适合初学者,无需本地配置。
    • 或者使用 本地开发环境:如使用 Truffle 初始化项目,在本地编写、编译和测试合约,然后部署到测试网或主网。

创建 ERC-20 代币智能合约

ERC-20 代币的核心是其智能合约,你可以选择以下两种方式之一来创建:

使用 OpenZeppelin 标准合约库(推荐)

OpenZeppelin 是一个开源的智能合约库,提供了经过审计的安全标准模板,包括 ERC-20 代币的实现,使用它可以大大减少安全漏洞的风险。

  1. 安装 OpenZeppelin:如果你使用 Truffle 项目,在项目目录下运行 npm install @openzeppelin/contracts

  2. 编写合约代码: 创建一个新的 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, 1000000 * 10 decimals()); // 发行 1,000,000 枚代币,假设小数位数为 18
        }
    }
    • SPDX-License-Identifier:许可证标识。
    • pragma solidity ^0.8.0;:指定 Solidity 编译器版本。
    • import "@openzeppelin/contracts/token/ERC20/ERC20.sol";:导入 OpenZeppelin 的 ERC20 合约。
    • contract MyToken is ERC20:定义一个名为 MyToken 的合约,继承自 ERC20
    • constructor:构造函数,在合约部署时调用,这里我们传入代币名称和符号,并在构造函数中调用 _mint 函数向合约部署者(msg.sender)发行指定数量的代币。1000000 * 10 decimals() 表示发行 100 万代币,乘以 10^decimals() 是因为 OpenZeppelin 的 ERC20 默认小数位数为 18,你需要根据你的总供应量和小数位数调整计算方式,如果总供应量是 1,000,000,小数位数 18,那么就是 1000000 * 10**18

从零开始编写简单的 ERC-20 合约(不推荐初学者)

这种方式需要你实现 ERC-20 标准的所有接口函数(如 totalSupply, balanceOf, transfer, transferFrom, approve, allowance 等),代码量较大且容易出错,除非你有特殊需求,否则不建议采用。

编译智能合约

  1. 使用 Remix IDE

    • 打开 Remix IDE,将你编写的 MyToken.sol 代码粘贴到 "File Explorers" 标签页。
    • 切换到 "Solidity Compiler" 标签页,选择合适的编译器版本(与你的 pragma 语句一致),然后点击 "Compile MyToken.sol" 按钮,如果编译成功,会在合约名称旁边看到一个绿色的对勾。
  2. 使用 Truffle

    • 在 Truffle 项目的 contracts 目录下放置你的 MyToken.sol
    • 在项目根目录的 truffle-config.js 中配置编译器版本等。
    • 运行 truffle compile 命令,编译成功后,生成的 ABI(应用二进制接口)和字节码会保存在 build/contracts 目录下。

部署智能合约到以太坊网络

部署合约需要支付 gas 费,建议先在测试网(如 Ropsten, Goerli, Sepolia)进行测试,确认无误后再部署到主网。

  1. 准备测试网 ETH

    从官方水龙头(faucet)获取测试网 ETH,Goerli 水龙头:https://goerlifaucet.com/(注意:水龙头可能有每日限额或需要完成某些任务)。

  2. 配置 MetaMask

    在 MetaMask 中添加测试网络(如 Goerli Test Network),并导入你获取测试网 ETH 的账户。

  3. 部署合约

    • 使用 Remix IDE

      • 切换到 "Deploy & Run Transactions" 标签页。
      • 在 "ENVIRONMENT" 下拉菜单中选择 "Injected Provider - MetaMask",此时会连接到你的 MetaMask 钱包。
      • 在 "CONTRACT" 下拉菜单中选择你编译好的 "MyToken" 合约。
      • 在 "DEPLOY" 按钮下方,你可以输入构造函数所需的参数,例如代币名称 "My Awesome Token" 和符号 "MAT"。
      • 点击 "DEPLOY" 按钮,MetaMask 会弹出交易确认窗口,确认并支付 gas 费,等待交易被打包,部署成功后,你可以在 "Deployed Contracts" 部分看到你的合约地址。
    • 使用 Truffle

      • 创建一个迁移脚本(migrations script),2_deploy_contracts.js,放在 migrations 目录下:

        const MyToken = artifacts.require("MyToken");
        module.exports = function (deployer) {
          deployer.deploy(MyToken, "My Awesome Token", "MAT");
        };
      • 连接到测试网:truffle console --network <network_name>truffle console --network goerli)。

      • 在控制台中运行:migrate --network <network_name>,Truffle 会自动执行迁移脚本并部署合约。

分享:
扫描分享到社交APP