Пошагово деплоим контракты: zkSync Era и Base
zkSync Era
Цена деплоя: ~5$ в ETH
Сложность деплоя: 1 способ - сложно. 2 способ - Thirdweb, легко
- Качаем Visual Studio Code с оф. сайта https://code.visualstudio.com/
- Выбираем Английский язык при установке и оставляем дефолтные галочки
- После установки, создаем папку на робочем столе с названием
zksync
- Качаем Node.js с офф сайта и устанавливаем. При установке ничего не меняем. После перезагружаем ПК.
- Заходим обратно в VScode, нажимаем CTRL + J, чтобы снизу открылся терминал.
- Вставляем туда следующее:
npm init -y
npm add -D typescript ts-node @types/node ethers@^5.7.2 zksync-web3@^0.14.3 @ethersproject/hash @ethersproject/web hardhat @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy
- Пишем команду, которая установит библиотеку с контрактами OpenZeppelin:
npm install @openzeppelin/contracts
- Жмем плюсик и создаем новый файл с названием
hardhat.config.ts
import "@matterlabs/hardhat-zksync-deploy"; import "@matterlabs/hardhat-zksync-solc"; module.exports = { zksolc: { version: "1.3.5", compilerSource: "binary", settings: {}, }, defaultNetwork: "zkSyncMainnet", networks: { zkSyncMainnet: { url: "https://zksync2-mainnet.zksync.io", ethNetwork: "mainnet", zksync: true, }, }, solidity: { version: "0.8.17", }, };
- Нажимаем на другой плюсик и создаем папку с названием
contracts
Нажимаем на папку и создаем файлcontract.sol
. Любые параметры (те что в “ “) ставим под себя - полное название, тикер токена. Вставляем код контракта:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract Roccrypto is ERC20, Ownable { constructor() ERC20("roccrypto", "rocc") { _mint(msg.sender, 100 * 10 ** decimals()); } function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); } }
Тут мы создаем самый обычный ERC20 токен с тикером rocc
. Любые другие контракты мы можем брать с документации OpenZeppelin. Но чтобы их деплоить, нужно немного понимать JS/TS. Если вы захотите деплоить другие контракты, которых нет в гайде, но не знаете эти ЯП - воспользуйтесь ChatGPT, чтобы он вам написал deploy.ts
скрипт для деплоя ваших контрактов.
Если все успешно, у вас должен быть такой результат:
- Жмем на общую папку
zksync
и в ней создаем папку с названиемdeploy
. В этой папке создаем файлdeploy.ts
, вставляем код и меняем в нем адрес0x123...
, на который будут минтиться токены. Сохраняем на CTRL+S:
import fs from "fs"; import { utils, Wallet } from "zksync-web3"; import * as ethers from "ethers"; import { HardhatRuntimeEnvironment } from "hardhat/types"; import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; const PRIV_KEY = fs.readFileSync(".secret").toString(); export default async function (hre: HardhatRuntimeEnvironment) { console.log(`Running deploy script for the Roccrypto contract`); const wallet = new Wallet(PRIV_KEY); const deployer = new Deployer(hre, wallet); const artifact = await deployer.loadArtifact("Roccrypto"); const roccryptoContract = await deployer.deploy(artifact, []); console.log("constructor args:" + roccryptoContract.interface.encodeDeploy([])); const contractAddress = roccryptoContract.address; console.log(`${artifact.contractName} was deployed to ${contractAddress}`); // Mint some tokens to an address. const to = "0x123..."; // Адрес куда минтить токены. const amount = ethers.utils.parseEther("10"); // Сколько токенов нужно заминтить на этот адрес const mintHandle = await roccryptoContract.mint(to, amount); await mintHandle.wait(); console.log(`Minted ${amount} tokens to ${to}`); }
- Создаем файл
.secret
в общей папкеzksync
. В этот файл мы должны вставить приватный ключ (с балансом, ~5$ в ETH сети zkSync Era), с которого будет деплоится наш контракт. Не держите много баланса, если не уверены в своих следующих действиях. Советую сначала протестировать, а потом деплоить на мультиакках. - Деплоим контракт с помощью команды:
npx hardhat deploy-zksync
Ура, мы смогли задеплоить контракт и заминтить токены на наш адрес!
2 вариант - он же более легкий способ деплоя через ThirdWeb
Еще контракты на zkSync можно деплоить через сервис Thirdweb, и если вам не нравится классический способ/не доверяете ему - юзаем этот.
- Заполняем данные нашего токена и обязательно выбираем
zkSync Era Mainnet
- Жмем Deploy Now и подписываем транзакцию.
Base
Цена деплоя: FREE (Goerlii ETH)
Мост: bridge.base.org/deposit**
Сложность деплоя:** Легко
Для начала пользуемся мостом и получаем нативные ETH на кошелек.
- Заходим на Chainlist, ищем
Base Goerli Testnet
и подключаем к нему кошелек. Обязательно переключаем сеть внутри самого кошелька!
- Заходим на Contracts Wizard от OpenZeppelin
- Выбираем
ERC20
токен и заполняем первый пункт на свой вкус. Ставим галочки наMintable
иBurnable
Теперь мы успешно задеплоили контракт на Base! Но чтобы каждый раз не повторяться, советую поэкспериментировать и деплоить разные контракты.
Всем спасибо, обязательно подписывайтесь на Telegram и залетайте в наш ЧАТ