Розгортання смарт-контракту у тестовій мережі ZkSync Era

Увага! Для розгортання смарт-контракту в мережі ZkSync Era вам потрібно буде вказувати свій приватний ключ від гаманця метамаск. Хоча він і не вказується в даному гайді на пряму, рекомендую вам не вказувати приватний ключ гаманця, а використовувати тестові гаманці, щоб уникнути втрати коштів.

Також можна вручну:

Назва мережі : zkSync Era Testnet
Нова URL-адреса RPC : https://zksync2-testnet.zksync.dev
Ідентифікатор ланцюга : 280
Символ валюти : URL-адреса ETH
Block Explorer : https://goerli.explorer.zksync.io/
URL-адреса веб-сокета : wss: //zksync2-testnet.zksync.dev/ws

  • Обмінюємо тестові токени з Goerli в мережу ZkSync Era: https://portal.zksync.io/bridge .

  • Завантажуємо та встановлюємо на ПК:
    а) Node.js - nodejs.com/en/ (я ставив версію, яка зліва, рекомендована для всіх. Після встановлення потрібно перезавантажити ПК!)
    б) Visual Studio Code - code.visualstudio.com/download

  • Створюємо папку на робочому столі HELLO-ZKSYNC

  • Відкриваємо Visual Studio та відкриваємо створену вами папку HELLO-ZKSYNC, натиснувши у лівому верхньому кутку File - Open folder

  • Натискаємо на значок праворуч зверху, як показано на скрині, у вас відкриється панель з консоллю (за замовчуванням буде обрано шлях до папки HELLO-ZKSYNC)
  • У консолі пишемо команди по одній (або копіюємо та вставляємо натискання правої клавіші миші), після кожної команди, натискаємо Enter

    npm init -y

    npm install --save-dev hardhat

    npm install -g npm@9.6.0

    npx hardhat

  • Виберіть Create a TypeScript project , потім Enter кілька разів та y (вибраний автоматично, просто Enter тисніть)

  • Зліва в меню шукаємо файл hardhat.config.tsта натискаємо на нього. Змінюємо значення 0.8.18 на 0.8.17. Закриваємо та зберігаємо натиснувши на хрестик.
  • Далі створює папку greeterв папці HELLO-ZKSYNC, натиснувши кнопку як на скріншоті
  • У консолі введіть cd greeterі тиснемо Enter, щоб перейти до цієї папки

Далі прописуємо дві команди також у консолі по одній (або копіюємо та вставляємо натискання правої клавіші миші):

npm init -y

npm add -D typescript ts-node @types/node ethers@^5.7.2 zksync-web3@^0.13.4 @ethersproject/hash @ethersproject/web hardhat @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy

  • Далі створіть у папці greeter (папка вибрана, коли галочка опущена вниз) файл, натиснувши кнопку як на скрині і назвіть йогоhardhat.config.ts
  • Натиснувши на нього, відкриється поле, куди ми вставляємо наступний текст (копіюйте і просто вставляйте повністю натисканням правої клавіші миші та Paste). Скрін нижче.

    import "@matterlabs/hardhat-zksync-deploy";
    import "@matterlabs/hardhat-zksync-solc";
    
    module.exports = {
      zksolc: {
        version: "1.3.1",
        compilerSource: "binary",
        settings: {},
      },
      defaultNetwork: "zkTestnet",
      networks: {
        zkTestnet: {
          url: "https://zksync2-testnet.zksync.dev", // URL of the zkSync network RPC
          ethNetwork: "goerli", // Can also be the RPC URL of the Ethereum network (e.g. `https://goerli.infura.io/v3/<API_KEY>`)
          zksync: true,
        },
      },
      solidity: {
        version: "0.8.17",
      },
    };
    

Закрийте файл, натиснувши на хрестик та збережіть зміни!

  • У лівому меню в папці greeterстворюємо папку contractsта папку deploy, натиснувши на кнопку, як на скріншоті
  • У папці contractsстворюємо файлGreeter.sol
і в нього вставляємо наступний код//SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;

contract Greeter {
    string private greeting;

    constructor(string memory _greeting) {
        greeting = _greeting;
    }

    function greet() public view returns (string memory) {
        return greeting;
    }

    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }
}

Закриваємо файл, натиснувши на хрестик і зберігаємо!

  • Далі в консолі вводимо наступну команду і тиснемо Enter
npx hardhat compile

Якщо зробили все правильно, побачите наступне повідомлення:

  • Вибираємо у лівому вікні створену нами папку deploy, у ній створюємо файлdeploy.ts

і вставляємо в нього наступний код:

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()

// An example of a deploy script that will deploy and call a simple contract.
export default async function (hre: HardhatRuntimeEnvironment) {
  console.log(`Running deploy script for the Greeter contract`);

  // Initialize the wallet.
  const wallet = new Wallet(PRIV_KEY);

  // Create deployer object and load the artifact of the contract we want to deploy.
  const deployer = new Deployer(hre, wallet);
  const artifact = await deployer.loadArtifact("Greeter");

  // Deposit some funds to L2 in order to be able to perform L2 transactions.
  // const depositAmount = ethers.utils.parseEther("0.001");
 // const depositHandle = await deployer.zkWallet.deposit({
  //  to: deployer.zkWallet.address,
 //   token: utils.ETH_ADDRESS,
 //   amount: depositAmount,
//  });
  // Wait until the deposit is processed on zkSync
 // await depositHandle.wait();

  // Deploy this contract. The returned object will be of a `Contract` type, similarly to ones in `ethers`.
  // `greeting` is an argument for contract constructor.
  const greeting = "Hi there!";
  const greeterContract = await deployer.deploy(artifact, [greeting]);
  console.log("constructor args:" + greeterContract.interface.encodeDeploy([greeting]));


  // Show the contract info.
  const contractAddress = greeterContract.address;
  console.log(`${artifact.contractName} was deployed to ${contractAddress}`);

  // Call the deployed contract.
  const greetingFromContract = await greeterContract.greet();
  if (greetingFromContract == greeting) {
    console.log(`Contract greets us with ${greeting}!`);
  } else {
    console.error(`Contract said something unexpected: ${greetingFromContract}`);
  }

  // Edit the greeting of the contract
  const newGreeting = "Hey guys";
  const setNewGreetingHandle = await greeterContract.setGreeting(newGreeting);
  await setNewGreetingHandle.wait();

  const newGreetingFromContract = await greeterContract.greet();
  if (newGreetingFromContract == newGreeting) {
    console.log(`Contract greets us with ${newGreeting}!`);
  } else {
    console.error(`Contract said something unexpected: ${newGreetingFromContract}`);
  }
}

Закриваємо файл та зберігаємо!

  • Створюємо файл у папці greeter, назвемо його.secret

Саме в цей файл і вставлямо свій приватний ключ . Приватний ключ взяти можна тут:

  • Закриваємо файл та зберігаємо!

  • І нарешті у нас остання команда для деплою контракту

npx hardhat deploy-zksync

Чекаємо на появу наступних рядків:

Після цього переходимо в експлорер , вводимо номер свого контракту і бачимо, що він створений. Також можете ввести в експлорері адресу свого метамаску та побачити три транзакції, т.к. після команди деплою відразу відбувається ще й взаємодія із контрактом.

**Вітаю, ви розгорнули смарт-контракт у тестовій мережі ZKSync Era!

Тепер давайте верефікуємо його **Але після цього він буде доступний для кожного, що підвищує ризик злому та крадіжки вашого приватного ключа. Як писав на початку, робіть усі операції лише на тестовому гаманці.

  • Перейдіть в експлорер , введіть адресу свого контракту

  • Далі натисніть на вкладку Contract

  • Натискаємо кнопку Verify Smart Contract
  • Заповнюємо всі поля, як зазначено на картинці:
  • У поле Enter the Solidy Contract Code вставляємо:

    //SPDX-License-Identifier: Unlicense
    pragma solidity ^0.8.0;
    
    contract Greeter {
        string private greeting;
    
        constructor(string memory _greeting) {
            greeting = _greeting;
        }
    
        function greet() public view returns (string memory) {
            return greeting;
        }
    
        function setGreeting(string memory _greeting) public {
            greeting = _greeting;
        }
    }
    

У поле Constructor Arguments вставляємо дані, що з'явилися після деплою контракту

Якщо у когось він не з'являвся, він однаковий для всіх, можете вводити

0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000094869207468657265210000000000000000000000000000000000000000000000

  • Після того, як заповнили всі поля, натискаєте кнопку Verify Smart Contract

Вітаю, Ви верифікували свій смарт контракт!

Всім профіту. З повагою команда Shark Trade.

Subscribe to Lerchuck
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
Author Address
0x74477f43f493908…29E6361f222eE37
Content Digest
0VGTeFLI3qIZtlH…K2gn5SsDLmFT5G4