ZkTickets - An event ticketing protocol using ZKP

Project Name: ZkTickets - An event ticketing protocol using ZKP
Project Track: Web3
Team Name: StrawberryChocolateFudge
Team Member(s): StrawberryChocolateFudge
Github Link : GitHub - StrawberryChocolateFudge/ZkTickets: A Crypto Note based event ticketing platform
Dorahacks Project Link: COMING SOON

Project Goal: The goal was to create an event ticketing solution built with ZKP that mimics the use of platforms like Resident Advisor.

Project Info:

I uploaded an image that explains how ZK Tickets work.
Project Website: https://btt.zktickets.xyz/
Project Test Instructions:

  1. Open up the website https://btt.zktickets.xyz/
  2. Click the create events button
  3. Here you can fill out a form to create and event
    The name is the name of the event, 50 characters max
    The price is per ticket in BTT
    The available tickets is how many will be sold
    The handler is an optional contract address that implements an interface like this:

interface ExternalTicketHandler { function ticketAction(address sender, address ticketOwer) external; }

This allows you to add an external contract to call when the tickets are scanned. The msg.sender and the address of the ticket owner is available. So a dev can add extra logic.

  1. Click Create Event and confirm this transaction.
    When it’s done you are redirected to a new page.

  2. Here you can see the URL contains an index, like this https://btt.zktickets.xyz/tickets?i=1
    You can share this on your website like: Purchase ZKTicket

On this page the user can interact with the event to purchase tickets or handle them.

  1. Click on Purchase tickets. Here you can see the price, how many is left and the address of the event creator who will receive your payment.

  2. Click purchase ticket and confirm the transaction. The download of the PDF should start.
    The PDF contains the secret for your ticket and if the transaction succeeded the ticket is valid.

  3. To invalidate tickets or to verify them, reload the page and click on Handle tickets

  4. Here you can paste the ticket code which is on the bottom of the PDF or you can hit the button validate ticket and that will open up the QR code scanner.

  5. If the Ticket is valid, you will see the button to invalidate it. You can click on it and sign a transaction or go back.

When you invalidate the ticket, is when the ExternalHandler is invoked. So you can chose to perform a custom action this time.

A Native Mobile App Development now. The performance of mobile browsers is not good for real life ticket scanning applications! The mobile wallet will contain a non-custodial wallet and QR code scanner to handle tickets.

Project Details:
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 to reduce vulnerabilities that stem from using frameworks like React and it makes development feel fun and fresh.

The A Native Mobile app is under development ticket handling.

Smart Contract links: COMING SOON
Project Milestones:
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
Testnet deployments
Front end deployments
Ticket handler mobile app in development
Hackathon submission
Mainnet deployment
New Features: Ticket Transfer/Resale/Refund will be built into the next version of the smart contract


Wow, finally this is here. I have had a conversation with some group about this event ticketing and I am happy you are coming out with this.

I believe one can use your protocol anywhere in the world he is?

This will solve a lot of problems
Thanks and welcome

1 Like

Yeah! I’m creating an open protocol.

Anyone can use it. No restrictions. It’s smart contracts and a website that can be hosted on IPFS so it’s censorship resistant.


Alright thank you, I love this idea.
Recently there was a big event in Ghana with ticketing issues. (The printing house printing extra ones to make more profit) I hope this is a decentralized protocol that will take care of all these.


Solving a problem of ticketing events is such an amazing stuff in the web3 world :earth_americas:

Congratulations and welcome to the Grand hackathon S4 :handshake:
I wish the team and the project best of luck :crossed_fingers:


Welcome to Tron Hackathon session 4

Lovely project, this is real life problem solving
Tickets solving project.

First thing coming through my mind

How embedded will zk tickets could be use for large concerts like music show?

All the best

1 Like

The owner will answer your question but let me add my little.
It’s in the form of nfts so they can mint any quantity they like. In Ghana here now, we buy match tickets on phone and they give you a QR code or code that is checked at the gates of the stadium before entering.

1 Like

I believe the project will be active
With giving answers to our questions concerning them.

QR code makes easier for scanning

Exactly they will be here👍🏻

1 Like

Hola, bienvenidos al s4, me parece perfecta esta solución de venta de entradas a nivel mundial, adentrado en la web3. Felicidades


@Gordian @Prince-Onscolo

The tickets work with QR Codes. The NFT or POAP is optional, just to showcase that the protocol can be extended.

so basically

  1. You can create an event, it has a price and available tickets.
  2. Users can purchase a ticket and download a pdf with a QR code
  3. At the doors of the venue the QR code is scanned to validate the ticket

It works with zero-knowledge proofs, so when the user makes a purchase, he saves a hash on the blockchain. The QR code contains the secret used to create this hash.
When the ticket is scanned, a zero knowledge proof is created from the QR code, to prove the owner knows the origin of the hash without revealing it.

It’s possible to add token minting to the ticket scanning, so it’s optional to airdrop a POAP when you scan a QR code. That functionality has to be implemented externally, the project just contains a way to do it.


Great, thanks for your clarification.
You went deeper. Thanks so much

1 Like

Thanks for explaining

For me I personally like it’s working principle as QR code

1 Like

Yeah, it really makes it simple.

1 Like

Good to know this
That QR code scanning supports brave.

Please, is desktop left out?

Any reason for slow performance using metamask?

On desktop it works with all wallets as long as there is a camera,
but that’s not really practical for venues.

The metamask mobile wallet is not a very fast.
It takes a long time to open websites. I have an android phone and my experience is that it’s pretty slow to use.

The brave browser on mobile is pretty good, so that is the recommended way to scan QR codes and send transactions.

I tried it with Trust Wallet but that does not support the camera at all.

I will have the dApp online in 2-3 days for you guys to test it out. I appreciate the feedback!


Oh ok, maybe we could try with our phones and see (IOS).
Will be waiting :pray:t2:


Thank your brief explanation

That makes it a must have …( Brave Browser) to be use .

How about other mobile browser?

Yes, my experience with metamask/ Trust wallet Dapp get me in slow mode( not funny tho).

I haven’t tried with other browsers, yet.

I started creating a dedicated mobile app just for ticket scanning, but I’m focusing on the web version first for this hackathon, to have a working version online that is easy to demo.

so for ticket scanning it’s gonna use Brave on Mobile now and a dedicated app later.

For creating events and buying tickets any wallet and browser will do, doesn’t matter if desktop, mobile.

1 Like

This is good enough to clear my question session

Please when can we join in testing or demo?