ZK Bridge — zkBridge / Succinct / Light Client Proofs
zkBridge 设计原理、Ethereum sync committee 验证、Succinct SP1、Polyhedra 架构
日期: 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 极快:
| 维度 | Polyhedra | Succinct |
|---|---|---|
| Approach | 自研专用电路 | 通用 zkVM |
| Prove time (Eth → X) | ~10 sec | ~5-30 min |
| Verify gas | ~300k | ~300k |
| 跨链 chains 支持 | 25+ | 20+ |
| Token | ZKJ | (即将) |
Polyhedra 已被 LayerZero 整合,作为 LayerZero 的 ZK security stack。
真实部署数据 / Real Deployment Data
Succinct Telepathy
| Source → Dest | L1 verifier address | gas / update |
|---|---|---|
| Eth → Gnosis | 0xdC95ed... (Gnosis) | ~500k |
| Eth → Optimism | 0x0959E1... | ~500k |
| Eth → BSC | 0xCa4cf6... | ~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 其他桥范式
| 范式 | 例子 | 安全 | 速度 |
|---|---|---|---|
| Multisig | Wormhole, Multichain | 多签 N-of-M | 快 |
| Optimistic | Across, Nomad(已 hack) | 1-of-N watcher + 7d | 慢 finality |
| zkBridge | Succinct, Polyhedra | cryptographic | 中(prove 时间) |
| LayerZero | LayerZero classic | DVN 选择 | 快 |
| Native rollup | OP Stack canonical | 7-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)
面试题
-
Q: 为什么 zkBridge 比 multisig bridge 安全? A: Multisig bridge 的安全 = N-of-M 签名者诚实(社会工程脆弱)。zkBridge 安全 = ZK proof 数学正确(cryptographic)。理论上 zkBridge 不可被「钱拐走」,除非底层 hash / 配对函数被破解。Ronin/Wormhole 累计被盗 $1B+ 的事件不会发生在正确实现的 zkBridge 上。
-
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 主打通用计算。
-
Q: 为什么 Ethereum 适合做 zkBridge 的 source? A: Sync Committee 设计简化了 light client 验证:只要验证 512 个 validators 的 BLS aggregated sig,不用验证 1M+ validators 的全 attestations。BLS aggregation + ZK 友好。
-
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 化,给智能合约提供「无限算力」。