【Draft】Pod 提案:My first ZK-vote

1. 基础信息

  • 项目名称:my first ZK-vote
  • 负责人@Elon
  • 关联主线

2. 项目描述

What

整个教学网页分为五个部分:

  1. 介绍区块链交易 :介绍一个完整的区块链交易的如何发出并打包上链的,交易中包含什么数据和内容,如何在区块链上查看自己的交易信息;
  2. 介绍ZK-SNARKs的概念,并完整的一次依赖ZKSNAKRs的交易的过程;
  3. 引导用户体验一次完整L2链投票;
  4. 引导用户体验一次通过服务端生成证明提交到链上合约验证的过程;
  5. 对比两者投票过程的不同,gas费用和隐私性的不同;

Why

这个教学网页可以让用户学习到什么是区块链交易,什么是链上投票,什么是ZK,和ZK SNARKs,为后续组织投票上链奠定基础

How

整体采用 React + TypeScript 构建前端,Solidity 编写智能合约,Node.js 实现后端证明生成,结合 Circom/snarkjs 完成零知识证明相关功能

3. 资金申请

  • 联系方式:Wachat : CYL-Elon
  • 申请金额:400 USDT
  • 资金用途:本次申请为一次性激励,用于覆盖产品界面设计、前端开发实现、配置等核心环节的工作成本,保障项目按时落地。

4. Milestone 计划

(Milestone 审核通过后执行)

时长 交付结果

5. 项目需求(可选)

暂无

1 Like

双手支持!

1 Like

我正在做dapp的开发,如果有需要的话可以联系我帮忙制作

教学科普是对的

新的项目描述:

1. 基础信息

  • 项目名称:My First ZK-Vote
  • 负责人@Elon
  • 关联主线

2. 项目描述

What 什么

整个教学网页分为四个部分:

一、什么是区块链交易

  1. 介绍什么是区块链交易(图文描述,需要UI设计)
  • 区块链交易的定义
  • 区块链交易的特点
  • 交易与区块的关系
  1. 交易的生命周期
  • 详细流程详解
  1. 交易的组成部分(卡片展示)
  • 基本字段
  • 特殊交易类型
  • Gas与费用机制
  1. 不同共识下的交易确认差异
  • PoW(如比特币)
  • PoS(如以太坊合并后)
  • Rollup / L2(如 Optimism、zkSync)

二、什么是ZK(引用官方的介绍框架)

1、what is ZK ZK是多少

2、ZK的性质

3、ZK的分类

4、ZK的工作原理(加密机制,算法介绍,主要介绍ZKSNARKS的Groth16方案)

5、区块链上的应用(介绍一些优质项目,引申出投票)

  • 隐私交易 / 隐匿交易金额、交易双方:例如 Zcash 使用 zk-SNARK 来隐藏转账金额与地址信息。 Nervos Network+3Nervos Network+3Chainlink+3隐私交易 / 隐匿交易金额、交易双方:例如 Zcash 使用 zk-SNARK 来隐藏转账金额与地址信息。 Nervos Network 3Nervos Network 3Chainlink 3
  • 链下计算 + 链上验证(可扩展性):如 zk-Rollup 批量交易先在链下聚合计算,再生成一个 ZKP 在主链上验证。
  • 匿名投票 / 身份验证:用户可以证明自己有投票资格 / 身份特征,而不暴露具体身份。
  • 混合公私链 / 跨链验证:可用于验证跨链操作或混合链上链下操作正确性而不暴露细节。
  • 机密合约 / 隐私合约:使合约在执行过程中,部分数据保持私密

三、一次sepolia链上投票

1、页面展示一个投票选项,选择选项投票后提交到sepolia的合约中记录投票数据

2、页面返回交易TX,用户在区块链浏览器可查看投票交易数据

四、一次ZK-SNARKs投票

1、页面端存入数字电路(可用semaphore项目的电路文件),生成信用设置

2、用户选择选项,生成证明,提交sepolia链上(也可以是ZKSync测试链)

3、链上合约验证并统计数据

4、引导用户查看交易数据

Why 为什么

通过图文与交互动画,帮助用户从“理解区块链交易” → “体验普通投票交易” → “理解并体验 ZK 投票”的全过程,可以让用户学习到什么是区块链交易,什么是链上投票,什么是ZK,和ZK SNARKs,为后续组织投票上链奠定基础

How 如何

步骤 功能 前端技术栈 说明
:one: 教学讲解 交易流程讲解(非 3D、滑动交互) React + Framer Motion + D3.js + TailwindCSSReact Framer Motion D3.js 通过滑动(scroll-snap 或 Swiper.js)展示交易从创建到上链的过程。
:two: 钱包连接 用户连接 MetaMask wagmi + viem wagmi viem 引导用户连接钱包,检测网络是否为 Sepolia。
:three: 模拟投票 在 Sepolia 模拟提交投票 ethers.js + wagmi ethers.js wagmi 用户点击投票按钮,执行一次链上交易(Sepolia)。
:four: ZK 证明 客户端生成 ZK 证明 snarkjs + circomlibjs + WebAssembly (WASM)snarkjs circomlibjs WebAssembly (WASM) 用户本地生成 proof.json 与 publicSignals.json,不上传隐私数据。
:five: 证明上传 提交 proof 到 zkSync 验证合约 zkSync SDK + ethers.js + 自写合约zkSync SDK ethers.js 自写合约 调用 zkSync 上部署的验证器合约进行验证。
:six: 结果展示 展示投票结果或验证状态 React + Recharts / Chart.jsReact Recharts / Chart.js 可视化展示每个投票项的结果或用户的验证通过情况。

3. 资金申请

  • 联系方式:Wachat : CYL-Elon
  • 申请金额:暂定(工作量还需讨论)
  • 资金用途:本次申请为一次性激励,用于覆盖产品界面设计、前端开发实现、配置等核心环节的工作成本,保障项目按时落地。

4. Milestone 计划

(Milestone 审核通过后执行)

时长 交付结果
30days 30天 初步demo
15days 15天 测试

5. 项目需求(可选)

建议不要用 ethers.js 了,直接用 viem + wagmi 就行(因为 wagmi 也是 viem 的团队开发的,底层依赖了 viem),两个功能一样的库(etherjs、viem)在一个代码库里,容易造成混乱。而且 viem 是类型安全的,只要传入 abi 能自动解析成正确的类型,在 buildtime 就能找出错误的地方,之后 vibe coding 也不容易错。

很好的建议,我后面会做修改

支持,很好的想法!

感觉最核心的部分还是动画交互的部分。

@CYL12345 你该把研究报告也放过来,加强你做这一部分的权威性。

1. 基础信息

  • 项目名称:My First ZK-Vote
  • 负责人@Elon
  • 关联主线

2. 项目描述

What

整个教学网页分为四个部分:

一、什么是区块链交易

  1. 介绍什么是区块链交易(图文描述,需要UI设计)
  • 区块链交易的定义
  • 区块链交易的特点
  • 交易与区块的关系
  1. 交易的生命周期
  • 详细流程详解
  1. 交易的组成部分(卡片展示)
  • 基本字段
  • 特殊交易类型
  • Gas与费用机制
  1. 不同共识下的交易确认差异
  • PoW(如比特币)
  • PoS(如以太坊合并后)
  • Rollup / L2(如 Optimism、zkSync)

二、什么是ZK(引用官方的介绍框架)

1、what is ZK

2、ZK的性质

3、ZK的分类

4、ZK的工作原理(加密机制,算法介绍,主要介绍ZKSNARKS的Groth16方案)

5、区块链上的应用(介绍一些优质项目,引申出投票)

  • 隐私交易 / 隐匿交易金额、交易双方:例如 Zcash 使用 zk-SNARK 来隐藏转账金额与地址信息。 Nervos Network+3Nervos Network+3Chainlink+3
  • 链下计算 + 链上验证(可扩展性):如 zk-Rollup 批量交易先在链下聚合计算,再生成一个 ZKP 在主链上验证。
  • 匿名投票 / 身份验证:用户可以证明自己有投票资格 / 身份特征,而不暴露具体身份。
  • 混合公私链 / 跨链验证:可用于验证跨链操作或混合链上链下操作正确性而不暴露细节。
  • 机密合约 / 隐私合约:使合约在执行过程中,部分数据保持私密

三、一次sepolia链上投票

1、页面展示一个投票选项,选择选项投票后提交到sepolia的合约中记录投票数据

2、页面返回交易TX,用户在区块链浏览器可查看投票交易数据

四、一次ZK-SNARKs投票

1、页面端存入数字电路(可用semaphore项目的电路文件),生成信用设置

2、用户选择选项,生成证明,提交sepolia链上(也可以是ZKSync测试链)

3、链上合约验证并统计数据

4、引导用户查看交易数据

Why

通过图文与交互动画,帮助用户从“理解区块链交易” → “体验普通投票交易” → “理解并体验 ZK 投票”的全过程,可以让用户学习到什么是区块链交易,什么是链上投票,什么是ZK,和ZK SNARKs,以后ZK技术会是隐私审计和个人ID的重要技术,让大家提前了解何为ZK,为后续组织投票上链奠定基础

How

步骤 功能 前端技术栈 说明
:one: 教学讲解 交易流程讲解(非 3D、滑动交互) React + Framer Motion + D3.js + TailwindCSS 通过滑动(scroll-snap 或 Swiper.js)展示交易从创建到上链的过程。
:two: 钱包连接 用户连接 MetaMask wagmi + viem 引导用户连接钱包,检测网络是否为 Sepolia。
:three: 模拟投票 在 Sepolia 模拟提交投票(真实上链) viem 用户点击投票按钮,执行一次链上交易(Sepolia)。
:four: ZK 证明 客户端生成 ZK 证明,使用groth16 snarkjs + circomlibjs + WebAssembly (WASM) 用户本地生成 proof.json 与 publicSignals.json,不上传隐私数据。
:five: 证明上传 提交 proof 到 zkSync 验证合约 zkSync SDK + ethers.js + 自写合约 调用 Sepolia 上部署的验证器合约进行验证。
:six: 结果展示 展示投票结果或验证状态 React + Recharts / Chart.js 可视化展示每个投票项的结果或用户的验证通过情况。

3. 资金申请

  • 联系方式:Wachat : CYL-Elon
  • 申请金额:暂定
  • 资金用途:本次申请为一次性激励,用于覆盖产品界面设计、前端开发实现、配置等核心环节的工作成本,保障项目按时落地。

4. Milestone 计划

(Milestone 审核通过后执行)

时长 交付结果
30days 90工时 整套页面+数字电路+合约验证成品

5. 项目需求(可选)

**6.当前小组成员:Elon 、Draken 、苏

研究报告:Notion

1 Like

有个idea:不如把这个APP扩展成一期残酷共学?

课程设计:

  1. 周期为一个月
  2. 每周一节课
  3. 中间穿插两次workshop
    1. 主流zk应用的操作课
    2. 最简单zk应用的开发课。
  4. 准备一到两次space,邀请从业者解读隐私最新进展(Brevis、TEE、ZK等)
  5. 最后用本应用投票,表决课程质量
  6. (可选)组织一次CasualHackathon,进一步激发开发者的想象力

为了支持以上项目,需要:

  1. 增加申请资金,不超过1ku。相对于现在的scope,额外部分用于支持课程设计、workshop设计、运营同学bounty等等。
  2. 寻求 LXDAO 及 ETHPanda 宣发支持
  3. 寻求BD支持

各方利益:

  1. 项目本身:大家能学习得更加充分,切入方式也更加丰富(不只10分钟玩一下网站,更能知道其原理,并能在经过一个月的充分思考之后,真正用项目投一次有意义的票)
  2. 参与工作的同学们:zk这个热门话题相关的实战工作经验。
  3. LXDAO:在 ERC8004 共学之外,及时把握潜在热点,凸显技术驱动公共物品的理念。同时借此机会与最新的zk从业者建立联系。

相信有之前实习计划的铺垫和人才储备,以及各种BuildPath suite的支持,这个事情没有想象的困难。

1 Like

我也有这个想法,ZK残酷共学是十分有前景的一次共学,包括ZKID,和ZK和8004的结合都很有许多应用场景,现在很多Defi也在强调隐私审计,不过ZK是有一定入门门槛的技术,设计密码学和一些算法,这样的课程设计需要比较详细的规划同时也需要很多资源,我是想先做一个这样的入门网页,最后这个网页也会是ZK残酷共学的入门的一环,ZK这个学习一定会是长期的,后续还可以细分应用场景

挺有可行性的一个方案。特别还是前面还有教学讲解这个(这个倒是日常开发容易忽略问题)。

仔细看了一下,还是有一些难点问题可能需要注意:

  • Groth16 需要 per-circuit trusted setup(proving key / verification key)。若使用现成的 Semaphore 电路,需要确保 zkey 的来源可信。
  • 在 EVM 上验证 Groth16 证明需要 pairing 运算(BN254 等),合约很大、gas 消耗高。大量单次验证会非常昂贵。(当然只是测试链演示无所谓,但是都需要考虑)。

最后还有一个问题,回到原点应用场景与成本问题了。

证明上传 提交 proof 到 zkSync 验证合约 zkSync SDK + ethers.js + 自写合约 调用 Sepolia 上部署的验证器合约进行验证。

这儿利用第三方服务呢?还是自建中心化后端(Server-Assist)。如果整个项目不是客户端直接证明上链的化。其实都可以没必要上ZK了。有个后端弄简单判断一下。就完了。(当然这是场景与成本问题)。
上ZK的链上确认投票场景,其实还应该有一些配套才是。比如某种意义只能是比较严肃的正式提案级投票才会用的。不然真的多人投票烧的GAS都不少。

如果类似临时事务一些快速表态性投票场景。就没必要这么做。
可搞简单点:用户先提交资格证明(链上地址证明)给在 Docker 封闭容器 + TEE(如 SGX,整个容器持有hash比对验证有效性与安全性、匿名性) 中运行的资格颁发器(Issuer);Issuer 在 TEE 内执行盲签协议(Chaum 风格或 BLS-based blind sig),只向合格用户返回不可追溯的一次性匿名 token,且不在外部持久化对应关系或敏感日志。持 token 的用户通过 relayer 提交 vote + token,投票接收端在同一 TEE 或链下受保护环境中验证 token 有效性并检查其是否已被使用(防双投),合格票计入本地 tally;投票期结束后,TEE 对聚合结果签名并提供远程 attestation(可供第三方验证),然后将汇总 tally 一次性上链——因此前端用户无需支付 gas(0gas 体验),链上仅记录不可反推的汇总结果。优点是极低的链上成本与在合理信任下的高匿名性。估计这个都复杂了。也许本来就是封闭可信环境,签名,验证签名,+1+1,反馈简单事情。
不过这么就挺不web3了,也没什么ZK事了。

确实,从成本角度来看,TEE + 盲签 + Relayer 的组合要明显优于纯 ZK 方案,但这种架构的中心化程度太高,不符合我们想要传达的 Web3 精神。

我们这次的目标是做一个 ZK 教学项目,希望让参与者*亲身体验到真正“链上抗审查、可验证”的 ZK 投票流程**。如果仅依赖可信服务器或 TEE,就失去了 ZK 的本质“去信任”特性,也就不够酷了。

至于 Gas 成本,我们确实不需要太担心——除了可以直接使用测试链(几乎零成本)外,我也考虑过将证明验证的计算压力放到更经济的环境中,比如:

  • 在 zk-rollup 的验证网络*或
  • 专门的验证层(如 zkVerify)

上执行 ZK proof 的验证,只把最终的聚合证明或状态承诺(commitment)回传到 L1 或目标链。这样既能保留全链上可验证性,又能显著降低验证成本。

当然,考虑到这是一个教学示例,选择对应的 L2 测试链来部署会更合理零成本、全链上、体验完整、去信任程度高,同时更好地展示 ZK 的实际应用价值

1 Like

I am a builder card holder, I second this proposal.

I am a builder card holder, I second this proposal.

I am a builder card holder, I second this proposal.

加油,看好你们哦!
忘记了,这玩意用cairo写,比solidity写简单得多。