March 6, 2023

Deploy zk-sync SMART CONTRACT TESTNET NEW ERA

Делаю через дедик, в mobaexterm (ctrl v = mid mous)

ubuntu 20.04

Паки устанавливаем качаем что бы все работало чётенько

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


npm install --save-dev hardhat
npx hardhat


sudo apt update


sudo apt install apt-transport-https ca-certificates curl software-properties-common


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"


sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo systemctl status docker

Пишем дальше

mkdir greeter-example
cd greeter-example

Сразу зайди в папку greeter-example, если нету(( рефрешни пкм она появится, в ней ничего нет, мы будет создавать менять внутри циферки букавки

npm init -y


npm i --save-dev typescript ts-node ethers@^5.7.2 zksync-web3@^0.13.1 hardhat @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy

Создаем файл в greeter-example куда зашёл

ПКМ-> New Empty File пишем туда hardhat.config.ts и открываем через редактор

Вставляем в hardhat.config.ts этот большой код и сохраняем

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

module.exports = {
zksolc: {
version: "1.3.1",
compilerSource: "binary",
settings: {},
},
defaultNetwork: "zkSyncTestnet",

networks: {
zkSyncTestnet: {
url: "https://zksync2-testnet.zksync.dev",
ethNetwork: "goerli", // Can also be the RPC URL of the network (e.g. `https://goerli.infura.io/v3/<API_KEY>`)
zksync: true,
},
},
solidity: {
version: "0.8.17",
},
};

Пропиши одну команду
sudo systemctl start docker

Создай еще одну папку в greeter-example(ПКМ->New Directory) назови contracts там создаем Greeter.sol опять редачим и пишем туда этот кодик

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

Еще команда
npx hardhat compile

Увидел, если так, четко, дальше

Возвращаемся в /greeter-example/ создаем папку deploy в ней deploy.ts редачим deploy.ts и вставляем этот большой код, сохраняем

import fs from "fs"
import { Wallet, utils } 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 you want to deploy.
const deployer = new Deployer(hre, wallet);
const artifact = await deployer.loadArtifact("Greeter");

// Estimate contract deployment fee
const greeting = "Hi there!";
const deploymentFee = await deployer.estimateDeployFee(artifact, [greeting]);

// OPTIONAL: Deposit funds to L2
// Comment this block if you already have funds on zkSync.
const depositHandle = await deployer.zkWallet.deposit({
to: deployer.zkWallet.address,
token: utils.ETH_ADDRESS,
amount: deploymentFee.mul(2),
});
// 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 parsedFee = ethers.utils.formatEther(deploymentFee.toString());
console.log(`The deployment is estimated to cost ${parsedFee} ETH`);

const greeterContract = await deployer.deploy(artifact, [greeting]);

//obtain the Constructor Arguments
console.log("constructor args:" + greeterContract.interface.encodeDeploy([greeting]));

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

Возвращаемся в /greeter-example/ создаем папку .secret в ней пишем свой приват ключ, без пробелов, одной строчкой, у адресов разные приват счета можешь использовать не основу я бы сказал нужно) как достать ключ найдешь сам srry

Еще не все, не закрывай терминал

Идем на https://goerli.portal.zksync.io/bridge переводи тестовые Goerli ETH(КРАН) в ZkSync New Era Testnet подожди пока придут зефирки потому что они щас будут нужны

И ЛАСТ КОМАНДА
npx hardhat deploy-zksync

После нее ничего не жми в терминале жди пока дадут инфу по контрактику, сколько газа ушло и код для конекта контракта

Спустя ~5 минут видим это

construcor args сохраняем и смарт контракт тоже

Идем https://goerli.explorer.zksync.io/address/ВашСмартКонтракт


Переходим в Contract->Verify Smart Contract

Contract Address
По дефолту должен быть твой смарт контракт адрес


Contract Name Greeter

Zksolc Version Solc Version
v1.3.1 0.8.17


В Enter the Solidity 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: construcor args код который сохраняли выше

Почти готово возвращаемся в Contract справа видим коннект мм, делаем

В Write пишем что угодно и гоняем транзы через ваш смарт контракт, готово.