作为 web3 开发的初学者,开发和部署自己的代币是开始构建链上软件、提升 Solidity 技能并了解 web3 开发生命周期最受欢迎的方式之一。
在以太坊中,存在多种代币标准,这些标准是代币必须遵循的预定义规则集,旨在确保与以太坊网络及其他 dapp 的兼容性、合规性和互操作性。
这些标准包括:用于同质化代币的 ERC-20、用于非同质化代币(NFT)的 ERC-721、用于多代币类型的 ERC-1155、用于高级代币功能的 ERC-777、用于证券型代币的 ERC-1400,以及用于代币化金库的 ERC-4626。
在本文中,我们将借助 OpenZeppelin 开发一个 ERC-20 代币。OpenZeppelin 是一个提供安全且经过测试的标准智能合约模板实现的库。我们将逐步介绍如何搭建开发环境、编写代币合约,并将其部署到 Linea 二层网络上。
第一步:使用 Hardhat 搭建开发环境
在开始开发以太坊代币之前,你需要先搭建开发环境。本文将使用 Hardhat。请按照以下步骤操作:
安装 Node.js 和 npm:Node.js 是一个 JavaScript 运行时环境,npm 是其包管理器。请从 Node.js 官方网站 下载并安装。
创建新的 Hardhat 项目:打开终端,为你的项目创建一个新目录并进入该目录。然后运行:
mkdir my-token
cd my-token
npm init -y
npm install --save-dev hardhat
npx hardhat
安装必要的 Hardhat 插件和 OpenZeppelin 合约:
npm install @nomiclabs/hardhat-ethers ethers @openzeppelin/contracts
第二步:创建你的以太坊代币
按照以下步骤创建一个简单的 ERC-20 代币:
创建代币合约:在你的 Hardhat 项目中,进入 contracts 目录并创建一个名为 MyToken.sol 的新文件。打开该文件并定义你的代币合约:
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
_mint(msg.sender, initialSupply);
}
}
该智能合约使用 OpenZeppelin 的库创建了一个名为"MyToken"、符号为"MTK"的 ERC-20 代币。部署后,它将铸造由部署者指定的初始代币供应量,并将其分配到部署者的地址。
编写部署脚本:在 scripts 目录中,创建一个名为 deploy.js 的新文件,并添加以下代码以部署你的合约:
async function main() {
const [deployer] = await ethers.getSigners();
console.log("Deploying contracts with the account:", deployer.address);
const MyToken = await ethers.getContractFactory("MyToken");
const myToken = await MyToken.deploy(1000000);
console.log("MyToken deployed to:", myToken.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
上述脚本使用 Hardhat 和 ethers.js 部署"MyToken"智能合约,并以 1,000,000 个代币的供应量进行初始化。它会获取部署者的地址并完成合约部署。
在本地编译并部署合约:在终端中,将合约编译并部署到 Hardhat 提供的本地区块链:
npx hardhat compile
npx hardhat run scripts/deploy.js --network localhost
第三步:将代币合约部署到 Linea 测试网
现在我们已经在本地开发并部署了 ERC-20 代币,接下来是使用 Infura 和 MetaMask 将其部署到 Linea 测试网的时候了。按照以下步骤让你的代币在 Linea 测试网上线。
注册 Infura 账户:Infura 提供对各种区块链网络及其测试网的便捷访问。创建一个新项目,从支持的网络菜单中选择 Linea Sepolia 测试网,并复制项目 ID。
配置 MetaMask:打开你的 MetaMask 钱包,进入网络设置部分。在下拉菜单中,确保已开启"显示测试网络"选项,然后选择 Linea Sepolia 测试网。
获取 Linea Sepolia ETH:部署合约时,你需要 Linea Sepolia ETH 来支付 gas 费用。你可以访问 Linea Sepolia 官方水龙头 获取一些 Linea ETH。
更新 Hardhat 配置:在你的 Hardhat 项目中,更新 hardhat.config.js 以包含 Linea 测试网配置:
require("@nomiclabs/hardhat-ethers");
require("dotenv").config();
module.exports = {
solidity: "0.8.0",
networks: {
lineaTestnet: {
url: `https://linea-sepolia.infura.io/v3/${process.env.INFURA_PROJECT_ID}`,
accounts: [`0x${process.env.PRIVATE_KEY}`],
chainId: 59141
}
}
};
确保你的 .env 文件包含必要的环境变量:
INFURA_PROJECT_ID=your_infura_project_id
PRIVATE_KEY=your_private_key
将合约部署到 Linea Sepolia 测试网
现在,运行以下命令将你的代币合约部署到 Linea 测试网:
npx hardhat compile
npx hardhat run scripts/deploy.js --network lineaTestnet
该脚本将使用连接到 MetaMask 的账户,把你的 ERC-20 代币合约部署到 Linea 测试网。
借助 MetaMask Developer 进阶你的 web3 dapp 开发
通过掌握以太坊代币开发的基础知识、搭建开发环境并遵循最佳实践,你可以成功开发并部署自己的以太坊代币。无论是创建新的加密货币还是将资产代币化,以太坊都提供了将你的想法付诸实现所需的工具和生态系统。
访问 MetaMask 开发者门户,探索更多高级开发需求,例如以太坊登录(SIWE)、对 EIP-6963 的支持,以及通过 Snaps 与 MetaMask 的无缝集成。该门户提供全面的工具套件、API 和 SDK,旨在简化用户引导流程,帮助开发者构建独特的、无需许可的钱包连接,以及专为 MetaMask 用户量身打造的 dapp 内体验。