Деплоим смарт-контракт в тестовой сети Zksync Era

Понадобится сервер для активации смарт-контракта

Всё близится к запуску майннета Zksync Era. Поэтому сделать активность будет нелишним, так как информации о снепшоте ещё не было. Будем делать в тестовой сети Zksync Era Goerli.

Поехали…

Сразу можно подготовить кошелёк. Поиметь токены и вытащить приватный ключ из МетаМаска.

Переходим на сайт и получаем в наш МетаМаск эту тестовую сеть.

Запрашиваем в сети Goerli какое-то количество ETH и переводим через** мост** их в тестовую сеть Zksync Era Goerli.

Далее сразу же находим наш приватный ключ из ММ и сохраняем на время, пока он не понадобится.

Теперь переходим уже к созданию смарт-контракта на вашем сервере. Понадобится сервер с минимальными требованиями.

Обновляем систему:

sudo apt update
sudo apt upgrade

При установке нажимаем y

Устанавливаем загрузчик curl

sudo apt install -y curl

После обновления нашей системы и проверки зависимостей запустим скрипт установки для Node.js 18 (LTS)

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

После завершения работы скрипта устанавливаем Node.js 18

sudo apt install -y nodejs

Далее выполняем команды по очереди:

mkdir greeter-example
cd greeter-example
apt install cmdtest

Нажимаем y

npm init --y
npm install --save-dev hardhat
npm install -g npm@9.6.0
npx hardhat

Выбираем Create a TypeScript project, затем несколько раз Enter и несколько раз y

В процессе могут быть ошибки, не обращаем на них внимания

Продолжаем набирать дальше команды:

mkdir greeter
cd greeter
npm init -y
npm add -D typescript ts-node @types/node ethers@^5.7.2 zksync-web3@^0.13.1 @ethersproject/hash @ethersproject/web hardhat @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy
vim hardhat.config.ts

Далее откроется страница для написания кода, нажимаем i для редактирования, вставляем код:

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",
  },
};

Далее нажимаем Esc и набираем :wq

Продолжаем набирать команды:

mkdir contracts
mkdir deploy
vim contracts/Greeter.sol

Снова открывается страница для кода, нажимаем i для редактирования и вставляем этот код:

//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;
    }
}

Далее нажимаем Esc и набираем :wq

Продолжаем набирать команды:

npx hardhat compile
vim deploy/deploy.ts

Снова открывается страница для кода, нажимаем i для редактирования и вставляем этот код, предварительно заменив в строчке const wallet = new Wallet(“”); на свой приватный ключ из ММ, который мы сохраняли в самом начале:

import { utils, Wallet } from "zksync-web3";
import * as ethers from "ethers";
import { HardhatRuntimeEnvironment } from "hardhat/types";
import { Deployer } from "@matterlabs/hardhat-zksync-deploy";

// 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("<WALLET-PRIVATE-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]);

  // 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}`);
  }
}

Далее нажимаем Esc и набираем :wq

Вводим последнюю команду:

npx hardhat deploy-zksync

Ждём некоторое время и должны получить позитивный результат в виде такого сообщения

Лично у меня с первого раза не получилось и выдало вот такую ошибку:

Я просто заново вошел в итоги ещё раз и со вторым получил положительный результат.

После этого можно перейти в эксплорер , вводим номер своего ММ и видим три кости, т.к. после команды деплоя происходит еще и взаимодействие с контрактом.

Всем удачи, спасибо за прочтение статьи, надеюсь, она будет вам полезна.

Subscribe to traddelife.bnb
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.