这篇文章概述了一个项目在零知识证明(ZK)电路集成、可信执行环境(TEE)生产就绪、应用层开发以及测试方面的下一步计划和已知问题。主要障碍包括Poseidon哈希函数在不同实现间的不一致、Solidity编译器栈深度限制以及noir-rs库的集成问题。
Noir ZK 电路存在于 (circuits/),但尚未集成到实时协议中。有三个问题阻碍了集成:
问题:Poseidon2 的输出在 Noir、Rust (zkhash) 和 Solidity 实现之间存在差异。已测试了多个实现(TaceoLabs、Aztec、HorizenLabs);没有一个能在所有三种语言中产生一致的输出。许多替代实现缺乏许可证或目标领域不同(例如,Goldilocks)。
建议修复:迁移到 Poseidon 1,使用已知兼容的实现:
| 平台 | 实现 | 许可证 | 状态 |
|---|---|---|---|
| Rust | arnaucube/poseidon-rs | Apache-2.0 | 未开始 |
| Solidity | iden3 circomlibjs poseidon_gencontract.js |
Apache-2.0/MIT | 初步调查 |
| Noir | noir-lang/poseidon | Apache-2.0 | 从 Poseidon2 切换到 Poseidon 1 API |
arnaucube/poseidon-rs 和 iden3 的生成器已知兼容。Noir 的兼容性需要验证。
步骤:
crates/common/ 中用 poseidon-rs 替换 zkhashPoseidon2T2.solcircuits/lib/src/merkle.nr 以使用 Poseidon 1 API问题:生成的 UltraHonk 验证器合约在使用 Foundry 编译时超出了 Solidity 的堆栈限制。同样的合约在 Remix IDE 中可以编译(不同的优化器设置),这表明是工具配置问题。
步骤:
via-ir 模式、优化器运行)与 Remix 默认设置的差异assembly (memory-safe) 注解来减少堆栈使用问题:zkmopro/noir-rs 可以独立用于证明生成和验证,但未作为 ProofClient 实现与 TEE 一起连接到 crate 工作区。
步骤:
noir-rs 并符合 ProofClient trait 的 ZkProofClientUserApp<P>,以便相同的应用程序代码适用于任一后端TEE 子系统在模拟模式下工作,但尚未在真实硬件上测试:
| 领域 | 状态 | 备注 |
|---|---|---|
| 正常路径(设置、支付、结算、最终确定) | 已测试 | crates/user/tests/e2e_integration.rs 中的端到端测试 (E2E) |
| 争议流程 | 未进行端到端测试 (E2E) | 合约单元测试已存在,但无集成测试 |
| 多通道 epoch 聚合 | 未测试 | 只测试了单个申领程序 |
| 结算中的错误/边界情况 | 未测试 | 仅涵盖正常路径 |
- 原文链接: github.com/ConorNethermi...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!