zkPoB is a mobile compatible tool that lets anyone prove they own a Bufficorn (or any NFT) without revealing which Buffi they own or the address they are verifying themselves with

Overview

zkProof Of Buffiness - ETH Denver 2021

Live & deployed contracts

Vision

Hi anon, join us at ZKPoB and prove that you are a Bufficorn without revealing anything about yourself other than your Buffiness

Description

zkPoB is a mobile compatible tool that lets anyone prove they own a Bufficorn (or any NFT) without revealing which Buffi they own or the address they are verifying themselves with

Mobile first

How it works

Let's say you want to organize an event in which only a set of addresses can participate (for ETH Denver we will use the set of addresses that own a Bufficorn). When a guest arrives you must check that they were invited (ie. their address owns at least one Bufficorn)... but your guests are a bunch of anons that do not want to reveal their address or any data that may point to their address, such as an NFT number (Bufficorn holders love privacy).

Sounds like a bit difficult, or almost impossible... but.. here is where we can use ZKProofs.

With ZKPoB, the host can sign a set of messages with their private key. The messages consist of a tuple (address, event_id) that lists the addresses that can attend the event with the host's signature... (kind of taking an snapshot at certain block of all the Bufficorn holders).

ZKPoB will construct a circom circuit that will take the following inputs:

  1. the guests' addresses and event id signed by the host previously chosen from the pre-computed set;
  2. any message signed by the guest.

The circuit will:

  1. verify that the host signature is valid, obtaining a guest address and the event id;
  2. check that the event id is for the aforementioned event;
  3. verify the guest's signed message therefore verifying the guest's address;
  4. check that guest address obtained in 1, and the guest address obtained in 3 are equal.

The circuit output will be:

  1. True if the circuit conditions are met;
  2. A valid ZKProof, proving that the guest is in!
  • Note: the circuit will fail and will not be able to generate a proof if the guest is not a Bufficorn holder.

ZKPoB will also generate a verifier and deploy a contract to the blockchain.

Guests can browse the host's site and generate a proof of buffiness, storing it as a QR code in their mobile device.

When a guest arrives at the event, a doorman can verify the proof by reading the QR code containing the proof and calling the verifier contract through a mobile app. If the verification succeeds, the guest can go in without disclosing any information about them.

The app will also save in a list the already verified proofs to avoid a "double spend" (ie. two or more guests going in using the same proof).

  • Note: If a malicious guest generates a proof and then transfers his Bufficorn to a another address, they will not be able to cheat, as the snapshot taken by the host maps only one address per Bufficorn.

Authors

👤 Agustin Zavalla - https://github.com/azavalla

👤 Emilio Garcia - https://github.com/danielemiliogarcia

👤 Jose Baredes - https://github.com/josebaredes

👤 Martin Sanchez - https://github.com/martinlsanchez

Implemented using SnarkJs and Circom circuit compiler.

SNARKJS > https://github.com/iden3/snarkjs

CIRCOM LIB > https://github.com/iden3/circomlib

Requirements

# RUST (how to install rust)
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
git clone https://github.com/iden3/circom.git
cd circom
cargo build  --release
cargo install --path circom

# snarkjs
npm install -g snarkjs


Development Scripts

 sh run_all.sh
 sh collect_static.sh

Start Dapp locally

cd dapp
npm i
npm run start

Inspired by some awesome ETH DENVER folks:

Disclosure

The circuit described in this ReadMe is slightly different than the one applied in the app, as we had only 48 hours to build it :).

The circuit used in the app is a simplified version of the one described as the mobile app currently performs a few of the checks that would be performed by the circuit.

However, it should not take us that much longer to implement the full circuit in the future!

Show your support

Give a ⭐️ if you like this project!

You might also like...

Create your own custom NFT minting page using thirdweb's NFT Drop contract

Customizable NFT Drop Minting Page In this example, you can create your own NFT Drop minting page just by customising the template with your branding,

Dec 24, 2022

Browser extension that enables you to Log-in as ANY address on ALL dapps

Browser extension that enables you to Log-in as ANY address on ALL dapps

Impersonator Extension Log-in as ANY address on ALL dapps. Impersonator injects into the dapps just like Metamask, but gives you the freedom to set cu

Dec 14, 2022

A jquery plugin that makes images truly responsive, without sacrificing anyone's face. Give it more stars!

A jquery plugin that makes images truly responsive, without sacrificing anyone's face. Give it more stars!

Responsify.js A jquery plugin that makes images truly responsive, without sacrificing anyone's face :D When images are used in a responsive container

Dec 14, 2022

Converts your IPv4 address to a 4x4 2-bit PNG which you can extract the IP from.

Converts your IPv4 address to a 4x4 2-bit PNG which you can extract the IP from.

IP-to-PNG Converts your IPv4 address to a 4x4 2-bit PNG which you can extract the IP from. https://www.npmjs.com/package/ip2png Run npm install ip2png

Nov 30, 2022

Inspiration for revealing content by morphing the action element.

Morphing Buttons Concept Inspiration for revealing content by morphing the action element. Article on Codrops Demo Integrate or build upon it for free

Aug 18, 2022

chain-syncer is a module which allows you to synchronize your app with any ethereum-compatible blockchain/contract state. Fast. Realtime. Reliable.

Chain Syncer Chain Syncer is a JS module which allows you to synchronize your app with any ethereum-compatible blockchain/contract state. Fast. Realti

Dec 15, 2022

A file sharing service, where you can upload files and provide a download link for anyone on the internet by sharing the link 🔗 or via mail ✉️ which remains active for 24hours 🕙.

eShare | File Sharing App A file sharing service, where you can upload files and provide a download link for anyone on the internet by sharing the lin

Nov 20, 2022

Node.js module for verifying Plumo proofs and reading states based on it

plumo-verifier Node.js module for verifying Plumo proofs and reading states based on it. Plumo is a SNARK-based light client verifier for the Celo blo

Dec 15, 2022

Container Image Signing & Verifying on Ethereum [Testnet]

Container Image Signing & Verifying on Ethereum [Testnet]

cosigneth An experimental decentralized application for storing and verifying container image signatures as an NFT on Ethereum cosigneth, is a decentr

Jul 4, 2022
Owner
Marto.eth
💡 Blockchain Engineer 👽 DeFi Ninja 🛠 Always coding 🚀 DMs open
Marto.eth
Candy Shop is a JavaScript library that allows DAOs, NFT projects and anyone to create an NFT marketplace on Solana in minutes!

Candy Shop (IN BETA) Intro Candy Shop is a JavaScript library that allows DAOs, NFT projects and anyone to create an NFT marketplace on Solana in minu

LIQNFT 111 Dec 15, 2022
Allows the public to easily report and track the geolocation of anyone or anything they spot outside, using a mobile app or web frontend.

LIVE DEMO: https://armytracker.com/ (tracking the invading Russian army in Ukraine) Attention: - If you'd like to help the project either as a program

Michal Certicky 9 Mar 27, 2022
An interactive git visualization and tutorial. Aspiring students of git can use this app to educate and challenge themselves towards mastery of git!

LearnGitBranching LearnGitBranching is a git repository visualizer, sandbox, and a series of educational tutorials and challenges. Its primary purpose

Peter Cottle 26.4k Jan 3, 2023
Prove your identity, for example you are BYR.

Usay For what? Prove your identity, for example you are BYR. Code Quality All code is written by Copilot, so if you find any bug, please report it to

null 9 Aug 10, 2022
Challenge for you all to prove that CVE-2022–29622 is not false

CVE-2022–29622: (In)vulnerability Analysis This codebase was created to help security professionals and developers to understand why I think Formidabl

Zsolt Imre 2 Jul 20, 2022
FIXYL is a tool for testing and verifying software that uses the FIX protocol.

FIXYL FIXYL is a tool for testing and verifying software that uses the FIX protocol. It allows establishing FIX sessions and exchanging (and manipulat

Yaala Labs 22 Dec 29, 2022
🐲 Epic NFTs [UI] - Proyecto que te permitirá conectar tu billetera y acuñar un NFT, podrás revender el NFT en OpenSea. El NFT en sí se puede personalizar

?? Epic NFTs [UI] El proyecto se encuentra deployado en Vercel para que puedan verlo e interactuar con él, toda crítica o comentario se agradece, pued

Braian D. Vaylet 17 Oct 22, 2022
Fullstack Dynamic NFT Mini Game built using 💎 Diamond Standard [EIP 2535] 🏃‍♀️Players can use Hero NFT to battle against Thanos ⚔ Heroes can be Healed by staking their NFT 🛡

?? Fullstack Dynamic NFT Mini Game ?? ?? Using Diamond Standard Play On ?? ?? ⏩ http://diamond-dapp.vercel.app/ Project Description ?? Fullstack Dynam

Shiva Shanmuganathan 21 Dec 23, 2022
NFT Marketplace framework to build standalone NFT marketplace or inApp/inGame NFT marketplace

NFT Marketplace This project is a decentalized NFT Marketplace framework which is to be the baseline for you to build standalone NFT marketplace or in

Reddio, inc. 14 Dec 19, 2022