Ви написали смарт-контракт на Solidity, протестували на Hardhat, але при деплої в Optimism раптом отримуєте рахунок за газ у $2000. Або контракт не верифікується на optimistic.etherscan, тому що забули врахувати predeploy-адреси. Знайома ситуація? Один наш клієнт втратив $1500 на L1 data fee через неоптимізований calldata — ми переписали скрипт деплою, і комісія впала до $300. Наша команда має 5+ років досвіду в блокчейн-розробці та виконала більше 30 успішних деплоїв на L2. Розберемося, як правильно розгорнути контракт в OP Mainnet, налаштувати інструменти, оптимізувати газ та верифікувати код під ключ. Деплой смарт-контрактів Optimism — процес, який потребує врахування особливостей L2: двокомпонентної комісії, системних контрактів та окремих API-ключів для сканування. Ми розповімо, як уникнути типових помилок та заощадити на газі.
Конфігурація для деплою
Додаємо Optimism в Hardhat або Foundry:
// hardhat.config.ts networks: { optimism: { url: process.env.OPTIMISM_RPC ?? "https://mainnet.optimism.io", accounts: [process.env.DEPLOYER_PRIVATE_KEY!], chainId: 10, }, "optimism-sepolia": { url: "https://sepolia.optimism.io", accounts: [process.env.DEPLOYER_PRIVATE_KEY!], chainId: 11155420, }, } # Foundry forge create src/MyContract.sol:MyContract \ --rpc-url https://mainnet.optimism.io \ --private-key $DEPLOYER_PRIVATE_KEY \ --etherscan-api-key $OPTIMISM_ETHERSCAN_KEY \ --verify Як влаштований газ на Optimism і як його оптимізувати?
Головна особливість Optimism (і всіх OP Stack чейнів) — gas fee складається з двох частин:
- L2 execution gas — як звичайний Ethereum gas, але значно дешевший (оплачується в ETH).
- L1 data fee — вартість публікації calldata транзакції в Ethereum mainnet (для data availability). Після EIP-4844 (blobs) вартість знизилася на 90%+.
Контракт GasPriceOracle (адреса 0x420000000000000000000000000000000000000F) надає методи l1BaseFee(), baseFee(), gasPrice() для розрахунку повної вартості.
| Тип комісії | Опис | Типова частка |
|---|---|---|
| L2 execution gas | За обчислення на L2, як в Ethereum | 10-30% |
| L1 data fee | За публікацію calldata в L1 (Ethereum) | 70-90% (до EIP-4844) |
| Після EIP-4844 | Blobs здешевили L1 data fee на 90%+ | ~30-50% від загального |
Щоб знизити L1 data fee, мінімізуйте розмір calldata: використовуйте події замість storage, передавайте короткі аргументи (uint128 замість uint256), робіть batch-деплой контрактів однією транзакцією. Деплой через Create2 з фіксованою адресою також знижує накладні витрати.
Верифікація проксі-контрактів
Optimism має власний Etherscan (optimistic.etherscan.io) з окремим API ключем:
npx hardhat verify --network optimism \ --contract contracts/MyToken.sol:MyToken \ DEPLOYED_ADDRESS \ "Constructor Arg 1" "Constructor Arg 2" Для проксі (OpenZeppelin TransparentUpgradeableProxy) верифікуйте implementation і proxy окремо, потім через Etherscan UI зв'яжіть proxy з implementation.
Специфіка OP Stack
Predeploys — системні контракти за фіксованими адресами:
-
0x4200...0006— L2CrossDomainMessenger (для L1↔L2 messages) -
0x4200...0010— L2StandardBridge (бридж ERC-20) -
0x4200...000F— GasPriceOracle
Sequencer підтверджує транзакції за ~2 секунди, але фінальність на L1 настає через ~7 днів (challenge period). Для більшості dApp це не критично, але враховуйте при роботі з L1 withdrawals. Block time — 2 секунди: це впливає на параметри, якщо контракт використовує block.timestamp для timeouts або TWAP.
Типові помилки при деплої на Optimism
- Забули вказати chainId = 10 (Mainnet) або 11155420 (Sepolia) — транзакції не проходять.
- Не налаштували окремий API ключ для Optimism Etherscan — верифікація падає.
- Проксі-контракти верифікуються в неправильному порядку — спочатку implementation, потім proxy.
- L1 data fee розраховується після EIP-4844 — використовуйте GasPriceOracle для актуальних значень.
Деплой через Foundry script
// script/Deploy.s.sol pragma solidity ^0.8.20; import "forge-std/Script.sol"; import "../src/MyProtocol.sol"; contract DeployScript is Script { function run() external { uint256 deployerKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); vm.startBroadcast(deployerKey); MyProtocol protocol = new MyProtocol( 0x4200000000000000000000000000000000000006 // L2CrossDomainMessenger ); console.log("Deployed at:", address(protocol)); vm.stopBroadcast(); } } forge script script/Deploy.s.sol:DeployScript \ --rpc-url https://mainnet.optimism.io \ --broadcast \ --verify \ -vvvv Флаг --verify автоматично верифікує контракт після деплою. Foundry зберігає deployment адреси в broadcast/ директорії.
Чому варто обрати Optimism для вашого dApp?
Optimism — EVM-еквівалентний L2: ваші контракти на Solidity працюють без змін. Комісії в 10–50 разів нижчі, ніж на Ethereum mainnet. Фінальність — ~2 секунди. Екосистема підтримує Hardhat, Foundry, ethers.js, viem. Типова економія на газі після EIP-4844 становить значну суму.
Що входить в роботу
- Розробка та конфігурація скриптів деплою (Hardhat/Foundry)
- Оптимізація газу: мінімізація L1 data fee, використання batch-деплою
- Верифікація всіх контрактів (включаючи проксі) на optimistic.etherscan
- Налаштування CI/CD для автоматичного деплою на Sepolia та Mainnet
- Документація з розгортання та управління контрактами
- Підтримка протягом місяця після деплою
Процес роботи
| Етап | Тривалість | Результат |
|---|---|---|
| Аналітика | 1-2 дні | Архітектура, список контрактів |
| Проектування | 2-3 дні | Скрипти, конфігурації |
| Реалізація | 3-5 днів | Деплой на Sepolia |
| Тестування | 2-3 дні | Звіт про тести |
| Деплой | 1 день | Контракти на Mainnet, верифікація |
| Підтримка | 1 місяць | Моніторинг, hotfix при необхідності |
Тестування на Optimism Sepolia
Перед mainnet деплоєм тестуємо на Optimism Sepolia (chainId 11155420). Тестовий ETH отримуємо через офіційний faucet або Alchemy/Infura. Optimism Sepolia дзеркалює mainnet конфігурацію, включаючи системні контракти.
Якщо вам потрібно розгорнути контракт на Optimism з гарантією оптимізації газу та коректною верифікацією, зв'яжіться з нами — обговоримо ваш проєкт. Замовте послугу та отримайте надійне розгортання на Optimism.







