# Mina Docs｜Snapp：SNARK 驱动的应用程序

By [MinaWallet](https://paragraph.com/@minawallet) · 2021-11-18

---

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

\*\* Snapp = 去中心化应用（Dapps）+ 隐私（隐私）+ 脱链数据（链下数据）+ 可扩展性（可扩展性）\*\*

世界上最轻支持的一个区块链，Mina 是一个全新的应用类别，世界 Snapps3：Snark 化的应用。Snapps 在功能上与以太坊坊上的 Dapp 相似，但由于同一特定的属性，Snapp 更胜一筹：

1.  在不披露数据的情况下验证数据的通知。
    
2.  验证使用计算的正确执行。
    
3.  重要的可损害性的好处。
    

这些类型的应用特别是新的，在它们，它们都存在于当今的区块链中：ZCash 伴随着属性 1 的 Snapp，Mina 伴随着属性 2 的 Snapp。

Snapp 也比以太坊上的 Dapp 高效执行。为了让这个坊以太计算机向其用户承诺 Dapp，网络上的节点和矿工必须运行相同的计算。这非常低效。对于 Mina 上 Snapp，Snapp 是由它开发的人员执行一次，之后所有其他节点都可以验证相关的SNARK证明。 人们可以对以太坊上的SNARK驱动的2个Dapp进行同样的演示层，但是这些Dapp仍然受到限制的破坏，而米娜上坊斯内普米娜米娜一点链的特性，具有可开发性的潜力。

一个Snapp上的Mina有以下工作流程：

1.  确定要运行的代码，如果没有报道，就发布它
    
2.  使用下面的代码通过对 Mina 的函数调用来部署一个 SNARK 电路
    
3.  获取要在其上执行计算的数据
    
4.  使用相关数据调用函数
    
5.   运行在链上，后计算智能【在主网6-12个月就可以完成】
    
6.  将函数返回的 SNARK 证明附加到 Mina 地址
    
7.  Mina可知SNARK证明的结果执行事务
    

**技术概述**

按照现在的设计，米娜的斯内普功能将工作如下。

*   将有一种新的账户，称为“p 账户”，除了公钥和余额之外，Snap 还将包含一个 Pickles 的 ARK 验证密码 K 和一个状态 S，由多个元素组成。
    
*   将会出现一种这种“单一的Snapp 事务”的新型事务。将支持其与标准帐户之间的快速，以及更新Snapp 的状态。
    
*   一个标准账户地址：一个标准的账户地址
    
*   一个Snapp账户地址：一个Snapp账户地址
    
*   A signed amount "snapp\_account\_delta" which represents the change in balance for the Snapp account：表明 Snapp 账户余额变化的已署名“snapp\_account\_delta”数量
    
*   An optional proposed new state "snapp\_new\_state" for the Snapp account：对于一个 Snapp 账户可供选择的建议的新状态“snapp\_new\_state”
    
*   If snapp\_acount\_delta > 0, a signature on the transaction from the standard account：如果 snapp\_account\_delta 大于 0，标准账户上产生一笔签名事务
    
*   A Pickles SNARK proof which should verify (with the Snapp account's verification key) against a statement including：一个需要反证以下陈述的 Pickles SNARK 证明：
    
*   snapp\_account\_delta : SignedAmount
    
*   snapp\_prev\_state : Array
    
    *   snapp\_new\_state : Array
        
    
    应用该事务的结果将按照指示更新 Snapp 的状态，通过 snapp\_acount\_delta 修改 Snapp 的余额，通过 - snapp\_account\_delta 修改标准账户的余额。
    
    *   将会有一种新的事务叫做“双 Snapp 交易”。这将允许同时更新两个 Snapp 账户的状态（并在两者之间转移资金）。
        
    *   它将包含
        
    *   A Snapp account address "address1"：一个 Snapp 账户“address1”
        
    *   A Snapp account address "address2"：一个 Snapp 账户“address2”
        
    *   A signed amount "account1\_delta" which represents the change in balance for the first account：表明第一个账户余额变化的已签名“account1\_delta”数量
        
    *   Two optional proposed new states "account1\_new\_state" and "account2\_new\_state"：两个 Snapp 账户可供选择的建议的新状态“account1\_new\_state”和“account2\_new\_state”
        
    *   If snapp\_acount\_delta > 0, a signature on the transaction from the standard account：如果 snapp\_account\_delta 大于 0，标准账户上产生一笔签名事务
        
    *   Two Pickles SNARK proofs proof1, proof2, which should for i = 1, 2 should verify (with account i's verification key) against a statement including：两个需要证明以下陈述的 Pickles SNARK 证明：
        
    *   account1\_delta : SignedAmount
        
    *   account1\_prev\_state : Array
        
        *   account1\_new\_state : Array
            
            *   account2\_prev\_state : Array
                
                *   account2\_new\_state : Array
                    
                
                应用该交易的结果将是按照指示更新两个帐户的状态，用 account1\_delta 修改 account1 的余额，用 -account1\_delta 修改 account2 的余额。
                
                O(1) Labs 目前正在为应用开发者开发工具，包括现有的 snarky 等工具，以便轻松开发 Snapp，只需点击一个按钮，就可以计算所需的 SNARK 证明。该工具将与 Mina 兼容，为 Snapp 提供一种获得状态和财务价值的简单方式。
                
                让我们通过几个例子来展示 Snapp 的真正力量
                
                **例子**
                
                **例 1：信用评分证明**
                
                **价值定位**：向借款人提供一种方式，证明他们的信用评分高于某个阈值，而无需披露信用评分，从而能够在不提供任何抵押品的情况下借入资金。
                
                **示例用户流**：
                
                *   用户访问贷款人网站
                    
                *   要求从 CreditKarma 等信用评分提供者下载加密签名的信息
                    
                *   网站本地检查信用评分是否超过阈值，并计算 SNARK 证明返回结果
                    
                *   SNARK 证明和结果附在用户的 Mina 地址上，与贷款人云系统共享（也可以是智能合约）
                    
                *   Lender 验证 SNARK 证明和阈值是否通过
                    
                *   如果它符合标准，提供稳定币贷款给 Mina 地址
                    
                
                **如何使用 Snapp 工具集**：Snapp 的开发者使用工具集集成一个特定的项目，用户下载一个从供应商签订的信用评分，检查用户的计算机上本地的分数是否达到标准，和本地产生的证据检查，随后与开发者共享。该工具集还在幕后为用户提供 Mina 地址，它为 Mina 上通过区块序号的计算提供时间戳。他们还使用工具集将 SNARK 验证器集成到自己的后端，以确认本地计算的正确的性。
                
                **例 2：真实身份证明文件**
                
                **价值定位**：证明 Mina 地址的所有者可以访问一个真实的身份文件（如驾驶执照），而不披露文件本身，从某个区块高度开始。身份文档的有效性将由一个标准化的开源算法进行检查。
                
                **示例用户流**：
                
                *   用户访问网站，下载应用程序到笔记本电脑或手机
                    
                *   使用 app 扫描 ID，验证其真实性
                    
                *   App 还为用户创建 Mina 钱包
                    
                *   应用程序关联 SNARK 证明与用户的 Mina 地址，以及 ID 的照片散列
                    
                *   用户访问另一个要求提供真实身份的网站。是否能够共享 ID 证明，以及他们的 ID 的散列，以确认他们的 Mina 地址拥有一个真实的 ID
                    
                
                **Snapp Toolset 如何使用**：Snapp Toolset 为开发者提供了一个 SDK，可以将 SNARK 证明生成器和哈希生成器嵌入到他们的应用程序中，以及一个 Mina 接口。Snapp toolset 还为其他开发者提供了 SNARK 验证器来验证上述 ID 身份验证。
                
                **例 3：Coinbase 余额的证明**
                
                **价值定位**：向第三方提供属于特定电子邮件的 Coinbase 账户的资金符合特定标准（如 > $10,000）的证明，但不披露实际存款金额。
                
                **示例用户流**：
                
                \*
                
                *   用户访问一个借贷应用程序。为了借入资金，账户中至少拥有超过 10,000 美元的比特币。
                    
                *   用户 OAuths 到他们的 Coinbase 帐户
                    
                *   该网站在本地检查用户的余额和电子邮件，都是用 Coinbase 的密钥签名的
                    
                *   网站本地生成的 SNARK 证明，用户的余额 > $10,000
                    
                *   SNARK 证明是附加到用户的 Mina 地址
                    
                *   用户使用他们的 Mina 地址签署他们的 SNARK 证明的所有权，并与借贷应用程序的后端共享他们的 Coinbase 帐户的电子邮件地址。
                    
                
                **Snapp工具集的使用方式**：Snapp的开发者使用工具集来集成一个特定的，该程序将用户OAuth集成到Coinbase的账户中，查询他们的账户已注册签名的余额信息、账户的电子该工具集允许在本地生成 SNARK 证明，而不是与服务提供的公开共享任何信息，因此所有的余额信息都是合法工具的。开发人员使用集集将 SNARK 验证器集成到自己的副本，以确认计算本地的有效性。
                
                **例4：非公开投票**
                
                **价值定位**：允许一组用户的选民（如拥有超过100名粉丝的任何推特账户）进行私下投票，而不让他们选择以及他们投票的目标。完成投票期结束，任何人都可以验证整个投票的结果。
                
                **示例用户流**：
                
                \*
                
                *   用户可以通过展示他们成功登录twitter.com的HTTPS记录来证明一个账户的身份验证和投票，他们将证明（橙色的公共输入），“我知道一个密码为P的账户A和一个有效的登录”记录 (A, P) 和哈希 (A, P) = N，我的投票是选项 V”。投票。
                    
                *   在一个完全去中心化的模式下，用户可以使用这个证明来更新米娜链上的选择应用程序的状态。
                    
                *   在上升的知识下、部分去中心化模式中，用户将他们的零知识证明发送到一个证明聚合器，该聚合器维护选择状态，然后将聚合证明聚合成一个捆绑的证明，然后将发布到米娜链。
                    
                *   在查看选择结果时，用户获得了主要的 Mina 区块链证明，该证明了整个 Mina Merkle 树的有效性，包括与选择状态对应的叶子。他们还获得了进入这片叶子的 Merkle 路径，这样就可以查看其状态。
                    
                
                **其他的看法**
                
                Snapp 的设计空间是巨大的，随着框架被更好地理解，创业者们想提出许多其他创新的想法。我们的其他一些例子：
                
                *   使用身份证明文件的年龄证明
                    
                *   使用身份证明文件的公民身份
                    
                *   银行账户证明
                    
                *   没有做某活动的证明，部分例如链地址与特定身份相关联没有将钱发送到黑名单地址，没有披露地址
                    
                *   对文件的有限修改的证明，例如调整一张有效照片的大小
                    
                
                **下一步和社区参与**
                
                O(1) Labs 正在努力构建 Snapp 工具集，这件衣服的例子在 Mina 一小段上链成为可能，并与有能力的开发合作构建第一个概念实现证明。

---

*Originally published on [MinaWallet](https://paragraph.com/@minawallet/mina-docs-snapp-snark)*
