The problem BookIT solves
Secure and Transparent Ticketing
Prevents fraud and scalping by verifying user identities (email, phone, Aadhaar) and maintaining an immutable record of ticket purchases on the blockchain.
Users can validate the authenticity of their tickets without relying on intermediaries.
User-Centric Profiles
Each user has a personal profile that tracks their attended events and ticket purchases, offering a personalized experience.
Makes it easier for event organizers to identify frequent attendees and offer targeted perks or loyalty rewards.
Efficient Event Management
Event organizers can manage ticket sales, track buyers, and maintain a waiting list for sold-out events automatically.
Supports various seat types, enabling event creators to offer flexible ticketing options.
Global Accessibility
Eliminates geographical and operational constraints by enabling anyone with an internet connection and wallet to participate in events.
Enhanced Accountability
Every transaction, from ticket purchases to profile updates, is logged and traceable, ensuring a high degree of accountability for both users and organizers.
Challenges we ran into
- Managing Identity Verification
Challenge:
Integrating email, phone, and Aadhaar verification into a decentralized system was tricky since Solidity doesn't allow direct access to external APIs for real-time verification.
Solution:
We opted for a hash-based approach, where the email, phone, and Aadhaar details are hashed and stored securely. This ensures uniqueness without exposing sensitive data, while external verification can be handled off-chain.
- Preventing Double Registrations
Challenge:
Ensuring that the same email, phone, or Aadhaar number couldn't be registered twice required meticulous checks across multiple mappings.
Solution:
We implemented usedEmails and usedPhones mappings to track already-registered identities and validated every new registration against these mappings. Additionally, the adharToWallet mapping ensured each Aadhaar number was linked to a single wallet.
- Dynamic Seat Type Handling
Challenge:
Adding support for seat types required creating flexible structures while keeping gas costs low. Handling string comparisons for seat type validation in Solidity (a language without native string comparison functions) added complexity.
Solution:
We used keccak256 hashing for string comparisons, ensuring reliable validation of seat types during ticket purchases. The seat types are stored in an array within the event structure, and hashing ensures efficient matching.
- Handling Waiting Lists
Challenge:
Managing a waiting list for sold-out events while ensuring fairness and gas efficiency was a significant hurdle.
Solution:
We designed the contract to dynamically add users to a waiting list when ticket demand exceeds availability. The waitingList array for each event maintains the order in which users attempted to purchase tickets, ensuring fairness.