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

Створюємо API

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

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

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

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

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

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”
Вводимо папку та назву файлу contracts/Token.sol та натискаємо “Enter”
Видаляємо все вище написане та вставляємо наступний код з правилами розгортання контракту

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

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” та підтверджуємо зміни.
Видаляємо все вище написане та заповнюємо свої данні після знаку “=”

Warning! файл .env відокремлиний від смарт контракта та тільки Truffel на вашому сервері може його прочитати, окрім вас, тому DYOR! Не використовуйте основний гаманець на якому є кошти!
MNEMONIC= секретна фраза вашого гаманця
PROJECT_ID= API ключ з сайту Infura
ETHERSCAN_API_KEY= API ключ з Etherscan ( за бажанням так, як зараз не підтримує мережу Linea)

Зберігаємо контракт поєднанням клавіш “Ctr + O”
Вводимо папку та назву файлу linea-tutorial/.env , натискаємо “Enter”
Закриваємо редактор комбінацією “Ctrl + X”
MNEMONIC=your MNEMONIC
PROJECT_ID=consensys api
ETHERSCAN_API_KEY=eher api
Примітка після знаку “=” непотрібно відступати ( натискати “пробіл”)!
Вводимо останю команду: truffle deploy --network linea

