July 22, 2023

Пошагово деплоим контракты: zkSync Era и Base


zkSync Era

Цена деплоя: ~5$ в ETH
Сложность деплоя: 1 способ - сложно. 2 способ - Thirdweb, легко

  • Качаем Visual Studio Code с оф. сайта https://code.visualstudio.com/
  • Выбираем Английский язык при установке и оставляем дефолтные галочки
  • После установки, создаем папку на робочем столе с названием zksync
  • Запускаем VSCode и открываем там же эту папку
  • Качаем 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
  • Вставляем код в hardhat.config.ts и после жмем CTRL+S:
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);
    }
}
  • Сохраняем файл на CTRL+S

Тут мы создаем самый обычный ERC20 токен с тикером rocc . Любые другие контракты мы можем брать с документации OpenZeppelin. Но чтобы их деплоить, нужно немного понимать JS/TS. Если вы захотите деплоить другие контракты, которых нет в гайде, но не знаете эти ЯП - воспользуйтесь ChatGPT, чтобы он вам написал deploy.ts скрипт для деплоя ваших контрактов.

  • Компилируем контракт командой в терминале:npx hardhat compile

Если все успешно, у вас должен быть такой результат:

  • Жмем на общую папку 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, и если вам не нравится классический способ/не доверяете ему - юзаем этот.

  • Заходим на Thirdweb и ищем нужный нам контракт - Token
  • Нажимаем Deploy now
  • Заполняем данные нашего токена и обязательно выбираем zkSync Era Mainnet
  • Жмем Deploy Now и подписываем транзакцию.
  • В результате имеем легкий способ для деплоя контракта

Base

Цена деплоя: FREE (Goerlii ETH)
Мост: bridge.base.org/deposit**
Сложность деплоя:** Легко

Для начала пользуемся мостом и получаем нативные ETH на кошелек.

  • Заходим на Chainlist, ищем Base Goerli Testnet и подключаем к нему кошелек. Обязательно переключаем сеть внутри самого кошелька!
  • Заходим на Contracts Wizard от OpenZeppelin
  • Выбираем ERC20 токен и заполняем первый пункт на свой вкус. Ставим галочки на Mintable и Burnable
  • Нажимаем открыть в Remix
  • Ставим галочку на Auto compile
  • Выбираем Injected Provider - Metamask и подключем кошелек к сайту
  • Нажимаем Deploy, подтверждаем транзакцию в Metamask

Теперь мы успешно задеплоили контракт на Base! Но чтобы каждый раз не повторяться, советую поэкспериментировать и деплоить разные контракты.

Всем спасибо, обязательно подписывайтесь на Telegram и залетайте в наш ЧАТ