April 14, 2023

zkSync Era Mainnet

Экспансия L2 рынка: в поисках ретро!

На очереди очередное облегчение для Виталика - zkSync.

Задача - захантить ретродроп.

Ориентировочные расходы 50-100$ на кошелек + пару сот оборотных - это минимум, объемы накручивать лучше постепенно и выйти на тысячи-десятки тысяч.

Что делаем?

1. проходим квесты - https://layer3.xyz/category/zksync

! внимательно со слипеджем и прайсимпактом
можно увеличить расходы неосторожно !


2. Деплоим нфт набивая транзацкии экономя бюджет

Тут для обывателя тяжелее, так что по пунктам:

- берем сервер с минимальными настройками убунту 20.04, я беру посуточно у сервиса с рашки vdsina.ru, но можно брать тот же digital ocean, например
- после того, как сервер установлен, заходим в терминал и начинаем каждую команду по очереди:

sudo apt-get update && sudo apt-get install -y

apt install curl -y

curl -sL https://deb.nodesource.com/setup_16.x -o /tmp/nodesource_setup.sh

sudo bash /tmp/nodesource_setup.sh

sudo apt-get install -y nodejs

После установки данного блока начинаем деплой (каждую команду отдельно):

npm init -y

npm install --save-dev hardhat

npm install -g npm@9.6.2

npx hardhat

(выбираем Create a TypeScript project, затем Enter и несколько раз У)

mkdir greeter

cd greeter

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

vim hardhat.config.ts

После данной команды вставляем код под нфт. Жмем і для включения редактирования, копируем и вставляем код ниже, после чего выходим путем нажатия Esc и вводим :wq.

import "@matterlabs/hardhat-zksync-deploy"; import "@matterlabs/hardhat-zksync-solc";

module.exports = { zksolc: { version: "1.3.6", compilerSource: "binary", settings: {}, }, defaultNetwork: "zkSyncMainnet", networks: { zkSyncMainnet: { url: "https://zksync2-mainnet.zksync.io", ethNetwork: "mainnet", zksync: true, }, }, solidity: { version: "0.8.17", }, };

После того как вставили и вышли продолжаем:

mkdir contracts

mkdir deploy

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

npx hardhat compile

vim deploy/deploy.ts

Жмем і для редактирования и вставляем данный код, перед этим удаляем текст со скобками ("<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]);

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

Пару минут и видим такое: Greeter was deployed to ... Contract greets us with Hi there!! Contract greets us with Hey guys!

Если не видим такое, то повторяем последнюю команду