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 收到付款电子邮件证明的主电路

  1. 验证 DKIM 签名 (RSA, SHA256)
  2. 从电子邮件中提取 Venmo 付款人 ID、付款时间
  3. 包含 Nullifier 以防止重放攻击
  4. 包含其他订单信息,将证明与订单 ID 绑定以防止抢跑
正则表达式配置 描述
入金者正则表达式 从收到付款的电子邮件正文中提取 Venmo 付款人 ID
时间戳正则表达式 从 Venmo 收到付款的电子邮件标头中提取时间戳

电路 - 入金者发送付款电路

如果出金者未能生成上述证明,入金者用于生成支付证明的主电路

  1. 验证 DKIM 签名 (RSA, SHA256)
  2. 提取 Venmo 交易的收款人 ID 和金额
  3. 包含 Nullifier 以防止重放攻击
  4. 包含其他订单信息,将证明与订单 ID 绑定以防止抢跑
正则表达式配置 描述
出金者 ID 正则表达式 从发送付款的电子邮件正文中提取 Venmo 收款人 ID
金额正则表达式 从 Venmo 发送付款的电子邮件标头中提取发送的 $ 金额

电路 - 注册电路

入金者和出金者都用于将特定的 Venmo ID 哈希绑定到其公开地址的主电路

  1. 验证 DKIM 签名 (RSA, SHA256)
  2. 提取正在注册的用户的 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

团队网站

http://zkp2p.xyz/

团队经验

我们都是 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 隐私保护作为首要任务。高层级流程:
    1. 入金者发布带有希望交易金额的订单。
    2. 出金者为订单投标,并在链上发布其费率和加密后的 Venmo ID。
    3. 入金者选择其中一个 Venmo ID 并发起链下 Venmo 付款。
    4. 入金者提交证明、公共输入和订单以检索 USDC
  • 客户端证明
  • 新流程将约束从 880 万减少到 660 万
  • 在 UI 中连接了分块 zkey 流程

安全

  • 增加管理员暂停交易/协议的功能,以减轻意外的边界情况(例如 DKIM / 电子邮件模板变更)
  • 增加覆盖正常路径和已知边界情况的测试

局限性 / 问题

  • 客户端证明速度仍然太慢
  • 未解决从 0 到 1 的入金问题;用户必须已在链上拥有 ETH Gas 才能提交证明以解锁托管的 USDC
  • 机制中未考虑边界情况(例如退单、注入攻击、电子邮件模板更新)
  • 我们目前选择的 Nullifier(电子邮件的 SHA)允许支付服务对用户进行去匿名化

未来研究

  • 入金 AMM 与当前订单簿设计的对比
  • 检测和防止欺诈/边界情况的其他机制
  • 防止 Venmo 或其他 P2P 支付服务关闭使用我们服务的账户
  • 可升级性(例如 DKIM 签名、电子邮件模板)与去中心化之间的权衡
  • 安全的 Nullifier
    • 跨链 Nullifier
    • 对 Venmo 隐藏电子邮件哈希
  • 原文链接: hackmd.io/R0QW7X4UQCSsZ4...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
R0QW7X4UQCSsZ4X8pFergg
R0QW7X4UQCSsZ4X8pFergg
江湖只有他的大名,没有他的介绍。