Розробка rollup-рішення (Optimistic/ZK)
Rollup — це L2-рішення, яке виконує транзакції поза основним блокчейном (off-chain) та публікує результат на L1. Два принципово різних підходи до доказу коректності цих результатів ділять простір на Optimistic Rollups та ZK Rollups. Вибір між ними — одне з ключових архітектурних рішень, що визначає весь стек розробки.
Optimistic vs ZK: принципіальна різниця
Optimistic Rollup вважає транзакції коректними за замовчуванням ("оптимістично"). Якщо хтось вважає транзакцію шахрайською — він подає fraud proof протягом challenge window (зазвичай 7 днів). Якщо fraud proof прийнято — транзакція скасовується, challenger отримує винагороду, sequencer втрачає stake.
ZK Rollup публікує разом з пакетом транзакцій криптографічний доказ коректності (validity proof). L1 верифікує proof через смарт-контракт. Якщо proof пройшов перевірку — транзакції гарантовано коректні без довіри до sequencer.
| Характеристика | Optimistic Rollup | ZK Rollup |
|---|---|---|
| Finality на L1 | 7 днів (withdrawal) | ~1–30 хв (після публікації proof) |
| Trust assumptions | Честний challenger (1-of-N) | Коректність ZK схеми + код verifier |
| Computation overhead | Низький (немає proof generation) | Високий (proof generation CPU/GPU intensive) |
| EVM сумісність | Повна (EVM-equivalent) | Часткова або повна (залежить від реалізації) |
| Складність розробки | Помірна | Висока |
| Зрілість | Висока (Arbitrum, OP з 2021) | Зростає (zkSync, Scroll, Polygon zkEVM) |
Для більшості application-specific rollup задач у 2024 році вибір — OP Stack або Arbitrum Orbit. ZK стек виправданий, якщо: вам потрібна швидка finality, специфічні privacy вимоги, або rollup для кастомної ZK логіки.
OP Stack: розгортування Optimistic Rollup
OP Stack — фреймворк від Optimism для створення власних L2/L3 цепочок (superchain). Використовується Base, Zora, Mode, Blast.
Компоненти OP Stack
L1 (Ethereum) ← → op-batcher (публікує tx дані в L1)
op-proposer (публікує state roots в L1)
L2:
op-geth (modified geth, execution engine)
op-node (consensus/derivation layer, читає L1 дані)
Вимоги для development/testnet
L1 нода (або Sepolia RPC endpoint від Alchemy/Infura)
L2 сервер: 8 CPU, 16 GB RAM, 500 GB SSD
Деплой OP Stack через optimism-package
# Установка kurtosis (orchestration tool)
curl -s https://raw.githubusercontent.com/kurtosis-tech/kurtosis/main/install.sh | bash
# Запуск повного OP Stack локально
kurtosis run github.com/ethpandaops/optimism-package \
--args-file local-config.yaml
Конфігурація local-config.yaml:
optimism_package:
chains:
- participants:
- el_type: op-geth
cl_type: op-node
network_params:
network_id: "42069"
seconds_per_slot: 2
name: "my-rollup"
additional_services:
- blockscout # explorer
- prometheus_grafana
Production деплой: L1 контракти
git clone https://github.com/ethereum-optimism/optimism
cd optimism
# Установка залежностей
pnpm install
pnpm build
# Налаштування змінних
export L1_RPC_URL="https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY"
export PRIVATE_KEY="0x..." # deployer key з ETH на L1
# Деплой L1 смарт-контрактів (DisputeGameFactory, OptimismPortal, L1CrossDomainMessenger...)
cd packages/contracts-bedrock
forge script scripts/Deploy.s.sol:Deploy \
--rpc-url $L1_RPC_URL \
--private-key $PRIVATE_KEY \
--broadcast \
--verify
Після деплоя контрактів сохраняется директорія deployments/ з адресами — вони потрібні для конфігурації L2 компонентів.
Arbitrum Orbit: альтернатива для L2/L3
Arbitrum Orbit дозволяє створити L2 (відносно Ethereum) або L3 (відносно Arbitrum One/Nova) цепочку:
# Orbit chain deployer
git clone https://github.com/OffchainLabs/orbit-setup-script
cd orbit-setup-script
yarn install
# Конфігурація
cp config.example.json config.json
# Редагувати: chain ID, owner address, validators
# Деплой (на Sepolia або Arbitrum Sepolia для testnet)
PRIVATE_KEY=0x... yarn run deploy-rollup-chain
Orbit дає вибір: AnyTrust (доступність даних через DAC committee, дешевше) або Rollup (дані на L1, безпечніше).
ZK Rollup: ZK Stack (zkSync)
Для ZK rollup розробки найбільш зрілий фреймворк — ZK Stack від Matter Labs:
# Установка ZK Stack CLI
curl -L https://raw.githubusercontent.com/matter-labs/zksync-era/main/zkstack_cli/zkstackup/install | bash
# Ініціалізація екосистеми (розгортає L1 ноду, postgres, тощо через docker)
zkstack ecosystem init --dev
# Створення нової цепочки
zkstack chain create \
--chain-name my-zk-chain \
--chain-id 12345 \
--prover-mode no-proofs \ # для development без ZK доказів
--wallet-creation localhost
# Деплой L1 контрактів
zkstack chain deploy-l1 --chain my-zk-chain
# Запуск
zkstack server --chain my-zk-chain
У production режимі замість --prover-mode no-proofs потрібен реальний prover. Boojum (система доказів zkSync Era) потребує сервер з GPU (A100/H100) або масштабований CPU кластер для proof generation.
Proof Generation: найдорожче у ZK
Для ZK rollup production deployment найдорожчий компонент — це prover. Варіанти:
Власний prover кластер — потребує серйозного железа:
GPU prover: 1x NVIDIA A100 80GB → ~100-200 TPS throughput
CPU prover: 64-core AMD EPYC → у 10-20x повільніше GPU
Outsourced proving — Gevulot, Lagrange, Fermah (proof marketplace, платите за proof generation).
Validium режим — дані зберігаються off-chain в Data Availability Committee, не публікуються на L1. Значно дешевше, але знижує security guarantees.
Data Availability: ключовий компонент
Rollup повинен публікувати transaction data так, щоб будь-хто міг пересчитати state. Варіанти:
Ethereum calldata — максимальна безпека, найдорожчий. Після EIP-4844 (blobs) дешевше у 10-100x.
EIP-4844 Blobs — з Dencun upgrade (Ethereum березень 2024) rollup публікують дані як blob транзакції. Blobs зберігаються 18 днів, коштують на порядок дешевше calldata.
Celestia / EigenDA / Avail — зовнішні DA слої. Ще дешевше, але потребують довіри до окремої мережі.
Для нового rollup: використовувати EIP-4844 blobs як DA — оптимальний баланс вартості та безпеки на 2024–2025.
Sequencer: централізація та шляхи до decentralization
Усі production rollup сьогодні мають centralized sequencer — це чесний компромісс з продуктивністю. Поточний стан:
- Arbitrum — працює над BoLD (Bounded Liquidity Delay) для permissionless validation
- Optimism — Bedrock + модель з fault proofs (Cannon), рухається до decentralized sequencer
- zkSync — централізований sequencer, roadmap до shared sequencing
Для кастомного rollup: centralized sequencer на старті нормально, головне — escape hatch механізм (можливість виводу коштів без згоди sequencer через L1 напрямо).
Етапи розробки
| Фаза | Зміст | Строк |
|---|---|---|
| Вибір стека та архітектура | OP Stack vs Orbit vs ZK Stack, DA вибір | 1 тиждень |
| Testnet деплой (devnet) | Локальне окруження, тестування | 2–3 тижні |
| L1 контракти та bridges | Деплой, тестування мостів | 2 тижні |
| L2 інфраструктура | Sequencer, RPC, explorer | 2–3 тижні |
| Публічний testnet | Нагрузкове тестування, bug bounty | 2–4 тижні |
| Mainnet | Постійний запуск, моніторинг | 1–2 тижні |
| ZK prover (лише ZK) | Setup, оптимізація, outsourcing | +4–8 тижнів |
Реалістичний строк від початку до production mainnet: 2–4 місяці для Optimistic (OP Stack/Orbit), 4–6+ місяців для ZK з реальними proof.
Моніторинг та операційна безпека
// Моніторинг здоров'я rollup: перевіряємо, що batcher не відстає
const l1Block = await l1Provider.getBlockNumber()
const latestBatch = await l2Bridge.latestBatchIndex()
// Якщо розрив росте — batcher не публікує дані
// Алерт, якщо withdrawals не финалізуються
const pendingWithdrawals = await portal.pendingWithdrawals()
if (pendingWithdrawals > THRESHOLD) {
alert('Withdrawal queue growing, check proposer')
}
Для production rollup обов'язковий 24/7 моніторинг з алертами: стан sequencer, batcher lag, proposer health, bridge balance, та dispute window для Optimistic rollup.







