# Snapps For Mina 项目分析4

By [Ethan - if(DAO)](https://paragraph.com/@ethan-if-dao) · 2021-12-16

---

零、项目背景
------

Mina 社区的 [minacrypto.com](http://minacrypto.com/) 在新网站 [snappsformina](https://snappsformina.com/)上发布了在训练营上出现的一些很酷的 Snapp 构想。

下面是 if(DAO) 对 ZKPass 项目的业务逻辑以及零知识zk-SNARK应用的浅析。

项目源码入口：[https://snappsformina.com/snapp/zkpass/](https://snappsformina.com/snapp/zkpass/)

一、ZKPass
--------

ZKPass是一个加密身份dapp，实现了“增删改查”中的增和改用户信息。

ZKPass也是一个基于Snapp智能合约的钱包，实现了资产的存入、取出和转账。

![](https://storage.googleapis.com/papyrus_images/bfb55cea76c9f888abeb7bfe615dd231237879b81c3a0cb556a6d7d36e9abcf0.png)

可执行的操作包括：

registerAccount()：新增用户的身份信息<姓名，邮箱>；

updateAccount()：修改用户的身份信息<姓名’，邮箱’>；

deposit()：向Snapp合约中存入MINA；

withdraw()：从合约中取出MINA；

transferToName()：根据注册名字进行转账。

二、ZKPass涉及的Snapp
----------------

传统的区块链转账会在链上形成一笔转账记录：From从谁，To转给谁，Amount多少钱，从而导致隐私泄露。

或者在Ethereum上发布一个Smart Contract，该合约用于记录 “ 知识：姓名、邮箱和存入的MINA数量 ”，由于该知识是上链的，所以导致隐私泄露。

ZKPass项目的做法是发布一个Snapp合约，合约实现了上述可执行的操作。用户可以将自己的 “ 零知识：姓名、邮箱和资产操作情况（存、取、转账）” 对应的Proof发送至链上，全网其他节点验证该客户的身份和对资产的存、取和转账是否合法，却不知道该客户的实际身份信息，也不知道该客户存了多少MINA、取了多少MINA、转账了多少MINA。

ZKPass代码未实现功能：“ 零知识：姓名、邮箱和资产操作情况（存、取、转账）” 生成Proof的过程，未实现。如图所示：

![](https://storage.googleapis.com/papyrus_images/8922afeb844b61ae842d780f659d63079ff8d2a1faa0747b008352ed62bdad34.png)

---

*Originally published on [Ethan - if(DAO)](https://paragraph.com/@ethan-if-dao/snapps-for-mina-4)*
