通过hardhat创建ERC20 token代币并添加到metamask钱包
1、先注册Metamask小狐狸钱包
2、在vscode中下载hardhat
前提要有yarn,没有的话自行下载
1.yarn add --dev hardhat //下载hardhat
2.yarn hardhat //新建hardhat项目
3.选择Create javascript
3、导入openzeppelin
yarn add @openzeppelin/contracts
OpenZeppelin 是一个提供安全智能合约库的开源框架,里面有非常多的经过安全审计的代码。
4、在contracts下新建kokoToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
//导入openzeppelin中的ERC20合约
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract kokoToken is ERC20 {
// 构造函数中设置代币的名称和符号
constructor(string memory name, string memory symbol) ERC20(name, symbol) {
// 初始铸造一定数量的代币到部署合约的地址
// 这里示例铸造1000000个代币(根据ERC20的decimals,默认是18)
_mint(msg.sender, 100 * (10 ** uint256(decimals())));
}
}
5、新建deploy文件,并新建00-deploy.js文件
st { ethers, network, deployments, getNamedAccounts } = require("hardhat");
const { deploy, log } = deployments;
//部署kokoToken合约
async function main() {
log(`start deploy contract `);
//获取当前环境的chainId
const chainId = network.config.chainId;
log(`network name是:${chainId}`);
const { deployer } = await getNamedAccounts();
// log(`deployer name是:${deployer}`);
await deploy("kokoToken", {
from: deployer,
args: ["koko", "KO"],
log: true,
// waitConfirmations: 1,
});
// 如果在开发链上,加速时间以便进行投票
if (network.name == "hardhat") {
await moveBlocks(3);
}
const kokoToken = await ethers.getContractAt(
"kokoToken",
"0x5FbDB2315678afecb367f032d93F642f64180aa3"
);
//返回代币总量
const totalSupply = await kokoToken.totalSupply();
log(`totalSupply value is: ${totalSupply}`);
//返回用户0的余额
const balance = await kokoToken.balanceOf(deployer);
log(`balance value is: ${balance}`);
log(`00 end deploy contract ===================`);
}
/**
* 将区块链状态前进指定数量的区块
* @param {number} amount - 要前进的区块数量
*/
async function moveBlocks(amount) {
for (let i = 0; i < amount; i++) {
await network.provider.request({
method: "evm_mine",
params: [],
});
}
console.log(`Moved ${amount} blocks`);
}
// 执行主函数
module.exports = main;
6、启动hardhat节点
终端输入:yarn hardhat node
7、在metamask中配置hardhat网络
填入下图的内容,点击save
8、导入hardhat本地网络的账户
9、将hardhat node节点的账户密钥复制进去
10、再将部署的kokotoken合约地址import进去