Demo Video link : https://youtu.be/c5NRRpHysRg
Transparent · Secure · Fair
FairPass is a blockchain-powered ticketing platform built on the Sonic Blockchain, utilizing NFTs to bring fairness, transparency, and security to event ticketing.
- ✅ No Fraud → Tickets are unique NFTs
- ✅ Fair Resale → Ownership is transparent on-chain
- ✅ Privacy at Check-in → Uses Zero-Knowledge Proofs (ZKPs) so users prove ticket validity without exposing their wallet
- ✅ Sonic FeeM → On Sonic Mainnet, 90% of gas fees are refunded back to the smart contract owner, creating a sustainable revenue model that rewards both the platform and organizers without overcharging users. (FeeM is not available on testnet)
🎫 Web2 ticketing is broken:
- Fake/scalped tickets → fans get cheated.
- Organizers lose resale revenue.
- Users expose personal info at check-in.
FairPass turns every ticket into an NFT with built-in ZK privacy:
- Tickets can’t be faked (NFTs are unique).
- Resale rules are enforced on-chain.
- At check-in, you prove ownership via ZK proof → without revealing wallet.
- Sonic’s FeeM refunds 90% of gas → organizers earn more, users pay less.
- Blockchain: Sonic
- Smart Contracts: Solidity, Foundry
- Tickets (NFTs): ERC-721
- Privacy: Zero-Knowledge Proofs (semaphore.js)
- Frontend: React
- Backend: Node.js, Express
- Wallet Integration: Rainbow-Kit
Handles event-specific logic:
constructor()→ Initializes event (name, type, price, organizer, platform)buyTicket(string metadataURI)→ Users purchase tickets, NFT mintedmintForUser(address user, string metadataURI)→ Organizer batch/lazy mints ticketscheckIn(uint256 tokenId, ZKProof proof)→ Validates ZK proof & burns ticket after check-inownerOfNFT(uint256 tokenId)→ Returns NFT ownerregisterMe()→ Organizer registration- Ownership management →
owner(),transferOwnership(),renounceOwnership()
✅ ZK Integration → Prevents fraud (e.g., screenshot reuse of tickets)
ERC-721 contract for tickets:
mint(address to, string metadataURI)→ Mints NFT ticketburn(uint256 tokenId)→ Burns ticket (used after check-in)ownerOf(uint256 tokenId)→ Returns ticket ownertokenURI(uint256 tokenId)→ Metadata (IPFS link)- Standard ERC-721 transfers →
transferFrom,safeTransferFrom
✅ ZK Context → Tickets verified without exposing wallet
Deploys and manages multiple events:
createEvent(...)→ Deploys newEventImplementationcontractgetAllEvents()→ Returns list of deployed eventsgetEventDetails(eventAddress)→ Fetch event details
✅ ZK Enforced → All events require ZK proof at check-in
FairPass leverages the Sonic blockchain’s fee-sharing model and mainnet token rewards:
| Revenue Source | Organizer | Platform (FairPass) |
|---|---|---|
| Ticket Sales | 100% | 0% |
| Resale Fees | Shared | Shared |
| Gas Refunds (Sonic) | Shared | Shared (90% of fees returned) |
| Mainnet Token Rewards | ✅ Earn tokens per transaction | ❌ |
👉 This creates a sustainable revenue stream while ensuring fair costs for users.
- Mint/Buy → NFT ticket minted to user
- Resell/Transfer → Allowed with enforced platform fee
- Check-In (ZK proof) → Proof generated → verified on-chain → ticket burned
- Completion → Ticket cannot be reused
- Organizer creates event via EventManager
- User buys ticket through EventImplementation
- Ticket minted in EventTicket contract
- At venue:
- User generates ZK proof
- Calls
checkIn(tokenId, proof) - Proof verified → ticket burned
- If resold, resale fees distributed to platform + organizer
-
FeeM gas refund → sustainable incentive model
-
ZK privacy → innovative check-in UX
-
NFT tickets → transparent + fair resale
backend/ → Node.js + ZKP service
frontend/ → React dApp (UI, wallet integration)
web3/ → Solidity contracts (EventManager, EventImplementation, EventTicket)- Fabio Mughilan
- Siddarth