Гайд по экосистеме zkSync Era Mainnet и развертывание смарт-контракта

Whitelist Media
Whitelist
Published in
8 min readMar 29, 2023

Официальный мост

Для начала добавляем сеть zkSync Era в MetaMask на сайте. Теперь необходимо перевести активы с Ethereum в zkSync Era на сайте через официальный мост (также можете пользоваться мостом от Orbiter Finance, который мы неоднократно уже упоминали, но чаще прогонять объемы рекомендуем именно через официальный мост).

После того, как вы перевели активы в сеть zkSync Era переходим к DEX.

SyncSwap

Быстрая, дешевая и децентрализованная AMM биржа в майнете zkSync Era, мы еще в июле проходили Testnet от этого проекта в zkSync 2.0.

Команда проекта подтвердила будущий токен. Подробнее о наградах можно посмотреть по ссылке.

Переходим на сайт и делаем пару свапов (хотим напомнить, что помимо дропа от zkSync мы также ожидаем и от проектов внутри этой экосистемы).

Также во вкладке Pools добавляем ликвидность.

Mute

Еще один AMM DEX, у проекта есть свой токен, но команда zkSync может выделить часть токенов для своей экосистемы, а проекты могут выделить их для нас.

У проекта уже есть токен, шансы дропа маловероятны, но сделать пару аккаунтов качестве антифомо можно ;)

Делаем свапы на сайте.

И добавляем ликводность в пулы на сайте.

zkSync Name Service

Доменный сервис на zkSync в майнете, за их Twitter следят пока пару инфлюенсеров, возможно еще выростят.

Можно зарегистрировать себе домен на сайте.

На 5+ символов примерная стоимость $7.

Eralend (ранее Nexon Finance)

Проект взломали, подробнее в посте. Ожидаем новостей.

Onchain Trade

У проекта проблемы. Ожидаем новостей.

MES Protocol

Это DEX следующего поколения на основе книги ордеров, построенный на zkRollup и позволяет пользователям получать удовольствие от торговли как на CEX.

Вы уже должны быть знакомы с этим проектом, мы выкладывали их Testnet и Zealy программу, в которой можно получать роли в их Discord канале, подробнее читаем в посте.

Подключаем кошелек на сайте в сети zkSync Era и депозитим ETH или USDC на платформу.

Затем во вкладке Trade выбираем Sell или Buy, тип ордера и покупаем/продаем ETH.

Также пробуем функцию Convert (привычный для нас интерфейс DEX). Выбираем во вкладке Trade вкладку MES Convert и свапаем токены.

И в конце можете вывести активы с помощью Withdraw там же где и депозитили средства, но еще нужно будет заклеймить их, как на скрине ниже.

Tevaera

Игровая EVM-экосистема в сети zkSync, вы уже должны быть знакомы с ним, когда читали гайд по zkSync Lite.
Сейчас команда перешла полностью на zkSync Era и выпустила новые игры.

Регистрируемся у них на платформе, минтим себе Citizen ID и NFT, которые они предлагают.

После чего смотрим, какие есть активные игры и играем.

iZiSwap

iZiSwap — это DEX в сети zkSync ERA.

Переходим на сайт, подключаем кошелек и делаем свапы.

Также переходим на сайт и выполняем еженедельные задания — свапы, предоставление ликвидности и тд для получения поинтов. Между участниками обещают распределить 50% будущего дропа от zkSync.

Satori

Satori — это еще один DEX на zkSync, но с функционалом CEX. Проект привлек $10М инвестиций от Polychain, Blockchange и других.

Переходим на сайт и подключаем кошелек. Далее нажимаем Deposit и вносим средства на DEX.

Далее переходим во вкладку Trade и размещаем ордера Short или Long. Рекомендуем работать без плеча, чтобы не потерять на волатильности.

SynFutures

Протокол деривативов на zkSync и Polygon.

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

Далее во вкладке Trade выбираем пару и нажимаем кнопку “Trande”

Вводим сумму, выбираем Levarage и нажимаем Buy

Element Market

Element Market — неоднократно упоминали этот маркетплейс у нас на канале, работает во многих сетях, в инвесторах: Sequoia, Dragonfly Capital, Sino Global и другие. Известно, что будет свой токен $ELE.

Подключаем кошелек на сайте.

Выбираем какую либо из трендовых или ТОП коллекций и покупаем и продаем NFT, набивая объемы.

Derivio

Подключаем кошелек на сайте и торгуем на вкладке Trade.

Развертывание смарт-контракта на zkSync

Аренда сервера

Арендуем сервер, например на Contabo или на любой другой платформе.
Минимальные характеристики для развертывания контракта: 1 CPU, 1 GB RAM и 30 GB SSD.

При оплате сервера необходимо ввести пароль, с помощью которого вы будете подключаться к серверу. После покупки, вам на почту придет письмо с данными вашего сервера.

Подключение к серверу

Для того, чтобы подключиться к серверу на Windows потребуется программа PuTTY:

  • В “Host Name” вводим IP вашего сервера и нажимаем “Open”;
  • В открывшемся окне прописываем команду: root;
  • Жмем “Enter” и вставляем пароль от сервера, затем “Enter”.

На MacOS просто запускаем программу Terminal:

  • Заходим на сервер командой: ssh root@IP_ADDRESS, IP_ADDRESS меняем на IP сервера;
  • Дальше вводим “yes”, жмем “Enter” и вставляем пароль от сервера (введеный пароль будет скрыт иконкой с ключом). Жмем “Enter”.

Приступаем к развертыванию смарт-контракта

В данной статье мы будем брать все коды из официальных ресурсов zkSync. Но некоторые коды мы чуть изменим и в процессе покажем изменения и для чего мы это сделали, чтобы отбросить ваши сомнения, так как действия происходят в майнете и вам придется вписывать свой ключ от кошелька в код! Кто не готов — не начинайте.

Обновляемся:

sudo apt update
sudo apt upgrade

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

sudo apt install -y curl

Запускаем скрипт установки для Node.js 18 (LTS) и устанавливаем:

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

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

mkdir greeter-example
cd greeter-example
apt install cmdtest

Нужно ввести Y, чтобы подтвердить действие.
Устанавливаем hardhat:

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 @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.7",
compilerSource: "binary",
settings: {},
},
defaultNetwork: "zkMainnet",
networks: {
zkMainnet: {
url: "https://mainnet.era.zksync.io",
ethNetwork: "https://eth.llamarpc.com",
zksync: true,
},
},
solidity: {
version: "0.8.19",
},
};

Далее нажимаем Esc вводим :wq и Enter.
Продолжаем набирать команды.

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 и Enter.
Продолжаем набирать команды.

npx hardhat compile
vim deploy/deploy.ts

После крайней команды у нас откроется файл, нажимаем снова i и вставляем код, который указан ниже, данный код мы брали по ссылке в шестом пункте и внесли небольшие изменения, а именно строчку (console.log(greeterContract.interface.encodeDeploy([greeting]));) ее мы взяли по ссылке, так как нам нужно вести на экран в конце значения constructor arguments для того, чтобы в дальнейшем верифицировать наш контракт в скане. Также убрали автоматическое пополнение с L1 на L2 сеть, так как надеемся, что у вас есть ETH в сети zkSync Era.

Самое важное!! В коде приведенном ниже вместо <WALLET-PRIVATE-KEY> вставляем свой ключ от кошелька.

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");

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

Далее нажимаем Esc вводим :wq и Enter.
Вводим команду для деплоя контракта:

npx hardhat deploy-zksync

Успешное развертывание должно выглядить так:

Сохраняем себе данные из своего терминала:

  1. Сonstructor arguments — это 5я строчка снизу, она самая длинная (это то, ради чего мы добавляли строчку в код);
  2. Контракт — это 4я строчка снизу;
  3. Сompiler — 0.8.19;
  4. Zksolc Version — 1.3.7.

Созданный контракт можем проверить перейдя в скан zkSync Era по ссылке и вставить свой смарт контракт.

Готово, мы развернули смарт-контракт!

Если инструкция выше показалась вам сложной или у вас что то не получилось, то можно использовать платформу ThirdWeb и развернуть смартконтракт с ее помощью. Подробнее процесс развертывания мы описали в посте.

Подготовлено командой Whitelist.
Media links

--

--