Перейти к содержанию
Learning Platform
Продвинутый
35 минут
Optimistic Rollups Fraud Proofs Sequencer Challenge Period L1-L2 Bridge

Требуемые знания:

  • 04-plasma

Optimistic Rollups

Зачем это блокчейн-разработчику?

Plasma провалилась из-за data availability. Rollups исправили это одним гениальным решением: публиковать ВСЕ данные транзакций на L1. Теперь если sequencer исчезнет, любой может восстановить состояние из данных на Ethereum.

Optimistic Rollups добавили к этому элегантную идею: считать все транзакции валидными, пока кто-то не докажет обратное. Это и есть “оптимизм” — в 99.99% случаев транзакции валидны. Fraud proofs обрабатывают 0.01%.

Результат:

  • 2,000-4,000 TPS (vs ~15-30 TPS на L1)
  • 10-100x дешевле по gas fees (особенно после EIP-4844)
  • Полная EVM совместимость — тот же Solidity, те же инструменты
  • Безопасность Ethereum — данные на L1, fraud proofs обеспечивают корректность

Два доминирующих optimistic rollup — Optimism и Arbitrum — обрабатывают миллионы транзакций ежедневно. В этом уроке мы разберем архитектуру, fraud proofs и L1-L2 коммуникацию.

Ключевая идея “оптимизма”

Принцип: assume valid unless proven otherwise

В традиционном блокчейне каждый узел верифицирует каждую транзакцию. Это безопасно, но медленно (N узлов * N транзакций = O(N^2) работы).

Optimistic rollup переворачивает модель:

  1. Sequencer исполняет транзакции off-chain и публикует результат
  2. Все считают результат корректным (optimistic assumption)
  3. Если кто-то обнаружит ошибку — подает fraud proof
  4. Fraud proof доказывает неверность state transition на L1

Почему это работает? Потому что:

  • Данные на L1: любой может загрузить batch data и проверить
  • Экономические стимулы: sequencer ставит bond; если fraud доказан — теряет bond
  • Один честный верификатор достаточен для безопасности всей системы

Аналогия: налоговая декларация. Вы подаете декларацию (state root), и она принимается (optimistic). Но налоговая может проверить (audit = fraud proof). Если нашли ошибку — штраф (slashing). Достаточно ОДНОГО проверяющего.

Архитектура Optimistic Rollup

Пройдите все 6 шагов — от отправки транзакции до финальности:

Архитектура Optimistic Rollup
1
2
3
4
5
6
Step 1: USER TX -- Отправка транзакции
Soft confirmation (~2s)
Пользователь отправляет транзакцию sequencer. Sequencer -- централизованный оператор, который принимает, упорядочивает и исполняет транзакции локально. "Soft confirmation" за секунды.
User
Sequencer
L1 Contract
Verifiers
Data flow: User -> Sequencer
Ключевой принципОптимизм: считаем транзакции валидными, пока не доказано обратное. 99.99% транзакций валидны. Fraud proofs обрабатывают 0.01%.

Два типа подтверждения

ТипВремяГарантияКогда используется
Soft finality~2 секундыSequencer подтвердил, но может быть revertЕжедневные транзакции, DeFi
Hard finality~7 днейL1 верификация, криптоэкономическая безопасностьКрупные withdrawals, cross-chain

Большинство пользователей работают в режиме soft finality. 7-дневный период актуален только для withdrawals на L1.

On-chain компоненты

Optimistic rollup имеет три контракта на L1:

Rollup Contract        -- принимает batch data и state roots от sequencer
Verifier Contract      -- обрабатывает fraud proofs, слэшит нечестных sequencers
Bridge Contract        -- управляет депозитами (L1->L2) и выводами (L2->L1)

Batch Submission

Как sequencer формирует batch

1. Sequencer собирает 100-1000 транзакций
2. Исполняет их локально, вычисляет новый state root
3. Сжимает данные (Brotli/Zstd compression)
4. Публикует на L1:
   - batch_data: все транзакции (сжатые)
   - new_state_root: корень Merkle tree нового состояния
   - previous_state_root: для проверки последовательности

Calldata vs Blobs (EIP-4844)

МетодСтоимостьХранениеКогда
Calldata~16 gas/byteНавсегда на L1До марта 2024
Blobs (EIP-4844)~1 gas/byte~18 дней на L1После марта 2024

EIP-4844 снизил стоимость data posting в 10-100 раз. Pectra (2025) удвоил blob throughput до 6 blobs/block.

Fraud Proofs: два подхода

Fraud proof — механизм, позволяющий доказать что sequencer опубликовал неверный state root. Существуют два принципиально разных подхода:

Fraud Proofs: однораундовые vs интерактивные
Single-Round
Optimism (Cannon FPVM)
Процесс:
1. Challenger обнаруживает неверный state root
2. Challenger отправляет fraud proof на L1
3. L1 контракт запускает Cannon FPVM
4. FPVM повторно исполняет спорную транзакцию
5. Если state root не совпадает -- fraud доказан
Pros:
+ Простая логика -- одно взаимодействие
+ Быстрое разрешение спора (~1 TX)
Cons:
- Высокий gas cost на L1 (re-execution)
- Ограничен размером одной транзакции
Gas: O(N) gas -- полное повторное исполнение
Stage 1 с 2024 (permissionless Cannon)
Multi-Round Interactive
Arbitrum (Bisection)
Процесс:
1. Challenger обнаруживает неверный state root
2. Bisection round 1: делим execution trace пополам
3. Каждый round: определяем в какой половине ошибка
4. ~log2(N) rounds для N инструкций (~40-50 rounds)
5. Финальный round: верификация ОДНОЙ инструкции на L1
Pros:
+ Низкий gas cost (проверка 1 инструкции)
+ Масштабируется для миллионов инструкций
Cons:
- Сложная логика -- множество взаимодействий
- Дольше разрешение спора (дни)
Gas: O(log N) gas -- только 1 инструкция on-chain
Stage 1 с 2024 (permissionless bisection)
БезопасностьОба подхода безопасны при наличии хотя бы одного честного верификатора. Single-round проще, multi-round дешевле. Выбор -- трейдофф между сложностью и стоимостью.

Single-Round: Optimism (Cannon FPVM)

Challenger: "State root после batch #5000 неверный!"
              |
              v
L1 Contract: запускает Cannon FPVM
              |
              v
Cannon FPVM: повторно исполняет спорную транзакцию
              |
              v
Результат:   expected_root != published_root?
              -> ДА: sequencer слэшится, state откатывается
              -> НЕТ: challenger теряет свой bond

Cannon (Fault Proof Virtual Machine) — VM, исполняющая EVM opcodes на L1. Permissionless с 2024 года (Stage 1).

Multi-Round Interactive: Arbitrum (Bisection)

Challenger: "State root после batch #5000 неверный!"
              |
Round 1:    Execution trace: [0 ............ N] инструкций
            Делим пополам: ошибка в [0..N/2] или [N/2..N]?
              |
Round 2:    Ошибка в [0..N/2]. Делим снова: [0..N/4] или [N/4..N/2]?
              |
...           ~log2(N) раундов
              |
Final:      Ошибка в инструкции #42,567,891
            L1 верифицирует ОДНУ инструкцию
              |
Результат:  instruction_result != expected?
            -> ДА: sequencer слэшится
            -> НЕТ: challenger теряет bond

Для N = 10^8 инструкций: log2(10^8) = ~27 раундов. Каждый round — одна транзакция на L1.

Модель безопасности

Оба подхода безопасны при одном критическом предположении:

Существует хотя бы ОДИН честный верификатор, который может и хочет подать fraud proof.

Это называется 1-of-N honest assumption. С N независимыми верификаторами вероятность, что все коррумпированы = p^N (где p — вероятность коррупции одного). Для p=0.1, N=10: вероятность отказа = 10^-10.

7-дневный Challenge Period

Почему именно 7 дней?

7-дневный challenge period — не произвольное число. Это инженерный компромисс:

Достаточно длинный для:

  • Загрузки batch data с L1 (может занять часы для больших batches)
  • Повторного исполнения всех транзакций
  • Подготовки и отправки fraud proof
  • Учета сетевых задержек и цензуры

Достаточно короткий для:

  • Практичного использования (не 30 дней)
  • Приемлемого UX для withdrawals

Почему это НЕ баг

7-дневный withdrawal delay — это security feature, не баг. Без challenge period sequencer мог бы публиковать поддельные state roots и мгновенно красть все средства. 7 дней дают сообществу время обнаружить и оспорить мошенничество.

L1 ↔ L2 коммуникация

Пройдите 6 шагов — 3 для депозита, 3 для вывода:

L1 <-> L2: депозиты и выводы
1
2
3
4
5
6
DEPOSIT (L1 -> L2)~1 TX on L1
Step 1: DEPOSIT -- L1 -> L2: отправка
L1 Transaction
User отправляет ETH/токены в Bridge contract на L1. Bridge блокирует активы. Создается deposit message для L2.
L1 (Ethereum)
Bridge locks assets
L2 (Rollup)
Waiting...
АсимметрияДепозит: минуты. Вывод: 7 дней. Liquidity providers (Across, Hop, Stargate) предлагают мгновенные выводы за комиссию -- они берут на себя 7-дневный риск.

Асимметрия: минуты vs дни

НаправлениеВремяПочему
Deposit (L1 -> L2)1-5 минутL1 confirmation + L2 processing
Withdrawal (L2 -> L1)7 днейChallenge period для fraud proofs

Fast Withdrawals через Liquidity Providers

Не хотите ждать 7 дней? Liquidity providers решают эту проблему:

Стандартный withdrawal:
  User (L2) -> [7 days] -> User (L1)

Fast withdrawal (через LP):
  User (L2) -> LP берет на себя 7-дневный risk -> User получает на L1 сразу
  LP получает: withdrawal amount - fee (обычно 0.1-0.5%)

Протоколы для fast withdrawals:

  • Across — intent-based bridge, самый быстрый
  • Hop — hToken liquidity network
  • Stargate — unified liquidity pools

Спектр финальности

Sequencer confirmation (seconds)
        |
        | Soft finality -- sequencer подтвердил, но может быть revert
        |
Batch posted to L1 (minutes-hours)
        |
        | Stronger -- данные на L1, но state root ещё не финализирован
        |
Challenge period expires (7 days)
        |
        | Hard finality -- криптоэкономически безопасно
        |
L1 state updated, withdrawals enabled

Алгоритмический уровень: fraud proof protocol

# Optimistic Rollup -- simplified fraud proof protocol

class RollupContract:
    def __init__(self):
        self.batches = {}           # batch_id -> (data_hash, state_root, timestamp)
        self.challenge_window = 7 * 24 * 3600  # 7 days in seconds

    def submit_batch(self, batch_data, new_state_root):
        """Sequencer posts batch to L1"""
        batch_id = len(self.batches)
        self.batches[batch_id] = {
            'data_hash': hash(batch_data),
            'state_root': new_state_root,
            'timestamp': block.timestamp,
            'finalized': False
        }
        # Store full data in calldata/blob for DA
        emit BatchSubmitted(batch_id, new_state_root)

    def challenge_state(self, batch_id, fraud_proof):
        """Challenger disputes a batch"""
        batch = self.batches[batch_id]
        assert block.timestamp < batch['timestamp'] + self.challenge_window
        assert not batch['finalized']

        # Re-execute batch and verify state root is incorrect
        expected_root = reexecute(batch_data_from_l1)
        assert expected_root != batch['state_root']  # FRAUD DETECTED

        slash(sequencer)                    # Sequencer loses bond
        revert_to(previous_valid_state)     # State rolled back
        reward(challenger)                  # Challenger receives reward

    def finalize_batch(self, batch_id):
        """Finalize after challenge window"""
        batch = self.batches[batch_id]
        assert block.timestamp >= batch['timestamp'] + self.challenge_window
        batch['finalized'] = True
        # Withdrawals for this batch can now be processed

Математический уровень: модель безопасности

Вероятностная модель

Rollup безопасен если Pr[хотя бы 1 честный верификатор] высока:

N = количество независимых верификаторов
p = Pr[один верификатор коррумпирован]

Pr[все коррумпированы] = p^N
Pr[хотя бы 1 честный]  = 1 - p^N

Примеры:
  p = 0.1, N = 5:   Pr[failure] = 10^-5   (99.999% безопасность)
  p = 0.1, N = 10:  Pr[failure] = 10^-10  (99.99999999%)
  p = 0.5, N = 20:  Pr[failure] = 10^-6   (даже при 50% коррупции!)

Экономическая безопасность

Sequencer ставит bond B. Fraud detection вероятность d:

Expected profit from fraud    = V * (1 - d)     (V = value stolen)
Expected loss from fraud      = B * d            (B = bond)

Условие честного поведения:
  V * (1 - d) < B * d
  V / B < d / (1 - d)

При d = 0.99 (99% detection rate):
  V / B < 99
  Для bond B = $1M: невыгодно красть < $99M

Сравнение с ZK Rollups

ПараметрOptimisticZK
Security assumption1-of-N honest (probabilistic)Cryptographic soundness (mathematical)
Finality7 days (challenge period)Hours (proof generation)
Cost to operateДешевле (нет proof generation)Дороже (prover infrastructure)
Cost per TXВыше (больше data)Ниже (лучше compression)
EVM compatibilityNear-perfect (EVM equivalent)Varies (Type 1-4 zkEVM)

Итоги

КонцепцияСутьЗначение
Optimistic assumptionСчитаем валидным, пока не доказано обратноеЭффективность: 99.99% TX валидны
SequencerЦентрализованный оператор, batch submissionSoft finality за секунды
Batch submissionДанные всех TX на L1 (calldata/blobs)Data availability решена
Fraud proofsSingle-round (Cannon) vs multi-round (bisection)1-of-N honest assumption
7-day challenge periodВремя для обнаружения и оспаривания fraudSecurity feature, не баг
L1-L2 messagesDeposit: минуты. Withdrawal: 7 днейАсимметрия из-за fraud proofs
Liquidity providersFast withdrawals за комиссиюAcross, Hop, Stargate
EIP-4844 blobs10-100x снижение data posting costКлючевое улучшение для L2

Что дальше: В SCALE-06 мы детально изучим два доминирующих optimistic rollup — Optimism (OP Stack, Superchain) и Arbitrum (Nitro, Stylus). И убедимся, что развертывание контрактов на L2 идентично L1 — тот же Solidity, тот же Foundry, другой RPC URL.

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс