# Деплоим смарт-контракт в тестовой сети Zksync Era **Published by:** [traddelife.bnb](https://paragraph.com/@vvladyslav/) **Published on:** 2023-03-17 **URL:** https://paragraph.com/@vvladyslav/zksync-era ## Content Понадобится сервер для активации смарт-контрактаВсё близится к запуску майннета Zksync Era. Поэтому сделать активность будет нелишним, так как информации о снепшоте ещё не было. Будем делать в тестовой сети Zksync Era Goerli. Поехали… Сразу можно подготовить кошелёк. Поиметь токены и вытащить приватный ключ из МетаМаска. Переходим на сайт и получаем в наш МетаМаск эту тестовую сеть. Запрашиваем в сети Goerli какое-то количество ETH и переводим через** мост** их в тестовую сеть Zksync Era Goerli.Далее сразу же находим наш приватный ключ из ММ и сохраняем на время, пока он не понадобится.Теперь переходим уже к созданию смарт-контракта на вашем сервере. Понадобится сервер с минимальными требованиями. Обновляем систему:sudo apt update При установке нажимаем y Устанавливаем загрузчик curlsudo apt install -y curl После обновления нашей системы и проверки зависимостей запустим скрипт установки для Node.js 18 (LTS)curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - После завершения работы скрипта устанавливаем Node.js 18sudo apt install -y nodejs Далее выполняем команды по очереди:mkdir greeter-example cd greeter-example Нажимаем ynpm init --y npm install --save-dev hardhat npm install -g npm@9.6.0 Выбираем 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(""); // 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 Ждём некоторое время и должны получить позитивный результат в виде такого сообщения Лично у меня с первого раза не получилось и выдало вот такую ошибку: Я просто заново вошел в итоги ещё раз и со вторым получил положительный результат. После этого можно перейти в эксплорер , вводим номер своего ММ и видим три кости, т.к. после команды деплоя происходит еще и взаимодействие с контрактом. Всем удачи, спасибо за прочтение статьи, надеюсь, она будет вам полезна. ## Publication Information - [traddelife.bnb](https://paragraph.com/@vvladyslav/): Publication homepage - [All Posts](https://paragraph.com/@vvladyslav/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@vvladyslav): Subscribe to updates - [Twitter](https://twitter.com/traddelife): Follow on Twitter