首页 > 默认分类 > 正文

在去中心化金融(DeFi)和区块链技术快速发展的今天,许多开发者和项目方希望通过发行代币来构建社区、融资或实现生态价值,EUL链(Ethereum Ultra Chain,以太坊超链)作为兼容以太坊虚拟机(EVM)的高性能公链,凭借低Gas费、高TPS和良好的生态兼容性,成为中小项目方发行代币的热门选择,本文将详细介绍在EUL链上发行代币的完整步骤,涵盖环境准备、合约编写、测试验证到主网上线的全流程,助你轻松完成发币。

发币前的准备工作:明确目标与工具选择

在开始发币流程前,需明确代币的核心属性与目标,这直接影响后续的技术选型与合约设计。

确定代币核心属性

代币的发行需先明确以下关键信息:

trong>代币符号:交易所和钱包中显示的简称,通常2-5个字符,如“ULT”。
  • 总供应量:代币发行总量,如“1,000,000,000”(10亿),需考虑小数位数(通常18位,与以太坊兼容)。
  • 代币类型:常见为ERC-20标准( fungible token,同质化代币,适用于支付、治理等场景),若需NFT功能则选择ERC-721/ERC-1155,本文以ERC-20为例。
  • 特殊功能:是否包含手续费(如每笔转账自动燃烧1%给团队)、权限控制(如只有指定地址可 mint)等,需在合约中提前定义。
  • 准备开发环境

    编写ERC-20代币合约:核心逻辑实现

    ERC-20是以太坊生态中最通用的代币标准,定义了代币的基本功能(如转账、余额查询、授权等),EUL链兼容EVM,可直接使用Solidity编写ERC-20合约。

    安装开发依赖

    在项目目录下打开终端,安装Hardhat和相关依赖:

    # 初始化Hardhat项目
    npx hardhat init  
    # 安装依赖(OpenZeppelin提供安全的ERC-20合约模板)
    npm install @openzeppelin/contracts  
    npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox  

    编写合约代码

    contracts目录下创建新文件UltraToken.sol,编写ERC-20合约,以下为包含基础功能(总供应量、转账、权限控制)的完整代码:

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    import "@openzeppelin/contracts/access/Ownable.sol";
    contract UltraToken is ERC20, Ownable {
        constructor(
            string memory name,
            string memory symbol,
            uint256 initialSupply
        ) ERC20(name, symbol) Ownable(msg.sender) {
            _mint(msg.sender, initialSupply * 10**decimals()); // 默认18位小数
        }
        // 仅owner可mint(增发代币)
        function mint(address to, uint256 amount) public onlyOwner {
            _mint(to, amount);
        }
        // 销毁代币(burn)
        function burn(uint256 amount) public {
            _burn(msg.sender, amount);
        }
    }

    代码解析

    编译合约

    在终端运行编译命令,检查代码是否有误:

    npx hardhat compile

    编译成功后,合约ABI(应用程序二进制接口)和字节码会生成在artifacts/contracts/目录下,后续部署时需用到。

    测试合约功能:确保逻辑正确

    在主网部署前,需在测试网上验证合约功能,避免因代码错误导致资产损失。

    配置测试网络

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

    require("@nomicfoundation/hardhat-toolbox");
    /** @type import('hardhat/config').HardhatUserConfig */
    module.exports = {
      solidity: "0.8.20",
      networks: {
        eul_testnet: {
          url: "https://rpc.eul-testnet.xyz", // 替换为EUL测试网RPC
          accounts: ["你的钱包私钥"], // 从MetaMask导出的私钥(仅测试用,主网勿泄露)
        },
      },
    };

    编写测试脚本

    test目录下创建ultraToken.test.js,编写测试用例(覆盖转账、mint、burn等核心功能):

    const { expect } = require("chai");
    const { ethers } = require("hardhat");
    describe("UltraToken", function () {
      let token;
      let owner;
      let addr1;
      beforeEach(async function () {
        [owner, addr1] = await ethers.getSigners();
        const Token = await ethers.getContractFactory("UltraToken");
        token = await Token.deploy("Ultra Token", "ULT", ethers.parseUnits("1000000", 18)); // 初始供应100万
        await token.waitForDeployment();
      });
      it("Should assign the total supply of tokens to the owner", async function () {
        const ownerBalance = await token.balanceOf(owner.address);
        expect(await token.totalSupply()).to.equal(ownerBalance);
      });
      it("Should transfer tokens between accounts", async function () {
        await token.transfer(addr1.address, ethers.parseUnits("1000", 18));
        expect(await token.balanceOf(addr1.address)).to.equal(ethers.parseUnits("1000", 18));
      });
      it("Should allow owner to mint tokens", async function () {
        await token.mint(addr1.address, ethers.parseUnits("500", 18));
        expect(await token.balanceOf(addr1.address)).to.equal(ethers.parseUnits("1500", 18));
      });
      it("Should not allow non-owner to mint tokens", async function () {
        await expect(token.connect(addr1).mint(addr1.address, ethers.parseUnits("500", 18)))
          .to.be.revertedWith("Ownable: caller is not the owner");
      });
    });

    运行测试

    执行测试命令,检查所有用例是否通过:

    npx hardhat test --network eul_testnet

    若测试通过,说明合约逻辑正确;若失败,需根据错误提示修改代码并重新编译测试。

    部署合约到EUL主网:正式发币

    测试通过后,即可将合约部署到EUL主网,完成代币正式发行。

    准备主网环境

    修改部署脚本

    scripts目录下创建deploy.js,编写部署脚本(使用ethers.js与合约交互):

    async function main() {
      const [deployer] = await ethers.getSigners();
      console.log("Deploying contracts with the account:", deployer.address);
      const Token = await ethers.getContractFactory("UltraToken");
      const token = await Token.deploy(
        "Ultra Token",     // 代币名称
        "ULT",             // 代币符号
        ethers.parseUnits("1000000000", 18) // 总供应量10亿(18

    返回栏目