# Deploy Smart Contract Linea **Published by:** [Svyatoslav](https://paragraph.com/@svyatoslav-2/) **Published on:** 2023-04-03 **URL:** https://paragraph.com/@svyatoslav-2/deploy-smart-contract-linea ## Content Коротко про Linea:Linea — це віртуальна машина Ethereum типу 2 з нульовим знанням (zkEVM). ZkEVM відтворює середовище Ethereum як зведений пакет і дозволяє розробникам будувати на ньому так само, як і в основній мережі Ethereum. Linea дозволяє розгортати будь-який смарт-контракт, використовувати будь-який інструмент і розвиватися так, ніби ви будуєте на Ethereum. Для користувачів це забезпечує досвід і гарантії безпеки Ethereum, але з нижчими транзакційними витратами.Підготовка:Реєструємось на InfuraСтворюємо APIНатискаємо на кнопку “Create New API KEY”Зявляється це віконечкоNETWORK: WEB3 APINAME: На ваш вибір DeployНатискаємо кнопку “CREATE”Після кнопки "Create" нас переводить на цю сторінкуВибераємо пункт “Endpoints”, що знаходиться у верхньому з праваГортаємо в низ сторінки до пункту LineaУ кінці графи знаходиться кнопка “копіювати”Кнопка з ліваЗалишаємо цю вкладку відкритою на потім та переходимо до підготовки сервераКупуємо сервер на Hetzner та прідключаємось до нього через терміналДля деплою нам знадобляться такі пакети:NodeJS, npmTruffle, 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”Вводимо папку та назву файлу contracts/Token.sol та натискаємо “Enter”Видаляємо все вище написане та вставляємо наступний код з правилами розгортання контрактуПравила розгортанняЗберігаємо контракт поєднанням клавіш “Ctr + O”Вводимо папку та назву файлу migrations/1_deploy_token.js та натискаємо “Enter”Видаляємо все вище написане та вставляємо наступний код з конфігураціямиtruffle-config.jsrequire("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 ключ з сайту InfuraETHERSCAN_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 ## Publication Information - [Svyatoslav](https://paragraph.com/@svyatoslav-2/): Publication homepage - [All Posts](https://paragraph.com/@svyatoslav-2/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@svyatoslav-2): Subscribe to updates - [Twitter](https://twitter.com/r_svyatoslav): Follow on Twitter