Cover photo

Deploy Smart Contract Linea

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

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

Підготовка:

  • Реєструємось на Infura

post image
  • Створюємо API

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

Зявляється це віконечко
Зявляється це віконечко
  • NETWORK: WEB3 API

  • NAME: На ваш вибір Deploy

  • Натискаємо кнопку “CREATE”

Після кнопки "Create" нас переводить на цю сторінку
Після кнопки "Create" нас переводить на цю сторінку
  • Вибераємо пункт “Endpoints”, що знаходиться у верхньому з права

Гортаємо в низ сторінки до пункту Linea
Гортаємо в низ сторінки до пункту Linea
  • У кінці графи знаходиться кнопка “копіювати”

Кнопка з ліва
Кнопка з ліва

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

  • Купуємо сервер на Hetzner та прідключаємось до нього через термінал

post image

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

  • 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

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

Заготовка
Заготовка
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
ctr + o
  • Зберігаємо контракт поєднанням клавіш “Ctr + O”

  • Вводимо папку та назву файлу contracts/Token.sol та натискаємо “Enter”

  • Видаляємо все вище написане та вставляємо наступний код з правилами розгортання контракту

Правила розгортання
Правила розгортання
  • Зберігаємо контракт поєднанням клавіш “Ctr + O”

  • Вводимо папку та назву файлу migrations/1_deploy_token.js та натискаємо “Enter”

  • Видаляємо все вище написане та вставляємо наступний код з конфігураціями

truffle-config.js
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” та підтверджуємо зміни.

  • Видаляємо все вище написане та заповнюємо свої данні після знаку “=”

post image

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

  • MNEMONIC= секретна фраза вашого гаманця

  • PROJECT_ID= API ключ з сайту Infura

  • ETHERSCAN_API_KEY= API ключ з Etherscan ( за бажанням так, як зараз не підтримує мережу Linea)

post image
  • Зберігаємо контракт поєднанням клавіш “Ctr + O”

  • Вводимо папку та назву файлу linea-tutorial/.env , натискаємо “Enter”

  • Закриваємо редактор комбінацією “Ctrl + X”

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

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

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