Развёртывание сайдчейна
Сайдчейн — это отдельная блокчейн-сеть, связанная с основной сетью через мост. В отличие от L2 rollup, сайдчейн не наследует безопасность родительской сети: он имеет собственный консенсус, собственный набор валидаторов, и финальность определяется его собственными правилами. Это компромисс: больше гибкости и меньше стоимость транзакций в обмен на независимую модель доверия.
Практические причины строить сайдчейн, а не использовать существующий L2: нужен кастомный gas token, нужна permissioned сеть (корпоративный блокчейн), нужны специфические правила консенсуса (например, PoA для игрового проекта с известными валидаторами), нужен полный контроль над параметрами сети без governance.
Выбор стека
OP Stack (Optimism) — самый популярный выбор для EVM-совместимых сетей. Технически это L2 архитектура (Optimistic Rollup), но может работать в режиме сайдчейна без Settlement на Ethereum (sovereign mode). Используется Coinbase Base, Worldcoin, Zora, десятки других.
Polygon CDK (Chain Development Kit) — ZK-based, более сложный в настройке, но обеспечивает ZK-proof security при желании интеграции с Ethereum.
Cosmos SDK — для application-specific chains. Не EVM по умолчанию (но есть Ethermint для EVM совместимости). IBC для межсетевого взаимодействия. Оправдан, когда нужен полный контроль над консенсусом и gas economics.
Substrate (Polkadot ecosystem) — для parachain или standalone chain. Сложный в разработке кастомной логики, но мощный фреймворк.
Для большинства EVM-проектов рекомендую OP Stack как наиболее проверенный и документированный путь.
Развёртывание OP Stack сайдчейна
Минимальная инфраструктура OP Stack:
L1 (Ethereum mainnet или testnet)
├── SystemConfig contract
├── OptimismPortal contract (bridge deposits/withdrawals)
├── L1CrossDomainMessenger
└── L1StandardBridge
L2 (ваша сеть)
├── op-geth (execution client, форк Geth)
├── op-node (rollup node / sequencer)
├── op-batcher (батчинг транзакций в L1)
└── op-proposer (публикация state roots в L1)
Шаг 1: Деплой L1 контрактов
git clone https://github.com/ethereum-optimism/optimism && cd optimism
git checkout op-contracts/v1.6.0 # используйте конкретный тег
# Генерация конфига
cd packages/contracts-bedrock
cp deploy-config/getting-started.json deploy-config/mychain.json
# Редактируем: l2ChainID, baseFeeVaultRecipient, sequencerAddress, etc.
# Деплой
forge script scripts/deploy/Deploy.s.sol:Deploy \
--private-key $DEPLOYER_PRIVATE_KEY \
--broadcast \
--rpc-url $L1_RPC_URL \
--slow
Шаг 2: Генерация genesis блока
cd op-node
go run ./cmd/main.go genesis l2 \
--deploy-config ../packages/contracts-bedrock/deploy-config/mychain.json \
--l1-deployments ../packages/contracts-bedrock/deployments/mychain/.deploy \
--outfile.l2 genesis.json \
--outfile.rollup rollup.json \
--l1-rpc $L1_RPC_URL
Шаг 3: Запуск op-geth
geth init --datadir /data/op-geth genesis.json
geth \
--datadir /data/op-geth \
--networkid <L2_CHAIN_ID> \
--http --http.api eth,net,web3,debug \
--authrpc.jwtsecret /data/jwt.hex \
--syncmode full \
--gcmode archive # нужен для op-node
Шаг 4: Запуск op-node (sequencer)
op-node \
--l2=http://localhost:8551 \
--l2.jwt-secret=/data/jwt.hex \
--sequencer.enabled \
--sequencer.l1-confs=4 \
--verifier.l1-confs=4 \
--rollup.config=rollup.json \
--rpc.addr=0.0.0.0 \
--rpc.port=8547 \
--p2p.disable \ # включить при наличии второй ноды
--l1=$L1_RPC_WS \
--l1.beacon=$L1_BEACON_URL
Мост: депозиты и выводы
Стандартный мост OP Stack работает через OptimismPortal на L1 и L2StandardBridge на L2.
Депозит (L1 → L2): пользователь вызывает depositETH() на L1StandardBridge, транзакция отражается на L2 через ~2–3 минуты (после inclusions в L2 batch).
Вывод (L2 → L1): трёхэтапный процесс:
- Транзакция вывода на L2
- Ожидание публикации state root на L1 (op-proposer делает это каждые N блоков)
- Период dispute window (7 дней для mainnet) — после этого
finalizeWithdrawalна L1
7-дневный dispute window — следствие Optimistic Rollup архитектуры (fraud proof window). Для sovereign сайдчейна без settlement этот период можно настроить произвольно или устранить полностью.
Кастомный gas token
OP Stack поддерживает Custom Gas Token (начиная с Bedrock + более новые версии) — ERC-20 токен вместо ETH как native currency для оплаты gas. Параметры задаются при деплое:
{
"useCustomGasToken": true,
"customGasTokenAddress": "0xYOUR_TOKEN_ON_L1"
}
Это популярно для gaming chains (платить gas игровым токеном) и enterprise chains (газ в стейблкоине).
Производительность и параметры
Ключевые параметры, влияющие на throughput и UX:
| Параметр | Default | Комментарий |
|---|---|---|
l2BlockTime |
2 сек | Можно снизить до 1 сек для high-frequency приложений |
maxSequencerDrift |
600 сек | Сколько L2 может работать без L1 данных |
channelTimeout |
300 блоков L1 | Максимальный lag для batcher |
GasLimit |
30M | Gas per block; увеличение требует больше ресурсов sequencer |
Безопасность и централизация
Стандартный OP Stack деплой — полностью централизованный sequencer. Это означает:
- Sequencer может цензурировать транзакции (хотя force-inclusion через L1 остаётся)
- Sequencer downtime = сеть не производит блоки
Для decentralization sequencer: OP Stack Sequencer Decentralization (ещё в разработке у Optimism Foundation) или внешние решения типа Espresso Systems (shared sequencer marketplace).
Минимальный набор для production:
- Multisig на все upgrade admin roles (SystemConfig owner, ProxyAdmin owner)
- Timelock на критические изменения параметров
- Мониторинг L1 контрактов на предмет unauthorized upgrade попыток
- Резервный L1 RPC (если основной падает — batcher и proposer останавливаются)
Этапы развёртывания
| Фаза | Содержание | Срок |
|---|---|---|
| Architecture & config | Выбор стека, параметры сети, tokenomics gas | 1 нед |
| Testnet deployment | Деплой на Sepolia, внутреннее тестирование | 1–2 нед |
| Bridge testing | Депозиты/выводы, stress test | 1 нед |
| Security review | Аудит L1 контрактов, конфигурация multisig | 2–4 нед |
| Infrastructure | Monitoring, alerting, DevOps | 1 нед |
| Public testnet | Открытый тест, bagбаунти | 2–4 нед |
| Mainnet | Деплой, поэтапное открытие | 1–2 нед |
Реалистичный срок: 2–3 месяца от начала до mainnet при выделенной команде.







