# Snapps For Mina 项目分析3

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

---

### 零、项目背景

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

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

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

### 一、Indian Poker

基本规则如下：各位玩家先下注，然后每人随机获得一张牌，显示给除他之外的所有其他玩家。各位玩家根据其他玩家的牌面决定加注或弃牌。

假设有3人参加游戏：A、B、C。3人分别获得了J、6、1的牌力。每轮每人下注100 MINA。

A看到B（6）、C（1），感觉概率上赢得机会大，所以加注 100 MINA。

B看到A（J）、C（1），感觉最近状态很好，决定拼一把，所以加注 100 MINA。

C看到A（J）、B（6），感觉概率上输得机会大，所以弃牌。

游戏进入到下一轮：A（J）、B（6）。2人继续游戏。

A和B都信心满满，继续加注 100 MINA。

然后A和B分别开牌，A的牌力大于B的牌力，结算MINA，本轮游戏结束。

最终结果：

A赢了400 MINA。

B输了300 MINA。

C输了100 MINA。

### 二、A Blind Man's Bluff

A Blind Man's Bluff 项目对传统 Indian Poker 的规则进行了修改：通过zk-SNARK将开牌环节省略：在A和B不开牌的情况下，确定A和B谁牌力强，结算MINA。

在此示例中，作者想达到的效果是：“ 参与本局游戏的3个玩家是zk-SNARK里的 Prover 证明者，全网其他节点是 Verifier 验证者。在3个玩家之中，另外2个人的牌力是零知识。在全网节点之中，这3个玩家的牌力是零知识。全网节点在不知道3个玩家牌力的情况下验证本局输赢。”

稍显遗憾的是目前作者的代码还没有完全实现：

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

---

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