Разработка 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, etc. через 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 кластер — необходим серьёзный hardware:
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.







