Project Name: ZkTickets - An event ticketing protocol using ZKP
Project Track: Web3
Information about the team: Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.
Team Member(s): StrawberryChocolateFudge
Github Link : GitHub - StrawberryChocolateFudge/ZkTickets: A Crypto Note based event ticketing platform
Dorahacks Project Link: ZKTickets - An event ticketing protocol using ZKP | Buidls | DoraHacks
Project Goal: The goal was to create a decentralized event ticketing solution built with ZKP
I uploaded an image that explains how ZK Tickets work.
Project Website: https://btt.zktickets.xyz/
Android app: ZKTickets It’s a non-custodial wallet and ticket scanner. You can download the APK and it needs to be side-loaded for now.
Example Ticket sale page : ZKTickets
Project Test Instructions:
- Open up the website https://btt.zktickets.xyz/
- Click the create events button and fill out the form to create an event
- You are redirected to the event page. Share this to sell tickets
- It’s possible to handle tickets which will invalidate them
- Or you can create transfer requests to send your ticket to somebody else, get a refund or sell your ticket
- To create custom price ticket resales, you need to stake tokens, staking is for sybill resistance to protect against automated bots doing ticket scalping.
- On the handle tickets page, you can find a download link for the android app, you can use that to invalidate tickets at venues.
The project was born out of interest to create a ticketing solution like Resident Advisor without a backend that supports decentralized hosting.
I develop crypto note based technologies and this fits the use-case.
I purchased some tickets for an event a few days before I started development and all it was is payment and I received a QR code that was scanned at the entrance of the venue. This seemed quite an interesting challenge to implement as a decentralized crypto note protocol so I decided to do it.
ZKTickets is built using Circom, Solidity, Hardhat, Parcel and Vanilla Typescript, HTML and CSS.
I created the zero-knowledge circuits using the circom languge, it’s arithmetic circuit logic that allows me to create the zero knowledge proofs. The user generates a secret and a nullifier and they are both hashed using Poseidon Hash. The hash of the secret+ nullifier is called a commitment, and the hash of the nullifier by itself is called the nullifierHash. These are the hashes that will be dispatched in the transactions to the blockchain so the secret itself is never revealed to anyone.
The Solidity code handles the tracking of ticket validity, the verification and the sale. The tickets are sold for BTT. When tickets are invalidated the contract can call an external solidity contract that allows somebody to extend the protocol.
Hardhat was used for the development and testing and finally Parcel was used to build the front ends. I used vanilla TS,HTML, CSS for the UI.
Smart Contract links:
Smart contracts are verified, on Donau Testnet: ZkTickets: (The main contract) ZKTickets | Address 0xa186deff34278c32d2176f6b90e1b2a3fbd824f9 | BTTC
ZkSnark verifier: (created with circom) Verifier | Address 0xC88ec599D643D84C7BE4315087b23581ac854064 | BTTC
Ticket Pro token: (erc-20 token) TicketPro | Address 0x305c9d8599d4e6d85ad0c1b4d2de294b6efb82a2 | BTTC
ProStaking: (staking contract to unlock custom price ticket resales) ProStaking | Address 0xddd5455619eee9a6ad5a8cbbd668db15a4ab3710 | BTTC
- Grant Participation
Create Circom circuits
develop smart contracts
test smart contracts
develop front end for event creation
front end for purchasing tickets
generating zkp and rendering it as pdf
Qr code scanner page, Optimized for brave browser on mobile
Front end deployments
Mobile Application to verify tickets at venues
Extra: Trust scoring system for event creators. It could be needed after the application has users