A decentralized event management and ticketing system built on Ethereum using ERC-721 NFTs. This project enables organizers to create events and issue NFT-based tickets, while users can securely purchase, transfer, and verify tickets on-chain.
The Event NFT Ticketing Platform consists of two core smart contracts:
- EventTicket – An ERC-721 NFT contract representing tickets for a single event.
- EventFactory – A factory contract that deploys new EventTicket contracts for organizers.
Each event is isolated in its own smart contract, ensuring clean separation of state, ownership, and ticket supply.
- Create events with custom metadata (name, date, location, description)
- Define ticket price and maximum ticket supply
- Mint NFT tickets automatically on purchase
- Withdraw ticket sale proceeds
- Mark tickets as used (entry validation)
- Purchase single or multiple tickets
- Receive tickets as ERC-721 NFTs
- Transfer tickets freely before use
- Verify ticket ownership on-chain
- Factory pattern for scalable event creation
- Fully compatible with OpenZeppelin v5
- Solidity ^0.8.x with modern security defaults
Responsible for deploying new EventTicket contracts.
Responsibilities:
- Create new events
- Track all deployed events
- Track events by organizer
Key Functions:
createEvent(...)– Deploy a new event contractgetAllEvents()– List all eventsgetOrganizerEvents(address)– List events created by an organizergetEventsPaginated(offset, limit)– Paginated event discovery
ERC-721 NFT contract representing tickets for a single event.
Responsibilities:
- Mint NFT tickets
- Enforce max ticket supply
- Track used tickets
- Handle ticket transfers
- Manage ticket sale funds
Key Functions:
mintTicket()– Buy one ticketmintTickets(uint256 quantity)– Buy multiple ticketsuseTicket(uint256 tokenId)– Mark ticket as used (organizer only)getUserTickets(address)– Fetch tickets owned by a userwithdraw()– Withdraw ticket sale proceeds
- Organizer creates an event via
EventFactory - Users purchase tickets (NFTs are minted)
- Tickets can be transferred freely
- Organizer validates entry by calling
useTicket(tokenId) - Used tickets cannot be reused
- Built on Solidity ^0.8.x (overflow checks enabled)
- Uses OpenZeppelin v5 audited contracts
- Organizer-only access for sensitive operations
- Ticket usage tracked on-chain to prevent reuse
- Ether transfers use
call(nottransfer)
- Node.js >= 18
- Foundry or Hardhat
- Solidity ^0.8.20
npm installor
forge installnpx hardhat compileforge buildDeploy EventFactory first. Each event will be deployed automatically via the factory.
EventFactory factory = new EventFactory(platformWallet);- Conferences & Meetups
- Concerts & Festivals
- Web3 Hackathons
- Private Community Events
- DAO Governance Events
- Secondary marketplace integration
- QR-code based ticket scanning
- Off-chain metadata hosting
- Multi-chain deployments
- Royalty support (ERC-2981)
MIT License
This project is provided as-is and has not been audited. Use at your own risk. Always conduct a professional security audit before deploying to mainnet.