基于 Hardhat + OpenZeppelin 的自定义 ERC20 代币项目,支持 Mint、Burn、Owner 管理和批量增发功能,已支持 Sepolia 测试网部署和 Etherscan 验证。
- 标准 ERC20 代币
- 支持销毁代币(Burnable)
- 支持 Owner 增发代币(Mintable)
- 支持批量 Mint
- 部署完成后可自动 Etherscan 验证源码
- 可通过测试脚本进行转账、授权、transferFrom 等操作
.
├── contracts/
│ └── MyToken.sol # ERC20 合约
├── scripts/
│ └── deploy.js # 部署脚本,自动验证
├── test/
│ └── test-token.js # 测试合约交互脚本
├── hardhat.config.js # Hardhat 配置文件
└── package.json
- 安装 Node.js(>=18 推荐)
- 安装依赖:
npm install- 配置环境变量(使用 enc-env 管理):
PRIVATE_KEY:部署钱包私钥ALCHEMY_KEY:Alchemy API KeyETHERSCAN_API_KEY:Etherscan API Key
contracts/MyToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is Ownable, ERC20, ERC20Burnable {
constructor(uint256 initialSupply) ERC20("MyToken", "MTK") Ownable(msg.sender) {
_mint(msg.sender, initialSupply * 10 ** decimals());
}
function mint(address to, uint256 amount) public onlyOwner {
_mint(to, amount);
}
}功能:
mint(address to, uint256 amount):仅 Owner 可调用,增发代币- 内置
burn方法,可销毁持有代币
hardhat.config.js
require("@nomicfoundation/hardhat-toolbox");
require("@chainlink/env-enc").config();
require("@nomicfoundation/hardhat-verify");
const privateKey = process.env.PRIVATE_KEY;
const alchemyKey = process.env.ALCHEMY_KEY;
const etherscanKey = process.env.ETHERSCAN_API_KEY;
module.exports = {
solidity: "0.8.28",
networks: {
sepolia: {
url: `https://eth-sepolia.g.alchemy.com/v2/${alchemyKey}`,
accounts: [privateKey],
},
},
etherscan: {
apiKey: etherscanKey
}
};运行部署脚本:
npx hardhat run scripts/deploy.js --network sepolia部署脚本功能:
- 部署 MyToken 合约
- 自动调用 Etherscan 验证源码(verify:verify)
- 控制台输出合约地址
运行测试脚本:
node test/test-token.js测试内容:
- 查询余额
- 转账 100 个代币给其他账户
- 授权和 transferFrom(Addr2 从 Owner 转账)
- 批量增发 10 个代币给 Addr1 和 Addr2
- 查询最终余额
(在此粘贴一张 Etherscan 验证成功截图,展示 Verified 标志和合约源码)
npm install主要依赖:
@openzeppelin/contracts@nomicfoundation/hardhat-toolbox@nomicfoundation/hardhat-verify@chainlink/env-enc
