本教程是面向区块链开发者的IMToken代币开发全流程指南,聚焦从0到1部署ERC20代币并适配Imtoken钱包的核心需求,教程将覆盖环境搭建、ERC20合约编写、测试链部署、合约链上验证、钱包适配对接等关键环节,帮助开发者快速掌握代币开发与imToken生态适配的实操技能,降低入门门槛,实现代币从部署到钱包交互的完整落地。
(针对以太坊生态,以ERC20同质化代币、ERC721 NFT为例,附避坑指南)
前置准备:开发环境与必备工具
开发适配imToken的代币,需先搭建安全的测试环境,避免主网资产风险:
-
imToken钱包(测试网版)
下载最新版imToken(iOS/Android),切换至Sepolia测试网(以太坊官方推荐的长期测试网,旧的Goerli测试网已弃用)。
✅ 领取测试币:打开imToken Sepolia测试网的「资产」页,点击「获取测试币」,通过官方水龙头(或第三方工具如sepolia-faucet.pk910.de)领取,用于部署合约的Gas费。 -
开发工具链
- Node.js ≥16:检查版本命令
node -v,若版本过低可通过nvm install 18升级(nvm是Node版本管理工具,适合多版本切换)。 - Hardhat框架:以太坊官方推荐的新手友好型开发工具,内置编译、部署、调试功能,无需手动配置复杂环境。
- Node.js ≥16:检查版本命令
-
合约依赖库
选择OpenZeppelin的ERC20/ERC721标准库,该库经过行业多次审计,能大幅降低合约漏洞风险(如重入攻击、整数溢出等),无需从零编写标准代币逻辑。
编写安全合规的ERC20智能合约
ERC20是imToken原生支持的最主流代币标准,以下是基于OpenZeppelin的安全合约示例:
示例合约代码(MyFirstToken.sol)
// SPDX-License-Identifier: MIT // 开源协议(MIT是最宽松的,允许商业使用)
pragma solidity ^0.8.20; // Solidity版本(0.8.x修复了旧版本的溢出/下溢问题,推荐使用)
// 导入OpenZeppelin的ERC20标准库
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
// 继承ERC20合约,自定义代币名称、符号
contract MyFirstToken is ERC20 {
// 构造函数:部署合约时初始化代币信息
constructor() ERC20("我的第一个代币", "MFT") {
// 铸造100万枚代币(精度18,对应以太坊最小单位wei,1 MFT = 1e18 wei),全部分配给部署者
_mint(msg.sender, 1000000 * 10 ** decimals());
}
}
✅ 代码说明:
decimals():ERC20默认精度18,与以太坊单位一致,无需修改。_mint():铸造代币的核心方法,测试网部署时仅用于测试,主网需控制铸造权限(如添加管理员限制)。
配置Hardhat开发环境
-
初始化Hardhat项目
打开命令行执行以下命令,创建项目文件夹并安装依赖:mkdir my-imtoken-token && cd my-imtoken-token npm init -y # 初始化package.json npm install hardhat @openzeppelin/contracts --save-dev # 安装Hardhat和OpenZeppelin库 npx hardhat init # 选择「Create a JavaScript project」(新手推荐,TypeScript更复杂)
-
配置Sepolia测试网
修改项目根目录的hardhat.config.js,添加测试网RPC和私钥(仅用测试网私钥,绝对不能泄露主网私钥!):require("@nomicfoundation/hardhat-toolbox"); module.exports = { solidity: "0.8.20", // 与合约版本一致 networks: { sepolia: { url: "https://sepolia.infura.io/v3/你的Infura项目ID", // 去Infura官网免费注册获取,也可换Alchemy/QuickNode的免费RPC accounts: ["你的imToken测试网私钥"], // 导出私钥路径:imToken→设置→安全中心→导出私钥(仅测试用) }, }, };
部署合约到Sepolia测试网
-
编写部署脚本
在项目scripts文件夹下创建deploy.js如下:async function main() { // 获取合约工厂(编译后的合约) const MyToken = await ethers.getContractFactory("MyFirstToken"); // 部署合约 const myToken = await MyToken.deploy(); // 等待部署完成 await myToken.waitForDeployment(); // 输出合约地址(务必保存!) console.log("✅ 代币部署成功,合约地址:", await myToken.getAddress()); } main().catch((error) => { console.error("部署失败:", error); process.exitCode = 1; }); -
执行部署命令
命令行输入:npx hardhat run scripts/deploy.js --network sepolia
✅ 常见失败排查:测试币不足、RPC节点不通、私钥错误、Gas费设置过低(可在配置中添加
gasPrice参数调整)。
在imToken中添加自定义代币
imToken不会默认显示自定义代币,需手动添加:
- 打开imToken,确认已切换到Sepolia测试网(顶部链选择栏,避免选成主网/其他测试网);
- 进入「资产」页,点击右上角「+」号→「添加自定义代币」;
- 链选择「Sepolia」,粘贴部署得到的合约地址;
- 系统会自动识别代币符号(MFT)、精度(18),点击「添加」即可在资产页查看。
关键避坑与注意事项
-
安全优先
- 测试网完成后,主网部署前必须做合约审计:可先用Slither(Solidity静态分析工具)做基础漏洞检测,主网建议找专业审计公司(如OpenZeppelin、CertiK)。
- 私钥绝对保密:主网私钥需离线存储(如硬件钱包、纸钱包),测试网私钥也不要随意泄露。
-
标准合规
imToken支持主流代币标准:ERC20(同质化代币)、ERC721(NFT)、ERC1155(多类型代币)、ERC4626(代币化金库,适合收益类代币),按需选择。 -
主网适配
若要在imToken主网显示代币,需先在Sepolia Etherscan上验证合约:npx hardhat verify --network sepolia 你的合约地址
验证通过后,可提交代币信息到imToken官方列表(通过imToken GitHub仓库提交)。
扩展开发:NFT代币(ERC721)适配
若要开发NFT,只需将合约改为继承ERC721标准,示例如下:
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyFirstNFT is ERC721 {
constructor() ERC721("我的第一个NFT", "MNFT") {}
// 铸造NFT,需关联公开可访问的元数据(如IPFS存储)
function mintNFT(address to, uint256 tokenId) public {
_safeMint(to, tokenId);
}
// 重写tokenURI,返回IPFS上的元数据地址
function tokenURI(uint256 tokenId) public view override returns (string memory) {
return "ipfs://你的NFT元数据CID"; // 元数据需包含图片、名称等信息
}
}
✅ 注意:NFT元数据必须公开可访问,推荐用Pinata上传到IPFS,否则imToken无法显示NFT内容,部署后,在imToken「NFT」页手动添加合约地址即可查看。
按照以上步骤,你就能快速开发并部署适配imToken的代币,全程在测试网操作,安全无风险。
相关阅读: