Пошагово деплоим контракты: 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 и залетайте в наш ЧАТ