ZKP2P 资助提案
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。
假设
- 出金者是经验丰富的参与者,这意味着他们比入金者拥有更多资金,了解 DeFi 机制,并更密切地监控链上活动
- 入金者的经验较少,希望以最少的操作完成资金入金。这意味着需要隐藏复杂性或将复杂性转移给出金者(例如证明生成)
- 出金者有动力代表入金者生成收到付款的电子邮件证明。这意味着入金者完全不接触证明生成,从而立即开启移动端入金体验
- 入金者的 EOA 中已经拥有 Gas Token,或者通过自定义的 EIP4337 Paymaster 集成完成了无 Gas 入金
高层级流程 - 正常路径

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

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

智能合约 - Ramp.sol
Ramp 是一个单例合约,为系统中不同的参与者提供端点,以便彼此进行去信任的协调。我们将为构建的每个新支付用例提供单一合约。
我们从 Binance P2P 流程中汲取灵感。关键功能包括:
- 出金者
- 存入流动性:在智能合约中存入加密货币
- 提取流动性:将加密货币退还给用户。正在进行中(已发出意向信号)的流动性无法提取。
- 结算入金(出金者):生成收到付款的证明,从而向入金者发放资金。入金者同意支付的费用百分比是他们的激励动力
- 入金者
- 表达意向:入金者提交意向交易以锁定订单并在链下发送 Venmo 交易。这可以防止竞态条件。一旦入金者表达意向,出金者在表达意向期限到期前无法提取流动性。
- 结算入金(入金者):如果出金者恶意或懒惰,入金者也可以通过生成支付电子邮件证明来结算订单。作为补偿,费用百分比将作为返利发送给入金者
- 所有用户
- 通过提交 Venmo 支付证明电子邮件进行注册。这将公开地址与唯一标识符(Venmo ID 的哈希值)绑定
- 允许列表和阻止唯一的普通用户 ID。这允许出金者指定他们是否只想与特定的 Venmo ID 进行交易(例如,我只想与 Vitalik 交易)
智能合约 - Verifier.sol
Verifier 合约用于使用 Groth16 证明系统验证 zk-SNARK 证明。当我们过渡到使用 halo2-zk-email 模板时,这将升级为 halo2。它由主 Ramp 合约扩展。
电路 - 出金者接收付款电路
出金者生成 Venmo 收到付款电子邮件证明的主电路
- 验证 DKIM 签名 (RSA, SHA256)
- 从电子邮件中提取 Venmo 付款人 ID、付款时间
- 包含 Nullifier 以防止重放攻击
- 包含其他订单信息,将证明与订单 ID 绑定以防止抢跑
| 正则表达式配置 | 描述 |
|---|---|
| 入金者正则表达式 | 从收到付款的电子邮件正文中提取 Venmo 付款人 ID |
| 时间戳正则表达式 | 从 Venmo 收到付款的电子邮件标头中提取时间戳 |
电路 - 入金者发送付款电路
如果出金者未能生成上述证明,入金者用于生成支付证明的主电路
- 验证 DKIM 签名 (RSA, SHA256)
- 提取 Venmo 交易的收款人 ID 和金额
- 包含 Nullifier 以防止重放攻击
- 包含其他订单信息,将证明与订单 ID 绑定以防止抢跑
| 正则表达式配置 | 描述 |
|---|---|
| 出金者 ID 正则表达式 | 从发送付款的电子邮件正文中提取 Venmo 收款人 ID |
| 金额正则表达式 | 从 Venmo 发送付款的电子邮件标头中提取发送的 $ 金额 |
电路 - 注册电路
入金者和出金者都用于将特定的 Venmo ID 哈希绑定到其公开地址的主电路
- 验证 DKIM 签名 (RSA, SHA256)
- 提取正在注册的用户的 Venmo ID,并对打包的 ID 进行哈希处理以用作标识符
| 正则表达式配置 | 描述 |
|---|---|
| ID 正则表达式 | 从发送/接收付款的电子邮件正文中提取 Venmo 付款人/收款人 ID |
应用 - S3 实例
在服务器中托管证明密钥及配套脚本以供下载到本地存储。将使用修改后的 zk-email 脚本
应用 - 入金者流程
希望将 Venmo USD 交易为加密货币的入金者的 UI 流程
- 自动向入金者显示给定输入金额的最佳汇率,并具有浏览订单的辅助功能
- 入金者只需执行 1 个操作即可向出金者发起 Venmo 交易
应用 - 出金者流程
希望将加密货币交易为 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
里程碑 1 - 入金流程和客户端设计
预估工期: 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 - 恶意出金者的回退流程
预估工期: 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 组件,根据输入金额自动显示最佳汇率。实现订单意向交易组件。 |
里程碑 3 - 注册流程
预估工期: 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 哈希条目的组件。实现电子邮件证明生成组件。 |
里程碑 4 - 客户端证明和可升级性
预估工期: 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 生成证明。 |
里程碑 5 - 证明聚合服务、QA 与部署
预估工期: 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 电路的审计。在发布到生产环境之前,可能需要额外的资金和协调来完成此步骤。
补充信息
目前已完成哪些工作?
V0 - 黑客松 PoC(已完成)
目标
- 在 ZKHack Lisbon 期间完成了 Venmo P2P 入金通道的开发
- 展示可以在一个周末内构建一个端到端的 PoC
要求 / 功能
- 集成了 Venmo 作为首个 P2P 支付服务
- 基于 Circom ZK-Email 电路构建
- 使用 RapidSnark 在服务器中生成证明
- 将演示部署到 Goerli
局限性 / 问题
- 需要受信任的服务端证明生成。电路未优化:超过 800 万个约束,而 ZK-Email 中的 Twitter 验证电路仅为 300 万个
- 无隐私保护,所有 Venmo ID 均暴露并与公开的 ETH 地址绑定
- 未解决从 0 到 1 的入金问题;用户必须已在链上拥有 ETH Gas 才能提交证明以解锁托管的 USDC
- 机制中未考虑边界情况(例如退单、注入攻击、电子邮件模板更新)
V1 - 保护 Venmo 用户 ID 隐私的 PoC alpha 部署(进行中)
目标
- 解决 V0 中 Venmo 用户 ID 的隐私问题,这是用户在平台上进行真实价值交易的必备功能
- 部署到主网以展示可以转移真实价值,尽管带有严格限制和管理员控制
要求 / 功能
- 重新构建了支付流程,将入金者和出金者之间的 Venmo ID 隐私保护作为首要任务。高层级流程:
- 入金者发布带有希望交易金额的订单。
- 出金者为订单投标,并在链上发布其费率和加密后的 Venmo ID。
- 入金者选择其中一个 Venmo ID 并发起链下 Venmo 付款。
- 入金者提交证明、公共输入和订单以检索 USDC
- 客户端证明
- 新流程将约束从 880 万减少到 660 万
- 在 UI 中连接了分块 zkey 流程
安全
- 增加管理员暂停交易/协议的功能,以减轻意外的边界情况(例如 DKIM / 电子邮件模板变更)
- 增加覆盖正常路径和已知边界情况的测试
局限性 / 问题
- 客户端证明速度仍然太慢
- 未解决从 0 到 1 的入金问题;用户必须已在链上拥有 ETH Gas 才能提交证明以解锁托管的 USDC
- 机制中未考虑边界情况(例如退单、注入攻击、电子邮件模板更新)
- 我们目前选择的 Nullifier(电子邮件的 SHA)允许支付服务对用户进行去匿名化
未来研究
- 入金 AMM 与当前订单簿设计的对比
- 检测和防止欺诈/边界情况的其他机制
- 防止 Venmo 或其他 P2P 支付服务关闭使用我们服务的账户
- 可升级性(例如 DKIM 签名、电子邮件模板)与去中心化之间的权衡
- 安全的 Nullifier
- 跨链 Nullifier
- 对 Venmo 隐藏电子邮件哈希
- 原文链接: hackmd.io/R0QW7X4UQCSsZ4...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~