Развертывание смарт-контракта на zkSync.
Аренда сервера
Арендуем сервер, например на Contabo , Hetzner , VDsina или на любой другой платформе.
Минимальные характеристики для развертывания контракта: 1 CPU, 1 GB RAM и 30 GB SSD.
Приступаем к развертыванию смарт-контракта
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 [email protected]
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: Unlicensedpragma 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
Успешное развертывание должно выглядеть так:
Сохраняем себе данные из своего терминала:
- Сonstructor arguments — это 5я строчка снизу, она самая длинная (это то, ради чего мы добавляли строчку в код);
- Контракт — это 4я строчка снизу;
- Сompiler — 0.8.19;
- Zksolc Version — 1.3.7.
Созданный контракт можем проверить перейдя в скан zkSync Era по ссылке и вставить свой смарт контракт.
Готово, мы развернули смарт контракт!
Подписывайся на мои соцсети и будь в курсе всех актуальных новостей о тестнетах и нодах!)
📢 Мой телеграм-канал Millennials Crypto
📢 Мой Ютуб канал
📢 Мой твиттер https://twitter.com/mzemlu777 (всем оформлю взаимку ;) )