原文作者:PaperMoon 团队
前言
在区块链应用中,ERC-20 代币是最常见的一类可互换型代币标准,广泛应用于:
• 加密货币发行
• 治理代币设计
• 质押与激励系统
• DeFi 协议资产建模
Polkadot Hub 通过 EVM 后端兼容以太坊智能合约,使开发者可以直接使用 Solidity 与以太坊工具部署 ERC-20 代币合约。
本文将演示如何使用 Remix IDE(基于浏览器的开发工具),在 Polkadot Hub TestNet 上部署一个标准 ERC-20 代币合约,并完成基础交互操作。
本教程所使用的 ERC-20 合约来源于 OpenZeppelin 官方仓库及其合约生成工具(Contracts Wizard)。
准备条件(Prerequisites)
开始前,请确保你具备以下条件:
1. Solidity 与 ERC-20 基础认知
需要理解:
• Solidity 合约基本结构
• ERC-20 代币的基本接口
• 可互换代币(Fungible Token)的概念
2. EVM 兼容钱包(MetaMask)
需要准备并配置好:
• MetaMask 钱包
• 已连接至 Polkadot Hub 测试网
用于后续部署与签名交易。
3. 测试币(Gas 费用)
需要从 Polkadot 官方 Faucet 领取测试代币,用于支付合约部署和调用所需的 Gas。
创建 ERC-20 合约(Create Your Contract)
1. 打开 Remix IDE
在浏览器中访问 Remix IDE,并等待默认工作区加载完成。
2. 创建合约文件
在左侧文件树中:
-
展开 contracts 文件夹
-
点击 Create new file(新建文件)

-
命名为:
MyToken.sol
3. 编写合约代码
将以下代码粘贴到 MyToken.sol 中:
// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.4.0
pragma solidity ^0.8.27;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is ERC20, Ownable, ERC20Permit {
constructor(address initialOwner)
ERC20("MyToken", "MTK")
Ownable(initialOwner)
ERC20Permit("MyToken")
{}
function mint(address to, uint256 amount) public onlyOwner {
_mint(to, amount);
}
}
4. 合约结构说明
该合约基于 OpenZeppelin 标准库实现,具备以下功能:
(1)继承 ERC20
ERC20("MyToken", "MTK")
定义:
• 代币名称:MyToken
• 代币符号:MTK
(2)权限控制(Ownable)
Ownable(initialOwner)
设置合约初始管理员地址,仅该地址可执行铸币操作。
(3)授权扩展(ERC20Permit)
ERC20Permit("MyToken")
(4)铸币函数 mint
function mint(address to, uint256 amount) public onlyOwner
仅管理员可调用,用于发行新代币。
5. 合约来源说明
该示例合约由 OpenZeppelin Contracts Wizard 自动生成,符合主流安全规范。
编译合约(Compile the Contract)
1. 编译作用说明
Solidity 合约在部署前必须经过编译,生成:
• 字节码(Bytecode)
• ABI 接口描述
供区块链执行和前端交互使用。
2. 编译步骤
确保 MyToken.sol 处于打开状态,然后:
-
点击左侧 Solidity Compiler 插件
-
点击 Compile MyToken.sol
3. 编译结果判断
编译成功后:
• 编译器图标显示绿色对勾
• 无报错信息出现在终端面板
若存在错误,会在底部 Terminal 中提示。
部署合约(Deploy the Contract)
- 打开部署面板
点击左侧:
Deploy & Run Transactions
- 连接 MetaMask
在 Environment 下拉框中选择:
Injected Provider - MetaMask
确保钱包已连接 Polkadot Hub TestNet。
- 配置构造函数参数
该合约构造函数需要一个参数:
constructor(address initialOwner)
表示代币合约管理员地址。
部署前,需要输入:
• 拥有 mint 权限的钱包地址
通常填写当前 MetaMask 地址。
- 发起部署
点击:
Deploy
随后:
-
MetaMask 弹出确认窗口
-
确认交易信息
-
点击批准(Approve)
-
部署成功提示
成功后,你将在终端看到:
• 合约地址
• 交易哈希
同时,合约会出现在:
Deployed Contracts
合约交互(Interact with the Contract)
部署完成后,可直接在 Remix 中操作合约。
- 展开合约面板
在:
Deployed / Unpinned Contracts
中找到 MyToken 合约并展开。
- 调用 mint 铸币
操作步骤:
-
展开 mint 方法
-
输入接收地址
-
输入数量(注意精度)
-
点击 transact
-
在 MetaMask 中确认交易
数量精度说明
ERC-20 默认精度为:18 位小数
因此:1 个完整代币 = 1 * 10^18
| 代币数量 | 输入值 |
|---|---|
| 1 MTK | 1000000000000000000 |
| 10 MTK | 10000000000000000000 |
- 查看余额 balanceOf
调用:
balanceOf(address)
传入刚才接收代币的地址,即可查询余额。
- 交易结果判断
交易成功后:
• Terminal 中显示绿色对勾
• 钱包余额发生变化
- 其他功能交互
你也可以尝试:
• transfer(转账)
• approve(授权)
• allowance(授权额度查询)
操作方式与 mint 类似。
完整流程回顾
本文完整部署流程如下:
1️⃣ 创建 MyToken.sol
2️⃣ 引入 OpenZeppelin 库
3️⃣ 编译 ERC-20 合约
4️⃣ 连接 MetaMask
5️⃣ 配置管理员地址
6️⃣ 部署到测试网
7️⃣ 调用 mint 铸币
8️⃣ 查询余额验证
至此,一个完整 ERC-20 代币系统已成功运行。
原文链接:https://docs.polkadot.com/smart-contracts/cookbook/smart-contracts/deploy-erc20/erc20-remix/