Являясь новичком в разработке web3, создание и развёртывание собственного токена — один из самых популярных способов начать разработку on-chain программного обеспечения, улучшить навыки работы с Solidity и понять жизненный цикл разработки в web3.
В Ethereum существуют различные стандарты токенов — заранее определённые наборы правил, которым должны следовать токены для обеспечения совместимости, соответствия требованиям и интероперабельности с сетью Ethereum и другими dapp.
Эти стандарты включают ERC-20 для взаимозаменяемых токенов, ERC-721 для невзаимозаменяемых токенов (NFT), ERC-1155 для мультитокенов, ERC-777 для расширенных функций токенов, ERC-1400 для токенов ценных бумаг и ERC-4626 для токенизированных хранилищ.
В этом блоге мы разработаем токен ERC-20, используя OpenZeppelin — библиотеку, предоставляющую безопасные и проверенные реализации стандартных шаблонов смарт-контрактов. Мы пройдём через настройку среды разработки, написание контракта токена и его развёртывание в сети второго уровня Linea.
Шаг 1: Настройте среду разработки с помощью Hardhat
Прежде чем приступить к разработке токена Ethereum, необходимо настроить среду разработки. В этом блоге мы будем использовать 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
Шаг 2: Создайте свой токен Ethereum
Следуйте этим шагам для создания простого токена 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);
}
}
Этот смарт-контракт создаёт токен ERC-20 с именем «MyToken» и символом «MTK», используя библиотеку OpenZeppelin. При развёртывании он выпускает начальное количество токенов, указанное разработчиком, и присваивает их адресу разработчика.
Напишите скрипт развёртывания: В директории 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);
});
Приведённый выше скрипт развёртывает смарт-контракт «MyToken» с помощью Hardhat и ethers.js, инициализируя его с объёмом в 1 000 000 токенов. Он получает адрес разработчика и развёртывает контракт.
Скомпилируйте и разверните контракт локально: В терминале скомпилируйте и разверните контракт в локальном блокчейне, предоставляемом Hardhat:
npx hardhat compile
npx hardhat run scripts/deploy.js --network localhost
Шаг 3: Разверните контракт токена в тестовой сети Linea
Теперь, когда мы разработали и развернули наш токен ERC-20 локально, пришло время развернуть его в тестовой сети Linea с использованием Infura и MetaMask. Следуйте этим шагам, чтобы запустить ваш токен в тестовой сети Linea.
Настройте аккаунт Infura: Infura обеспечивает удобный доступ к различным блокчейн-сетям и их тестовым сетям. Создайте новый проект, выберите тестовую сеть Linea Sepolia из меню поддерживаемых сетей и скопируйте ID проекта.
Настройте MetaMask: Откройте кошелёк MetaMask и перейдите в раздел сетей. В выпадающем меню убедитесь, что опция «показывать тестовые сети» включена. Затем выберите тестовую сеть Linea Sepolia.
Получите Linea Sepolia ETH: При развёртывании контракта вам потребуется Linea Sepolia ETH для оплаты комиссий за газ. Вы можете получить Linea ETH, посетив официальный кран Linea Sepolia.
Обновите конфигурацию 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
Этот скрипт развернёт ваш контракт токена ERC-20 в тестовой сети Linea, используя аккаунт, подключённый к MetaMask.
Развивайте разработку web3 dapp с MetaMask Developer
Освоив основы разработки токенов Ethereum, настроив среду разработки и следуя лучшим практикам, вы сможете успешно разработать и развернуть собственный токен Ethereum. Независимо от того, создаёте ли вы новую криптовалюту или токенизируете актив, Ethereum предоставляет инструменты и экосистему для воплощения ваших идей в жизнь.
Посетите портал MetaMask Developer для решения более сложных задач разработки, таких как Sign-in-with-Ethereum (SIWE), поддержка EIP-6963 и бесшовная интеграция с MetaMask через Snaps. Он предлагает комплексный набор инструментов, API и SDK, разработанных для упрощения онбординга пользователей и предоставления разработчикам возможности создавать уникальные, безразрешительные подключения кошельков и внутренние dapp-сценарии, адаптированные для пользователей MetaMask.