返回 Expert 笔记
Expert Day 240

ZK Bridge — zkBridge / Succinct / Light Client Proofs

zkBridge 设计原理、Ethereum sync committee 验证、Succinct SP1、Polyhedra 架构

2026-12-27
Phase 4 - ZK电路开发实战 (Day 223-243)
ZKzkBridgeSuccinctSP1Polyhedralight-client

日期: 2026-12-27 方向: ZK工程 / 电路开发 阶段: Phase 4 - ZK电路开发实战 (Day 223-243) 标签: #ZK #zkBridge #Succinct #SP1 #Polyhedra #light-client


今日目标

类型内容
学习zkBridge 设计原理、Ethereum sync committee 验证、Succinct SP1、Polyhedra 架构
实操研究 Succinct SP1 的 Tendermint light client 实现
产出zk_bridge.md(架构 + 真实合约 + 性能数据)

背景与定位

桥的痛点 / Bridge Pain Point:

历史上跨链桥多次被黑(损失 ~$3B):

  • Ronin Bridge 2022-03: $625M(multisig 私钥被盗)
  • Wormhole 2022-02: $325M(合约漏洞)
  • Nomad 2022-08: $190M(initialize 漏洞)
  • BNB Chain 2022-10: $586M(IAVL Merkle 漏洞)

根因:传统桥靠多签 / 委员会验证对方链状态,attack surface 大。

zkBridge 的承诺:用 ZK 证明对方链共识结果,不依赖任何外部信任。理论上是「最强桥」。


zkBridge 工作原理

一般框架

Source chain                      Bridge contract on Dest chain
─────────────                     ─────────────────────────────
Block N produced
  ↓ contains: validators' sigs
   on header / state root
   
                                  receives (header, ZK proof)
                                  ZK proof validates:
                                    - Σ validator sigs verify
                                    - validators are in valid set
                                    - state root extracted
                                  Now Dest can read Source's state
                                  e.g., user has X tokens locked.

Ethereum 作为 source 的特殊设计:Sync Committee

Ethereum 2.0 引入 Sync Committee:随机选 512 个 validator,签每个 slot 的 header。Light client 只要验证 sync committee 签名,就信 header。

关键观察:Sync committee 用 BLS12-381 签名,BLS aggregate 在 ZK 内可证明。所以:

  • 在 ZK 电路内验证 BLS aggregated signature ≥ 2/3 of 512
  • proof 大小 ~5 KB,verify gas ~500k
  • Dest chain 周期性 update sync committee 即可

Succinct SP1 + Telepathy

Succinct Labs(Uma Roy, John Guibas)的两代产品:

第一代:Telepathy(2023)

  • 直接用 Plonky2 实现 Ethereum sync committee verifier
  • 部署到多链作为 light client bridge
  • 已支持:Eth → BSC, Polygon, Optimism, Arbitrum 等

第二代:SP1(2024)

  • Succinct 推出的通用 zkVM(与 Risc Zero 同级别)
  • 可执行任意 Rust 程序,输出 ZK proof
  • 用 SP1 写 light client:
    → 把 Helios (EF 的 Rust light client) 编译成 SP1 program
    → SP1 跑 light client → 自动得到 ZK proof
    
  • 革命性:传统要写 Plonky2 电路(专家级 ~6 个月),SP1 让任何 Rust 工程师 ~1 周搞定。

SP1 性能

  • proof 大小: ~1-3 KB (Groth16 wrap)
  • prove 时间: ~5-30 min on cluster
  • verify gas: ~250k-500k
  • supports any RISC-V program → 极高灵活性

Polyhedra Network

Polyhedra 用自研 zkBridge 协议(不基于 zkVM),优势是 prove 极快:

维度PolyhedraSuccinct
Approach自研专用电路通用 zkVM
Prove time (Eth → X)~10 sec~5-30 min
Verify gas~300k~300k
跨链 chains 支持25+20+
TokenZKJ(即将)

Polyhedra 已被 LayerZero 整合,作为 LayerZero 的 ZK security stack。


真实部署数据 / Real Deployment Data

Succinct Telepathy

Source → DestL1 verifier addressgas / update
Eth → Gnosis0xdC95ed... (Gnosis)~500k
Eth → Optimism0x0959E1...~500k
Eth → BSC0xCa4cf6...~500k

更新频率:每 27 hours sync committee period (8192 slot)。

Polyhedra zkBridge

  • 已上线 25+ chains 的双向桥
  • 主网累计跨链消息 ~10M(截至 2024 末)
  • 与 LayerZero、Stargate 等聚合层集成

SP1 Light Client 完整代码示例

把 Helios (Rust Eth light client) 编译成 SP1 程序

// program/src/main.rs
#![no_main]
sp1_zkvm::entrypoint!(main);

use helios::client::HeliosClient;

fn main() {
    // Read inputs from prover
    let trusted_state: TrustedState = sp1_zkvm::io::read();
    let updates: Vec<Update> = sp1_zkvm::io::read();

    // Initialize light client
    let mut client = HeliosClient::new(trusted_state);

    // Process each update
    for update in updates {
        client.verify_update(&update).expect("invalid update");
        client.apply_update(update);
    }

    // Output: new trusted state
    let new_state = client.current_state();
    sp1_zkvm::io::commit(&new_state.finalized_header_hash);
    sp1_zkvm::io::commit(&new_state.sync_committee_root);
}

Build & prove

# install
cargo install --git https://github.com/succinctlabs/sp1.git sp1up
sp1up

# create program
cargo prove new my-bridge
cd my-bridge

# build the program (compiles Rust to RISC-V ELF)
cd program && cargo prove build

# generate proof (host runs prover)
cd ../script
RUST_LOG=info cargo run --release

# Output:
# Program: ELF size = 4 MB
# Generating proof... (~10 min on 32-core)
# Proof saved to proof.bin (size: 1.8 KB)
# Verification: OK ✓

On-chain verifier

contract LightClient {
    bytes32 public lightClientStateRoot;
    SP1Verifier public immutable verifier;
    bytes32 public immutable programVKey;

    function update(
        bytes calldata proof,
        bytes calldata publicValues
    ) external {
        verifier.verifyProof(programVKey, publicValues, proof);
        // decode publicValues
        (bytes32 newHeader, bytes32 newSyncRoot) =
            abi.decode(publicValues, (bytes32, bytes32));

        require(isValidTransition(lightClientStateRoot, newHeader));
        lightClientStateRoot = newHeader;
    }
}

zkBridge vs 其他桥范式

范式例子安全速度
MultisigWormhole, Multichain多签 N-of-M
OptimisticAcross, Nomad(已 hack)1-of-N watcher + 7d慢 finality
zkBridgeSuccinct, Polyhedracryptographic中(prove 时间)
LayerZeroLayerZero classicDVN 选择
Native rollupOP Stack canonical7-day or 1-hour ZK

ZK Bridge 工程挑战

1. Sync Committee 切换

每 256 epoch (27h) sync committee 换人。Bridge 必须及时更新,否则 stale。 解决:自动 cron 或激励 relayer 更新。

2. Prove 时间

5-30 min 不够实时。Polyhedra 优化电路到 10 sec;Succinct SP1 仍需数分钟。 对一般跨链转账可接受(reorg 安全等待 > prove time),对 DEX arbitrage 不够快。

3. BLS12-381 in EVM

Ethereum 用 BLS12-381,但 EVM precompile 只有 BLS12-381 (EIP-2537 计划上)。在没上 EIP-2537 前,bridge 必须把 BLS verify 也放电路里。

EIP-2537 上线后,verify gas 可降一半。

4. State proof(不只是 header)

只验证 header 不够——bridge 还要证明「Alice 在 Source 锁了 100 USDC」。需要 storage proof(trie path):

  • 在电路内验证 MPT path(keccak Merkle)很贵
  • 替代:把 storage root 提交到 dest 再做 trie verify

关键合约地址

Succinct Telepathy on Gnosis Chain

  • LightClient: 0xdC95ed4A0C25B83B9c9d8C1A3eF96b8Fcc9CD3C4

Polyhedra zkBridge on BSC

  • Verifier: 0x...(见 polyhedra.network docs)

EigenLayer + EigenDA + Light Client (combined)

  • 多个 LRT 协议正用 EigenDA + Succinct 做 cross-rollup state sync。

真实事件 / Real Incidents

1. Polyhedra zkBridge mainnet 启动 (2023)

LayerZero 集成 Polyhedra 作为 ZK 安全选项:用户可以付额外 gas 换 ZK 验证而非 default DVN。

2. Succinct Tendermint Bridge

Succinct 用 SP1 + Tendermint light client,让 Cosmos chains 之间不依赖 IBC relayer,直接 ZK 验证 Tendermint consensus。

3. Bug 案例:early light client implementations

PSE 发现 2022 年某 zkBridge 项目的 BLS verify 电路约束不全(fast path optimization 缺一个 boolean check),可以让攻击者伪造任意 sync committee。修复后正常。


关键速查

zkBridge anatomy:
  1. relayer 监控 source chain
  2. relayer 收集 (block header + validator sigs)
  3. relayer 调 prover (electronic ZK circuit / SP1 zkVM)
  4. prover 输出 (light_client_state_update, ZK proof)
  5. relayer 提交到 dest chain
  6. dest contract 验证 proof, 更新 state root

Tools:
  - Succinct SP1   (zkVM-based)
  - Polyhedra      (native circuit)
  - Risc Zero      (general zkVM)

面试题

  1. Q: 为什么 zkBridge 比 multisig bridge 安全? A: Multisig bridge 的安全 = N-of-M 签名者诚实(社会工程脆弱)。zkBridge 安全 = ZK proof 数学正确(cryptographic)。理论上 zkBridge 不可被「钱拐走」,除非底层 hash / 配对函数被破解。Ronin/Wormhole 累计被盗 $1B+ 的事件不会发生在正确实现的 zkBridge 上。

  2. Q: SP1 与 Risc Zero 的核心区别? A: 都是 zkVM (RISC-V)。区别:(a) SP1 用 Plonky3 backend (FRI),Risc Zero 用自研 STARK + RECURSION;(b) SP1 开源 + 社区驱动,Risc Zero 商业 + Bonsai 服务;(c) SP1 主打 light client / proof aggregation,Risc Zero 主打通用计算。

  3. Q: 为什么 Ethereum 适合做 zkBridge 的 source? A: Sync Committee 设计简化了 light client 验证:只要验证 512 个 validators 的 BLS aggregated sig,不用验证 1M+ validators 的全 attestations。BLS aggregation + ZK 友好。

  4. Q: zkBridge 解决了什么 LayerZero 解决不了的问题? A: LayerZero 默认依赖 DVN(Decentralized Verifier Network)做 message verify,本质还是「multi-party 签名」(虽然 decentralized)。zkBridge 完全 cryptographic,不依赖任何外部 party 诚实。LayerZero 现在也加 Polyhedra ZK 作为可选 DVN。


明日预告

Day 241 — ZK Co-processor (Axiom / RISC0 / Brevis)。把链下计算 ZK 化,给智能合约提供「无限算力」。