昨天我分享了 ERC-20 代币代码代码实现的理论部分,今天将分享实操,具体包括:
- 所有的内容都是我亲自实操并测试通过,只要您按我的步骤来操作,一定会有成功体验。如果您遇到任何问题,欢迎在留言,我会尽力帮您解答,一起学习和进步。
步骤 1: 使用 OpenZeppelin 快速生成 ERC-20 (15分钟)
什么是 OpenZeppelin?
OpenZeppelin 是最流行的智能合约安全库,提供了经过审计的标准合约实现。
访问 OpenZeppelin Wizard
- • 访问:https://wizard.openzeppelin.com/
- • Name:
HorseToken (今年马年,搞一个马币,哈哈。) - • Premint:
1000000 (为deployer创建的初始额度)
生成的代码
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.6.0
pragma solidity ^0.8.27;
import {Ownable} from "@openzeppelin/contracts@5.6.0/access/Ownable.sol";
import {ERC20} from "@openzeppelin/contracts@5.6.0/token/ERC20/ERC20.sol";
import {ERC20Burnable} from "@openzeppelin/contracts@5.6.0/token/ERC20/extensions/ERC20Burnable.sol";
import {ERC20Pausable} from "@openzeppelin/contracts@5.6.0/token/ERC20/extensions/ERC20Pausable.sol";
contract Horse is ERC20, ERC20Burnable, ERC20Pausable, Ownable {
constructor(address recipient, address initialOwner)
ERC20("Horse", "HTK")
Ownable(initialOwner)
{
_mint(recipient, 1000000 * 10 ** decimals());
}
function pause() public onlyOwner {
_pause();
}
function unpause() public onlyOwner {
_unpause();
}
function mint(address to, uint256 amount) public onlyOwner {
_mint(to, amount);
}
// The following functions are overrides required by Solidity.
function _update(address from, address to, uint256 value)
internal
override(ERC20, ERC20Pausable)
{
super._update(from, to, value);
}
}
理解代码结构:
- • 初始化代币名称 "Horse" 和代码 "HTK"
- • 向 recipient 地址一次性铸造 1,000,000 个代币(考虑 decimal,通常 18 位小数)
- • 注意
override 和 super 的使用
步骤 2: 测试代币功能 (15分钟)
编译合约
- 1. 点击左侧 "Solidity Compiler" 图标
- 2. 点击 "Compile contract......"
部署合约
- 1. 切换到 "Deploy & Run Transactions"
- 2. Environment 选择 "Remix VM (Cancun)"
快速验证
- • 调用
name() 和 symbol() 验证基本信息 - • 调用
balanceOf(你的地址) 查看初始余额
测试代币功能
1. 查询基本信息
# 点击 name()
# 预期输出: "Horse"
# 点击 symbol()
# 预期输出: "HTK"
# 点击 decimals()
# 预期输出: 18
# 点击 totalSupply()
# 预期输出: 1000000000000000000000000 (100万 * 10^18)
2. 查询余额
# 点击 balanceOf(你的地址)
# 预期输出: 1000000000000000000000000
3. 铸造测试
# 切换回 owner 账户
# 点击 mint(ower地址, 1024),注意,代码里面设定了只能给owner铸币
# 铸造 1024 个代币给另一个地址
# 查看总供应量增加
5. 暂停测试
# 点击 pause()
# 暂停所有转账
# 尝试转账
# 预期: 交易失败,显示 "Pausable: paused"
# 点击 unpause()
# 恢复转账
6. 销毁测试
# 点击 burn(91)
# 销毁 91 个代币
# 查看余额减少
# 查看总供应量减少
今天就分享到这儿,后续我将继续分享如何把合约部署到测试网。
📌 关于“令狐冲AI”
聚焦AI与SaaS出海,分享AI时代如何打造超级个体,探索更聪明的工作与生活方式。
喜欢这篇文章? 请点赞👍、在看👀、转发📤给更多朋友!