Cover photo

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

В этой статье вы найдете 3 гайда по деплою контрактов на zkSync Era, Base и Scroll.

Приступим!


post image

zkSync Era

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

  • Качаем Visual Studio Code с оф. сайта https://code.visualstudio.com/

  • Выбираем Английский язык при установке и оставляем дефолтные галочки

  • После установки, создаем папку на робочем столе с названием zksync

post image
  • Запускаем VSCode и открываем там же эту папку

post image
  • Качаем Node.js с офф сайта и устанавливаем. При установке ничего не меняем. После перезагружаем ПК.

  • Заходим обратно в VScode, нажимаем CTRL + J, чтобы снизу открылся терминал.

  • Вставляем туда следующее:

npm init -y
  • Если после команды у вас так, то все отлично:

post image
  • Вставляем следующую команду и ждем конца загрузки:

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

post image
  • Вставляем код в 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 скрипт для деплоя ваших контрактов.

https://docs.openzeppelin.com/

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

    npx hardhat compile
    

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

post image
  • Жмем на общую папку 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
    

Ура, мы смогли задеплоить контракт и заминтить токены на наш адрес!

post image

UPD: BONUS

Еще контракты на zkSync можно деплоить через сервис Thirdweb, и если вам не нравится классический способ/не доверяете ему - юзаем этот.

  • Заходим на Thirdweb и ищем нужный нам контракт - Token

https://thirdweb.com/explore

  • Нажимаем Deploy now

post image
  • Заполняем данные нашего токена и обязательно выбираем zkSync Era Mainnet

  • Жмем Deploy Now и подписываем транзакцию.

post image
  • В результате имеем легкий способ для деплоя контракта

post image

post image

Base

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

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

  • Заходим на Chainlist, ищем Base Goerli Testnet и подключаем к нему кошелек. Обязательно переключаем сеть внутри самого кошелька!

post image
  • Заходим на Contracts Wizard от OpenZeppelin

  • Выбираем ERC20 токен и заполняем первый пункт на свой вкус. Ставим галочки на Mintable и Burnable

post image
  • Нажимаем открыть в Remix

  • Ставим галочку на Auto compile

post image
  • Выбираем Injected Provider - Metamask и подключем кошелек к сайту

post image
  • Нажимаем Deploy, подтверждаем транзакцию в Metamask

post image

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

post image

post image

Scroll

Цена деплоя: FREE (Goerli ETH) Мост: scroll.io/bridge** Сложность:** Легко

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

  • Заходим на Chainlist, ищем Scroll Alpha Testnet и подключаем к нему кошелек. Обязательно переключаем сеть внутри самого кошелька!

post image
  • Заходим на Contracts Wizard от OpenZeppelin

  • Выбираем ERC20 токен и заполняем первый пункт на свой вкус. Ставим галочки на Mintable и Burnable

post image
  • Нажимаем открыть в Remix

  • Ставим галочку на Auto compile

post image
  • Выбираем Injected Provider - Metamask и подключем кошелек к сайту

post image
  • Нажимаем Deploy, подтверждаем транзакцию в Metamask

post image

Вот мы и задеплоили наш финальный контракт!

Следующая статья будет о том, как правильно верифицировать и взаимодействовать с нашими свежими контрактами. Ведь мы дофига “билдеры”, и тем самым подходим под нужные критерии несколькими транзакциями: мы задеплоили контракт и будем с ним взаимодействовать, прогнали транзакцию в нужной нам сети, а в будущем даже будем гонять объем через свои контракты, затрагивая пункт Transaction value.

https://t.me/roccrypto

Subscribe