# Деплоим смарт-контракт в тестовой сети Zksync Era

By [traddelife.bnb](https://paragraph.com/@vvladyslav) · 2023-03-17

---

Понадобится сервер для активации смарт-контракта

![](https://storage.googleapis.com/papyrus_images/6bd58924b0bc48baf100b1f1053ece551f0de8f28d5bb56a9c77368378c085d2.png)

Всё близится к запуску майннета Zksync Era. Поэтому сделать активность будет нелишним, так как информации о снепшоте ещё не было. Будем делать в тестовой сети Zksync Era Goerli.

Поехали…

Сразу можно подготовить кошелёк. Поиметь токены и вытащить приватный ключ из МетаМаска.

[**Переходим на сайт и получаем в наш МетаМаск эту тестовую сеть.**](https://chainlist.org/?search=zkSync+Era+test&testnets=true)

[**Запрашиваем**](https://faucetlink.to/goerli) в сети Goerli какое-то количество ETH и переводим через\*\* [мост](https://goerli.portal.zksync.io/bridge)\*\* их в тестовую сеть Zksync Era Goerli.

![](https://storage.googleapis.com/papyrus_images/21376e53c7b9eb59c1d50454172b76c5f263bb32bf7033281df1de516d10794c.png)

Далее сразу же находим наш приватный ключ из ММ и сохраняем на время, пока он не понадобится.

![](https://storage.googleapis.com/papyrus_images/02d4f58c97b89e189257aa3cd732d72b01e7e416d7d3d91265c1296b96bcd6cc.png)

Теперь переходим уже к созданию смарт-контракта на вашем сервере. Понадобится сервер с минимальными требованиями.

_Обновляем систему:_

    sudo apt update
    

_При установке нажимаем_ **y**

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

    sudo apt install -y curl
    

_После обновления нашей системы и проверки зависимостей запустим скрипт установки для Node.js 18 (LTS)_

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

_После завершения работы скрипта устанавливаем Node.js 18_

    sudo apt install -y nodejs
    

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

    mkdir greeter-example
    

    cd greeter-example
    

_Нажимаем_ **y**

    npm 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("<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"); // 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 _Ждём некоторое время и должны получить позитивный результат в виде такого сообщения_ _Лично у меня с первого раза не получилось и выдало вот такую ошибку:_ _Я просто заново вошел в итоги ещё раз и со вторым получил положительный результат._ _После этого можно перейти в_ [_эксплорер_](https://goerli.explorer.zksync.io/) _, вводим номер своего ММ и видим три кости, т.к. после команды деплоя происходит еще и взаимодействие с контрактом._ _Всем удачи, спасибо за прочтение статьи, надеюсь, она будет вам полезна._

---

*Originally published on [traddelife.bnb](https://paragraph.com/@vvladyslav/zksync-era)*
