从0开始一步一步写一个ERC-20的EVM智能合约(利用hardhat、openzeppelin)

307 阅读3分钟

如果是发行一个token,其实就是几分钟搞定事情。能够在ETH以及各种L2都能跑起来。从环境安装,写代码,部署。轻轻松松详细教程。 反正就是有手就会的事情。

一、安装环境

  1. 安装Node.js: 确保你的计算机上安装了Node.js。你可以从Node.js官网下载并安装。

添加图片注释,不超过 140 字(可选)

  1. 安装Hardhat: 打开你的命令行工具(如cmd、Terminal或PowerShell),运行以下命令来全局安装Hardhat: npm install -g hardhat
  2. 创建Hardhat项目: 创建一个新的文件夹作为你的项目目录,并在该目录中运行以下命令来初始化Hardhat项目: npx hardhat
  3. 按照提示选择项目设置(对于ERC-20代币,选择默认设置或自定义设置均可)。
  4. 安装OpenZeppelin Contracts: 在项目根目录下,运行以下命令来安装OpenZeppelin Contracts库: npm install @openzeppelin/contracts

二、编写ERC-20代码

添加图片注释,不超过 140 字(可选)

在Hardhat项目中,你通常会在contracts文件夹下编写Solidity代码。利用OpenZeppelin的做ERC-20代币合约的示例:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
        _mint(msg.sender, initialSupply * (10 ** uint256(decimals())));
    }

    // 你可以添加其他函数或修改现有函数
}

注意:上面的代码假设你已经知道如何设置decimals()的值,这通常在ERC20的父类中定义。如果你需要自定义,你可能需要扩展ERC20基类或直接在构造函数中设置_setupDecimals(uint8 decimals_)(取决于你使用的OpenZeppelin版本)。

三、部署操作

  1. 配置Hardhat以连接到网络: 在hardhat.config.js或hardhat.config.ts文件中,配置你要部署到的网络(如Ropsten测试网络)。你可能需要设置url、accounts(用于部署合约的钱包私钥)和network_id等参数。
  2. 编写部署脚本: 在scripts文件夹下创建一个新的JavaScript文件(例如deploy.js),并使用Hardhat的部署API来部署你的代币合约。
const hre = require("hardhat");
   const { ethers } = hre;

   async function main() {
       const [deployer] = await ethers.getSigners();
       console.log("Deploying contracts with the account:", deployer.address);

       const MyToken = await ethers.getContractFactory("MyToken");
       const myToken = await MyToken.deploy(1000000); // 假设初始供应量为1,000,000个代币

       await myToken.deployed();
       console.log("MyToken deployed to:", myToken.address);
   }

   main()
       .then(() => process.exit(0))
       .catch((error) => {
           console.error(error);
           process.exit(1);
       });

添加图片注释,不超过 140 字(可选)

  1. 运行部署脚本: 在项目根目录下,运行以下命令来部署你的代币合约: npx hardhat run scripts/deploy.js --network ropsten 注意替换ropsten为你实际要部署到的网络名称。
  2. 验证合约: 如果你是在以太坊主网或知名的测试网络上部署,你可能还希望在Etherscan等区块链浏览器上验证你的合约源代码,以提高透明度和可信度。这通常涉及到上传编译后的合约代码和ABI到区块链浏览器网站。