Giter Club home page Giter Club logo

zkfuture-battleship's Introduction

基本资料

项目名称:Future Tool - zkFuture - Battleship

项目立项日期:2023-06

项目整体简介

零知识证明将是未来Web3.0的基石,它利用神奇的密码学原理做到了保护隐私和压缩数据的能力,但其编程复杂,效率低,如何用好这一工具将是广大开发者的难题。

本工具主要提供零知识证明的基础开发工具,不过鉴于黑客松的时间范围缘故,本项目将以一个简单的battleship舰艇对战游戏为例,演示开发工具的能力和效果。

battleship舰艇对战游戏是一种双人游戏,每个玩家都有一张NxM的网格,玩家需要在自己的网格上放置一些战舰。战舰可以是1到10格长,可以水平或垂直放置,但不能重叠。一旦战舰放置完成,玩家轮流猜测对方的战舰位置。每次猜测时,玩家需要指定一个网格坐标,如果该坐标上有对方的战舰,则该战舰被击中,否则就是未击中。当一艘战舰的所有格子都被击中时,该战舰被击沉。游戏继续进行,直到一方玩家的所有战舰都被击沉为止,那么另一方玩家就获胜了。

项目Demo

项目Demo视频

技术架构

  • ui/ 界面相关的代码,并包含zk证明及合约交互的代码
  • src/circuits/ 电路代码
  • src/contracts/ 合约代码
  • scripts 一些辅助脚本代码
flowchart LR
    circuit["Circuits(.circom)"]
    contract["Contracts(.sol)"]
    verifier["Verifier(.sol)"]

    circuit -- snarkjs --> verifier

    subgraph ui["Frontend"]
        contractTyping["Contract Typing(.ts)"]
        circuitTyping["Circuit Typing(.ts)"]
    end

    circuit -- zkFuture --> circuitTyping 
    verifier -- typechain --> contractTyping 
    contract -- typechain --> contractTyping 

Loading

游戏逻辑

由其中一个玩家开启游戏,另外一个玩家使用同样的ID号加入游戏。能顺利加入游戏的必要条件就是通过BoardEligibility的零知识电路的检查。

flowchart LR
    create["Create(UI)"]
    join["Join(UI)"]

    create --> game
    join --> game

    subgraph moonbeam["Moonbase Alpha"]
        game["Game(.sol)"]
        board["BoardEligibility(.sol)"]
        precompile["Precompiled"]

        game --> board --> precompile
    end
Loading

游戏创建后,每个玩家依次进行轮回的游戏,直到有一方胜利为止

flowchart LR
    turn["Turn(UI)"]

    game["Game(.sol)"]

    turn --> game 
    subgraph moonbeam["Moonbase Alpha"]
        game["Game(.sol)"]
        attack["RevealAttack(.sol)"]
        precompile["Precompiled"]

        game --> attack --> precompile
    end
Loading

由于可以利用上BN128的Precompiled合约,因此零知识证明的验证速度快,消耗的gas低。

程序部署说明

  1. 准备$\tau$:yarn setup:ptau
  2. 编译零知识电路:build:circuits
  3. 【可选步骤】当合约发生变化后,重新编译强类型文件:build:contracts
  4. 部署合约:deploy:contracts
  5. 将上一步中部署的合约放到UI中进行调用

本项目的起点

黑客松期间计划完成的事项

区块链端

  • 合约模板

    • 创建新游戏 (fn create())
    • 加入游戏 (fn join())
    • 发起攻击 (fn turn())
    • 游戏结算 (fn closeup())
  • 合约生成工具:根据算术电路生成合约

    • 电路编译生成的命令行
    • 验证参数的生成
    • 根据定义生成接口
    • 集成与部署功能

客户端

  • web 端
    • 创建新的游戏
    • 加入游戏
    • 发起攻击
    • 游戏结算

队员信息

  • Icer - Full-Stack Developer - WeChat: wxid_wf3w33euagf622

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.