# Deploy Smart Contract Linea

By [Svyatoslav](https://paragraph.com/@svyatoslav-2) · 2023-04-03

---

### Коротко про Linea:

**Linea** — це віртуальна машина Ethereum типу 2 з нульовим знанням (zkEVM). ZkEVM відтворює середовище Ethereum як зведений пакет і дозволяє розробникам будувати на ньому так само, як і в основній мережі Ethereum. Linea дозволяє розгортати будь-який смарт-контракт, використовувати будь-який інструмент і розвиватися так, ніби ви будуєте на Ethereum. Для користувачів це забезпечує досвід і гарантії безпеки Ethereum, але з нижчими транзакційними витратами.

### Підготовка:

*   **Реєструємось на** [**Infura**](https://app.infura.io/)
    

![](https://storage.googleapis.com/papyrus_images/8813d61d55c6db616421dd6a02743043bea346ef5c00b79dc59708599a847f66.png)

*   **Створюємо API**
    

![](https://storage.googleapis.com/papyrus_images/5007d5fb49ca5f6a4b1f4c4800a0ea1a24ae2eb2318c002b1d40a5fb03545ef8.png)

*   **Натискаємо на кнопку “Create New API KEY”**
    

![Зявляється це віконечко](https://storage.googleapis.com/papyrus_images/690eb4010b0d8fcd319e0903ab0204dfb8fdd88b65928c813adff9582ae9481e.png)

Зявляється це віконечко

*   **NETWORK: WEB3 API**
    
*   **NAME:** На ваш вибір `Deploy`
    
*   **Натискаємо кнопку “CREATE”**
    

![Після кнопки "Create" нас переводить на цю сторінку](https://storage.googleapis.com/papyrus_images/d82d26fbfd6010e85240b56fcc5b640cdea82537d2f21715516ef8c1c9eb7e77.png)

Після кнопки "Create" нас переводить на цю сторінку

*   **Вибераємо пункт “Endpoints”**, що знаходиться у верхньому з права
    

![Гортаємо в низ сторінки до пункту Linea](https://storage.googleapis.com/papyrus_images/8ac1e767fe0dcd33b7238e79ae6562dbe6ec1bd074b3437c30b42b2b2c2da6cd.png)

Гортаємо в низ сторінки до пункту Linea

*   У кінці графи знаходиться кнопка “копіювати”
    

![Кнопка з ліва](https://storage.googleapis.com/papyrus_images/caaadab9a7f0c38ad6c5955f0572359feb4919f02ee8b74157b5ea1292ddd369.png)

Кнопка з ліва

### Залишаємо цю вкладку відкритою на потім та переходимо до підготовки сервера

*   Купуємо сервер на [Hetzner](https://hetzner.cloud/?ref=iXQAi0PMuoRM) та прідключаємось до нього через термінал
    

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

### Для деплою нам знадобляться такі пакети:

*   NodeJS, npm
    
*   Truffle, truffle-hdwallet-provider, truffle-plugin-verify
    
*   Та ще деякі інші.
    

**Розпочнемо пряму підготовку та встановлення необхідних пакетів.** (_Якщо вони у вас ще не встановлені)_

**Warning! _Всі команди, окрім останьої, яка відділенна від інших вводяться по одному рядку після чого підтверджуєте натисканням кнопки “Enter”_**

    sudo apt update; apt upgrade
    sudo apt install nodejs
    sudo npm install -g npm@latest
    npm install -g truffle
    npm install --save truffle-hdwallet-provider
    npm install -D truffle-plugin-verify
    

**Warning! _Цю команду вводимо суцільно!👇_**

    sudo apt-get install -y gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget && sudo apt-get install -y libgbm-dev
    

**Після успішного встановлення всіх пакетів ми можему приступати до написання smart contract’у**

    truffle init linea-tutorial && cd linea-tutorial && nano
    

*   **Нам відкривається текстовий редактор Linux**
    

![Текстовий редактор](https://storage.googleapis.com/papyrus_images/d75d9d352774be0ce45cef01e1888c678a3fee6c96d575eab3d5977386a8f9c4.png)

Текстовий редактор

*   **Тепер ми скористаємось офіційною заготовкою контракту**
    

![Заготовка](https://storage.googleapis.com/papyrus_images/0e17fa63542a93b581621cf4fb8373d0f40dfa2a4fdff1eab3abe5a64d3a1c05.png)

Заготовка

    pragma solidity 0.8.19;
    
    // SPDX-License-Identifier: MIT
    
    contract Token {
      string public name = "My Token";
      string public symbol = "MTK";
      uint8 public decimals = 18;
      uint256 public totalSupply = 100000000;
    
      mapping (address => uint256) public balances;
      address public owner;
    
      constructor() {
        owner = msg.sender;
        balances[owner] = totalSupply;
      }
    
      function transfer(address recipient, uint256 amount) public {
        require(balances[msg.sender] >= amount, "Insufficient balance.");
        balances[msg.sender] -= amount;
        balances[recipient] += amount;
      }
    }
    

*   **За бажанням можна змінити назву та символ токену**
    

![ctr + o](https://storage.googleapis.com/papyrus_images/94aa5fb963383b7f600fcfcdbcb33152f446aea16aa07d711eba7e729135e011.png)

ctr + o

*   **Зберігаємо контракт поєднанням клавіш “Ctr + O”**
    
*   **Вводимо папку та назву файлу contracts/Token.sol та натискаємо “Enter”**
    
*   **Видаляємо все вище написане та вставляємо наступний код з правилами розгортання контракту**
    

![Правила розгортання](https://storage.googleapis.com/papyrus_images/a761acc3e0a73d66631a598d3590fd8e5c05a9a9cfdc8aedef93778ef43efcbe.png)

Правила розгортання

*   **Зберігаємо контракт поєднанням клавіш “Ctr + O”**
    
*   **Вводимо папку та назву файлу migrations/1\_deploy\_token.js та натискаємо “Enter”**
    
*   **Видаляємо все вище написане та вставляємо наступний код з конфігураціями**
    

![truffle-config.js](https://storage.googleapis.com/papyrus_images/b1cce4fd5805099f67385c306fe59395599bc933527bb71afca26ccb28871fca.png)

truffle-config.js

    require("dotenv").config();
    const HDWalletProvider = require("truffle-hdwallet-provider");
    const { MNEMONIC, ETHERSCAN_API_KEY, PROJECT_ID } = process.env;
    // ... rest of truffle-config
    module.exports = {
    plugins: ["truffle-plugin-verify"],
      networks: {
        dashboard: {
          port: 8575,
          host: "127.0.0.1",
          verbose: false,
         },
    
        linea: {
          provider: function() {
            return new HDWalletProvider(
              MNEMONIC, PROJECT_ID,
           );
          },
          verify: {
            apiUrl: "https://explorer.goerli.linea.build/api",
            apiKey: ETHERSCAN_API_KEY,
            explorerUrl: "https://explorer.goerli.linea.build/",
          },
            poolingInterval: 30000,
            networkCheckTimeoutnetworkCheckTimeout: 10000,
            timeoutBlocks: 50,
            network_id: "59140",
        },
      },
       compilers: {
            solc: {
                version: "0.8.19", // Fetch exact version from solc-bin (default: truffle's version)
                //       docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
                settings: {
                    // See the solidity docs for advice about optimization and evmVersion
                    optimizer: {
                        enabled: true,
                        runs: 200
                    },
                    //        evmVersion: "byzantium"
                },
            },
        },
    };
    

*   **Зберігаємо контракт поєднанням клавіш “Ctr + O”**
    
*   **Вводимо папку та назву файлу linea-tutorial/truffle-config.js , натискаємо “Enter” та підтверджуємо зміни.**
    
*   **Видаляємо все вище написане та заповнюємо свої данні після знаку “=”**
    

![](https://storage.googleapis.com/papyrus_images/47222492b6d9159ea035074466a835d73fa4a8d80e1893b2e05e1bb2bab79750.png)

**Warning! файл .env відокремлиний від смарт контракта та тільки Truffel на вашому сервері може його прочитати, окрім вас, тому DYOR! Не використовуйте основний гаманець на якому є кошти!**

*   **MNEMONIC= секретна фраза вашого гаманця**
    
*   **PROJECT\_ID= API ключ з сайту Infura**
    
*   **ETHERSCAN\_API\_KEY= API ключ з Etherscan** _( за бажанням так, як зараз не підтримує мережу_ **_Linea_**_)_
    

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

*   **Зберігаємо контракт поєднанням клавіш “Ctr + O”**
    
*   **Вводимо папку та назву файлу linea-tutorial/.env , натискаємо “Enter”**
    
*   **Закриваємо редактор комбінацією “Ctrl + X”**
    

    MNEMONIC=your MNEMONIC
    PROJECT_ID=consensys api
    ETHERSCAN_API_KEY=eher api
    

**_Примітка після знаку “=” непотрібно відступати ( натискати “пробіл”)!_**

Вводимо останю команду: truffle deploy --network linea

---

*Originally published on [Svyatoslav](https://paragraph.com/@svyatoslav-2/deploy-smart-contract-linea)*
