FABRKNT
Cross-Chain Bridges — CCIP から light client まで
実 Bridge を読む
レッスン 3 / 7·CONTENT18 分45 XP
コース
Cross-Chain Bridges — CCIP から light client まで
レッスンの役割
CONTENT
順序
3 / 7

レッスン2 — OP Standard Bridge(canonical な L2 deposit/withdrawal)

問い

すべての OP Stack chain(Optimism、Base、Mode、Worldchain、Zora)が同じ bridge を走らせる。各 chain が個別に multisig や validator を立てない。rollup 自身のコンセンサスが bridge の trust アンカー。これが canonical な「trustless L1↔L2」リファレンス。Bridge は rollup へのインタフェース、trust は rollup にある — その構造は?

原理(最小モデル)

  • Bridge は rollup インタフェースで trust は rollup 側. Multisig も guardian もない、rollup コンセンサスが強制。
  • Deposit = 強制 inclusion で trustless. L1 contract がイベント発火 → L2 sequencer が ~1 時間以内に処理必須 → 未処理なら誰でも強制 inclusion。
  • Withdrawal = 7 日チャレンジ期間で遅延. State root 提出 ~1h ごと + チャレンジ 7 日 + prove + finalize 2 段階 → 合計 ~7 日。
  • 5 contract 構成. L1StandardBridge + L2StandardBridge + OptimismPortal + L2OutputOracle + L1CrossDomainMessenger。Bridge は asset interface、その下が汎用 messenger。
  • Standard Bridge と Native Bridge の併存. ERC20 マッピング(要登録)vs ETH 直接。
  • Fast withdrawal market が UX 解. 第三者 LP が 7 日リスク引き受け + 手数料、Across / Hop / Connext。trustless bridge 上の金融商品。
  • ExEx パターンで bridge イベントを取り込み. op-bridge example が sol! + decode_raw_log で型安全イベント取り込み。

具体例

Deposit フロー:

sequenceDiagram
    participant User
    participant L1Bridge as L1StandardBridge (Ethereum)
    participant Inbox as OptimismPortal (Ethereum)
    participant L2 as L2 chain
    participant L2Bridge as L2StandardBridge (Optimism)

    User->>L1Bridge: depositERC20(token, amount)
    L1Bridge->>Inbox: depositTransaction(...)
    Note over Inbox: DepositInitiated イベント発火
    L2->>L2: Sequencer が L1 イベントを読む
    L2->>L2Bridge: finalizeBridgeERC20(user, token, amount)
    L2Bridge->>User: Wrapped token を user に mint

Withdrawal フロー:

sequenceDiagram
    participant User
    participant L2Bridge as L2StandardBridge (Optimism)
    participant Output as L2OutputOracle (Ethereum)
    participant L1Bridge as L1StandardBridge (Ethereum)

    User->>L2Bridge: withdraw(token, amount)
    L2Bridge->>L2Bridge: User の wrapped token を burn
    Note over L2Bridge: WithdrawalInitiated イベント発火
    L2->>Output: State root 提出 (~1 時間ごと)
    Note over Output: 7 日間チャレンジ期間
    User->>L1Bridge: proveWithdrawal(proof, output)
    L1Bridge->>L1Bridge: Withdrawal の Merkle proof 検証
    L1Bridge->>L1Bridge: チャレンジ期間待ち
    User->>L1Bridge: finalizeWithdrawal()
    L1Bridge->>User: L1 トークン転送

5 contract(ethereum-optimism/optimismpackages/contracts-bedrock/):

Contract役割
L1StandardBridge.solL1 側ユーザ入口(deposit)+ 出口(withdraw)
L2StandardBridge.solL2 側ミラー — withdrawal で wrapped token burn
OptimismPortal.solクロスドメインメッセージ用 L1 inbox/outbox
L2OutputOracle.solL1 上に L2 state root commitment 保存
L1CrossDomainMessenger.sol汎用メッセージパッシング(トークン以外も)

Withdrawal 遅延の 3 要因:

  1. State root 提出: ~1 時間ごと(設定可能)
  2. チャレンジ期間: 7 日(fraud proof のため)
  3. 2 段階確定: prove + finalize(別々の tx)

合計 ~7 日。

Fast withdrawal market:

  1. L2 で withdrawal 観測
  2. ただちに L1 トークン送金(手数料差し引き)
  3. 7 日待つ
  4. 期間経過後に L1 で withdrawal クレーム

LP = withdrawal リスク(state proof 失敗)引き受け + 手数料獲得。Across / Hop / Connext が運営。

ExEx パターン(op-bridge example より):

sol!(L1StandardBridge, "l1_standard_bridge_abi.json");
use crate::L1StandardBridge::{
    ETHBridgeFinalized, ETHBridgeInitiated, L1StandardBridgeEvents,
};

// 各ブロックを監視 → bridge イベントを decode → 自前 DB に保存
// 反対側の bridge contract がこの index に問い合わせ

失敗例(誤解)

「OP Standard Bridge は multisig を信頼する」— 間違い。Bridge は rollup コンセンサス を信頼するだけ。Multisig は介在しない。「trustless = rollup 自身が安全な範囲で trustless」。

「Withdrawal 7 日は技術的限界」— 間違い設計選択(optimistic rollup の fraud proof window)。ZK rollup なら数時間。7 日は fraud proof 提出窓口で、これがなければ sequencer の嘘を検知できない。

「Standard Bridge と Native Bridge は同じ」— 間違い。Standard = ERC20 マッピング(要登録、L1/L2 アドレス対応付け)、Native = ETH + OP トークン直接。登録なしの ERC20 は bridge 不可

🛑 予測。 Ethereum → Optimism に 1 ETH deposit すると ~2 分で反映。1 ETH 引き出しは Ethereum 側で再び使えるまでどれだけかかるか? なぜ?(答え: ~7 日。理由 3 段: ① state root 提出 ~1h ごと、② 7 日チャレンジ期間(fraud proof window)、③ 2 段階確定(prove + finalize の別 tx)。deposit は強制 inclusion で trustless(rollup コンセンサスが L1 イベントを ~1h 以内に取り込み強制)、withdrawal は fraud proof window が必要(sequencer が L2 state について嘘ついた場合に誰でも fraud proof で reject できるよう待つ)。trustless だが速度差は構造的。)

ステップで組み立てる

Step 1: Deposit vs Withdrawal の非対称

Deposit = ~2 分 trustless(強制 inclusion)/ Withdrawal = 7 日(fraud proof window)。

Step 2: 5 contract を即答

L1StandardBridge / L2StandardBridge / OptimismPortal / L2OutputOracle / L1CrossDomainMessenger。Bridge は asset interface、その下が汎用 messenger。

Step 3: Withdrawal 遅延 3 要因

State root 提出 + チャレンジ 7 日 + 2 段階確定。

Step 4: Fast withdrawal market

第三者 LP が 7 日リスク引き受け + 手数料、trustless bridge 上の金融商品。

Step 5: ExEx でイベント取り込み

sol! + decode_raw_log で型安全イベント取り込み、自前 indexer / bridge に流す。

Step 6: Tempo↔Ethereum に当てはめる

Tempo = OP Stack でないスタンドアロン L1 → OP Standard Bridge そのまま不可、パターンのみ適用。必要:

  • Tempo Standard Bridge(両側 Solidity)
  • Tempo 上で Ethereum light client
  • Ethereum 上で Tempo light client(難しい方)
  • ZK light client 本番化までは CCIP の領域

答え合わせ

  • Deposit が trustless な理由: L1 contract がイベント発火 → L2 sequencer が ~1h 以内に取り込み必須 → 未処理なら誰でも強制 inclusion → rollup コンセンサスが強制。Sequencer の善意ではなく rollup ルールが trust 担保
  • Withdrawal 7 日の正当化: fraud proof window。sequencer が「L2 state は X」と嘘の state root を提出した場合、誰でも 7 日以内に fraud proof を提出して reject 可能。これがなければ L1 が sequencer を信用するだけ → multisig と同等。7 日 = optimistic セキュリティの代価
  • Bridge と Native Bridge の使い分け: ETH = Native(OP Stack のネイティブ assetなので直接)、他 ERC20 = Standard(L1/L2 トークンアドレス登録 + マッピング、登録なしは bridge 不可)。Standard が「任意トークン用」、Native が「特権 asset 用」

合格基準

  • Deposit vs Withdrawal の trust モデルと時間を即答できる。
  • 5 contract を役割で言える。
  • Withdrawal 遅延 3 要因を順に言える。
  • Fast withdrawal market が trustless bridge + 金融商品の構造であることを説明できる。
  • ExEx パターンで bridge イベントを取り込む sol! + decode_raw_log を書ける。

まとめ(3行)

  • OP Standard Bridge = canonical「trustless L1↔L2」、Multisig も guardian もなし、rollup コンセンサスが trust アンカー。
  • Deposit ~2 分(強制 inclusion)vs Withdrawal ~7 日(fraud proof window)= optimistic セキュリティの代価、5 contract(L1/L2 Standard + Portal + OutputOracle + CrossDomainMessenger)。
  • ExEx + sol! で bridge イベントを型安全に取り込み、Tempo は OP パターンを参照しつつ独自 Standard Bridge + 双方向 light client + 暫定 CCIP。