ZKP2P 是一个基于零知识证明(ZK)和 DKIM 邮件签名的去中心化法币入金协议,支持与 Venmo 等 Web2 支付工具进行无需信任的 P2P 交互。该项目利用 ZK-Email 技术在保护隐私的前提下验证链下付款邮件,从而触发链上资产的自动释放,解决了加密货币入金的去中心化与隐私问题。
项目 ZKP2P
ZKP2P 是一个保护隐私且去信任的 P2P 法币入金通道,可与所有流行的 web2 支付渠道(例如 Venmo)互操作。该网络由支付确认电子邮件中 DKIM 签名的 ZK 证明驱动,这允许与任何 web2 支付网络进行无许可集成。我们基于 0xParc / PSE ZK-Email 库,在不泄露敏感信息的情况下证明电子邮件的内容。在链下支付成功并生成相应的证明后,用户可以去信任地解锁链上的托管资产。
我们设想 ZKP2P 的最终状态是一个部署在 Ethereum / L2s 上的去信任协议或原语,新的支付用例可以无许可地构建在其之上,并与 DeFi、NFT 或其他系统组合。我们相信 ZK 是加密领域的下一个从 0 到 1 的跨越,基于这项技术可以构建许多我们尚未想象到的应用。通过这笔资助,我们希望通过优化入金者的 UX(想象 Uniswap 的 UX)使 ZKP2P 达到生产级水平,达到与中心化入金通道的功能平价,并成为首个在生产环境中构建在 ZK-Email 之上的应用。P2P 入金通道根据司法管辖区的不同处于灰色地带,且传统上是封闭的生态,因此保持去中心化、无许可和公共物品属性至关重要。
对于我们的项目,技术栈由端到端协议组成,包括电路、智能合约和 UI。
假设
高层级流程 - 正常路径

高层级流程 - 恶意或懒惰的出金者

高层级流程 - 账户注册(恶意的入金者)

智能合约 - Ramp.sol
Ramp 是一个单例合约,为系统中不同的参与者提供端点,以便彼此进行去信任的协调。我们将为构建的每个新支付用例提供单一合约。
我们从 Binance P2P 流程中汲取灵感。关键功能包括:
智能合约 - Verifier.sol
Verifier 合约用于使用 Groth16 证明系统验证 zk-SNARK 证明。当我们过渡到使用 halo2-zk-email 模板时,这将升级为 halo2。它由主 Ramp 合约扩展。
电路 - 出金者接收付款电路
出金者生成 Venmo 收到付款电子邮件证明的主电路
| 正则表达式配置 | 描述 |
|---|---|
| 入金者正则表达式 | 从收到付款的电子邮件正文中提取 Venmo 付款人 ID |
| 时间戳正则表达式 | 从 Venmo 收到付款的电子邮件标头中提取时间戳 |
电路 - 入金者发送付款电路
如果出金者未能生成上述证明,入金者用于生成支付证明的主电路
| 正则表达式配置 | 描述 |
|---|---|
| 出金者 ID 正则表达式 | 从发送付款的电子邮件正文中提取 Venmo 收款人 ID |
| 金额正则表达式 | 从 Venmo 发送付款的电子邮件标头中提取发送的 $ 金额 |
电路 - 注册电路
入金者和出金者都用于将特定的 Venmo ID 哈希绑定到其公开地址的主电路
| 正则表达式配置 | 描述 |
|---|---|
| ID 正则表达式 | 从发送/接收付款的电子邮件正文中提取 Venmo 付款人/收款人 ID |
应用 - S3 实例
在服务器中托管证明密钥及配套脚本以供下载到本地存储。将使用修改后的 zk-email 脚本
应用 - 入金者流程
希望将 Venmo USD 交易为加密货币的入金者的 UI 流程
应用 - 出金者流程
希望将加密货币交易为 USD 的出金者的 UI 流程
我们已经在 4 月份为 ZKHack 构建了一个可运行的端到端 Venmo 流程作为 PoC,并最终成为黑客松的获胜者之一。我们目前正在对 PoC 进行一些更新,以解决之前的一些局限性,并将其 alpha 版本部署到 L2。本资助提案针对的是遵循上述规范的更新版本,我们计划在该版本中解决大部分局限性和问题,并将安全协议部署到生产环境。有关先前研究和工作的更多详细信息,请查看底部的补充信息部分。
| 团队 | 电子邮件 | Telegram |
|---|---|---|
| Richard | richardliang2015@gmail.com | @richard2015 |
| Sachin | 0xsachink@gmail.com | @Sachin0x |
| Alex | alexsoong91@gmail.com | @asoong |
| Brian | brian.weickmann@gmail.com | @bmwball56 |
我们都是 Set Labs 的现任或前任同事,我们曾在此构建链上 DeFi 资产管理产品。我们推出了一些受欢迎的链上指数,例如 DeFiPulse Index 和 ETH 2x Leverage Token,资产规模超过 7.5 亿美元。我们之前的经验主要在于实现生产级的智能合约和应用,自 4 年前开始构建 Set 以来,我们从未遭受过黑客攻击。最近,我们大部分时间都在各自进行 ZK 领域的开发。
预估总工期: 10 周(暂定)
全职等效 (FTE): 根据里程碑,2-3 个 FTE
总成本: $55,000
预估工期: 2 周
FTE: 2
成本: $10,000
预估交付日期: 6/30/2023
| 编号 | 交付物 | 规范 |
|---|---|---|
| 1 | 文档 | 我们将提供电路和智能合约代码的行内文档。在报告中包含关于设计决策、详细机制以及正常路径中未缓解的潜在攻击的讨论。我们还将包含关于从 halo2 和 zk-email 学习过程中的基准测试和心得报告 |
| 2 | 测试 | 代码将具有完善的单元测试覆盖率(例如 90%),涵盖电路和智能合约,以确保功能和鲁棒性。在指南中,我们将说明如何运行这些测试 |
| 3 | 功能 - Ramp.sol 正常路径功能 | 智能合约实现入金流程:乐观注册(不涉及证明)、存入流动性、提取流动性、表达意向、结算订单(出金者流程) |
| 4 | 功能 - 出金者接收付款电路 | 使用 circom 构建的主电路,使出金者能够生成 Venmo 收到付款电子邮件的证明。验证 DKIM 签名 (RSA, SHA256)。从电子邮件中提取 Venmo 入金者 ID。包含 Nullifier 以防止重放攻击。包含其他订单信息,将证明与订单 ID 绑定以防止抢跑。 |
| 5 | 功能 - Venmo 入金者 ID 正则表达式支持 | 使用 zk email 生成的 Chips 配置,从 Venmo 付款电子邮件的主题正文中提取付款人(已付款的入金者)的 Venmo ID。 |
| 6 | 功能 - Venmo 提取电子邮件时间戳正则表达式支持 | 使用 zk email 生成的 Chips 配置,从 Venmo 收到付款的电子邮件标头中提取时间戳。 |
| 7 | UI 设置和设计 | 基础 UI react 应用设置。为包括非正常路径流程在内的各个页面创建设计。 |
设计示例:

预估工期: 2 周
FTE: 3
成本: $15,000
预估交付日期: 7/15/2023
| 编号 | 交付物 | 规范 |
|---|---|---|
| 1 | 文档 | 我们将提供 UI 代码的行内文档和基础教程,解释用户如何(例如)启动应用。应用上线后,将可以发送测试交易,展示新功能如何运作。 |
| 2 | 测试 | 代码将具有完善的单元测试覆盖率(例如 90%),涵盖电路和智能合约,以确保功能和鲁棒性。在指南中,我们将说明如何运行这些测试。 |
| 3 | 功能 - Ramp.sol 出金者不诚实处理 | 针对不诚实出金者的智能合约。存入流动性包括一项费用奖金,如果出金者未能在 x 分钟内提交证明,则入金者将获得此返利。结算订单(入金者回退流程)。 |
| 4 | 功能 - 入金者发送付款电路 | 如果出金者未能生成上述证明,入金者用于生成支付证明的主电路。验证 DKIM 签名 (RSA, SHA256)。提取 Venmo 交易的收款人 ID 和金额。包含 Nullifier 以防止重放攻击。包含其他订单信息,将证明与订单 ID 绑定以防止抢跑。 |
| 5 | 功能 - Venmo 金额正则表达式支持 | 使用 zk email 生成的正则表达式配置,从发送付款电子邮件的标头中提取发送的 $ 金额。 |
| 6 | Venmo 提取出金者 ID 正则表达式支持 | 使用 zk email 生成的正则表达式配置,从 Venmo 发送付款电子邮件的主题正文中提取收款人(被付款的用户)的 Venmo ID。 |
| 7 | 应用 - 入金者 UI 核心路径 | 入金 UI。实现初始 Uniswap 交易 UI 组件,根据输入金额自动显示最佳汇率。实现订单意向交易组件。 |
预估工期: 2 周
FTE: 2
成本: $10,000
预估交付日期: 7/31/2023
| 编号 | 交付物 | 规范 |
|---|---|---|
| 1 | 文档 | 我们将提供电路和智能合约代码的行内文档。在报告中包含关于此回退流程旨在激励解决的问题的讨论。 |
| 2 | 测试 | 代码将具有完善的单元测试覆盖率(例如 90%),涵盖电路和智能合约,以确保功能和鲁棒性。在指南中,我们将说明如何运行这些测试。 |
| 3 | 功能 - Ramp.sol 入金者不诚实处理 | 注册和允许/拒绝列表:智能合约为出金者增加功能,用于处理入金者在表达订单意向后未发送付款的情况。注册:入金者和出金者都需要提交支付证明电子邮件,将 Venmo ID 哈希与公开地址绑定。允许/拒绝列表:出金者可以选择阻止哪些 Venmo ID 哈希,或者愿意将哪些地址子集列入允许列表。 |
| 4 | 功能 - 注册电路 | 入金者和出金者都用于将特定的 Venmo ID 哈希绑定到其公开地址的电路。这可以减轻入金者表达意向但从不发送 Venmo 付款的恶意骚扰。因此,出金者的订单将被取消。提取正在注册的用户的 Venmo ID,并对打包的 ID 进行哈希处理以用作标识符。将 ID 和输出打包成信号供智能合约验证。 |
| 5 | 功能 - 提取用于注册的收款人 Venmo ID | 用于入金者和出金者将特定 Venmo ID 哈希绑定到其公开地址的正则表达式配置。提取正在注册的用户的 Venmo ID,并对打包的 ID 进行哈希处理以用作标识符。将 ID 和输出打包成信号供智能合约验证。 |
| 6 | 应用 - 出金者 UI 核心路径 | 出金 UI。为出金者实现发布订单的组件。为出金者实现查看进行中和历史订单的组件。为出金者实现向链上允许/拒绝列表添加/删除 Venmo ID 哈希条目的组件。实现电子邮件证明生成组件。 |
预估工期: 2 周
FTE: 2
成本: $10,000
预估交付日期: 8/15/2023
| 编号 | 交付物 | 规范 |
|---|---|---|
| 1 | 文档 | 我们将提供一个基础教程,解释用户如何(例如)启动应用。应用上线后,将可以发送测试交易,展示新功能如何运作。 |
| 2 | 测试 | 代码将具有完善的集成测试覆盖率(例如 90%),涵盖电路和智能合约,以确保功能和鲁棒性。在指南中,我们将说明如何运行这些测试。 |
| 3 | 功能 - 启用客户端证明生成 | 在公共 S3 存储桶中托管证明密钥及配套脚本以供下载到本地存储,从而实现客户端证明生成。将使用修改后的 zk-email 脚本。 |
| 4 | 功能 - 管理员可升级性以保护诚信入金者 | 增加管理员控制:电子邮件模板或 DKIM 签名会随时间变化。如果这些变化发生时订单正在进行中,则需要此功能以防止资金锁定在智能合约中。升级最初将由多签管理。受多签控制的入金资产上限。 |
| 5 | 功能 - 智能合约部署脚本 | 编写用于在任何链上部署智能合约协议的部署脚本。 |
| 6 | 应用 - 注册 UI | 入金者和出金者在使用协议前进行注册的 UI 流程。入金/出金者生成证明并提交给合约进行注册。 |
| 7 | 应用 - 在 UI 中启用客户端证明 | 从 S3 存储桶下载托管的证明密钥,并在浏览器中使用 wasm 生成证明。 |
预估工期: 2 周
FTE: 2
成本: $10,000
预估交付日期: 8/31/2023
| 编号 | 交付物 | 规范 |
|---|---|---|
| 1 | 博客文章和文档 | 关于贡献、当前局限性、未来改进以及在此协议之上构建用例的博客文章和文档。 |
| 2 | 测试 - QA | 全面的端到端测试,包括取消订单和入金者证明生成的辅助流程。与 PSE 和 zk-email 团队协调审计事宜(见下文)。 |
| 3 | 应用 - 服务端证明 | 托管证明服务并使用 RapidSnark。 |
| 4 | 应用 - 发送证明至聚合服务器 | 将客户端生成的证明转发至托管聚合服务的 UI 流程。 |
| 5 | 应用 - 入金者和出金者的辅助 UI 操作 | 端到端流程在 UI 中运行正常。额外的 UI 路径:出金者可以取消过期的订单。出金者可以选择使用证明服务生成证明。入金回退流程。 |
| 6 | 系统部署 | 部署生产环境,包括智能合约和证明服务。客户端将托管在 IPFS 上并配置到 zkp2p dns。 |
我们将根据 PSE 和 zk-email 团队的可用性,与他们合作进行电路审计。截至提交资助提案时,外部团队正专注于底层 zk-email 电路的审计。在发布到生产环境之前,可能需要额外的资金和协调来完成此步骤。
目标
要求 / 功能
局限性 / 问题
目标
要求 / 功能
安全
局限性 / 问题
- 原文链接: hackmd.io/R0QW7X4UQCSsZ4...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!