The goal is to design and implement a decentralized ticketing system using blockchain technology. The system should allow users to create events, sell tickets, and verify ownership of tickets in a decentralized manner, reducing fraud and eliminating the need for intermediaries.
- Smart Contract Development
- Implement marketplace smart contract in Solidity that allows event organizers to create and manage tickets, including specifying details such as name, date, time, location, description, ticket price and total ticket supply on sale.
- The contract should enable the primary sales and secondary sales of tickets with % royalty distribution to the event organizer. All sales also include a % for platform fee sent to a treasury wallet address.
- Each ticket should be a unique NFT (use ERC-721 standard and OpenSea Metadata and Openzeppelin Royalty standard).
- Each ticket should also include details such as ticket ID and seat number.
- Frontend & User Interface
- Develop a simple frontend using React.js or any web framework to interact with the smart contract.
- Users should be able to:
- Create an event
- Primary purchase of tickets using ERC20 called TCOIN from event organizer
- View purchased tickets and ticket details in their wallet
- Transfer tickets to other users
- Sell and purchase tickets on the secondary market
- Use MetaMask or another Web3 wallet for authentication and transactions.
- Security & Validation
- Ensure secure interactions using OpenZeppelin. Read through all of the docs and use what is needed.
- Implement loading and error handling for failed transactions and smart contract interactions.
- Documentation & Report: Provide a report explaining:
- The overall system architecture
- Smart contract plan, logic and implementation
- Steps to deploy and test the contract
- Challenges faced and how they were resolved
- Future improvements and additional features
- Buyer
- Browse available tickets.
- Purchase tickets using cryptocurrency on primary and secondary market using TCOIN.
- View purchased tickets in their wallet.
- View ticket details of any ticket along with the owner’s wallet address.
- Transfer tickets to other users.
- Verify ticket authenticity via blockchain.
- Secondary Seller
- List tickets on sale.
- Set ticket prices and total supply for their own secondary sale.
- Receive payments in cryptocurrency.
- Event Organizer
- Create and manage events.
- Set ticket prices and total supply for their own primary sale. These tickets will be new NFTs minted as they are bought.
- Edit event details: name, date, time, location, description.
- Receive royalties of secondary sales.
- Admin
- Pause all Marketplace functions
- Change secondary royalty %.
- Change Platform fee %.
- Change Admin address.
- Change Treasury address.
- App can handle Metamask account changes, and detect if the user is on the correct network
- The smart contracts must be developed using the Tech Stack specified in the later slides.
- The Solidity code must be fully documented following Natspec.
- The smart contracts must be tested with written test cases with clear documentation. Make sure there are no security flaws and code is gas optimized.
- The Smart Contracts should be deployed on a BuildBear network and code is verified. The Explorer links to the contracts should be added to the ReadMe.
- The frontend code should be Web3 focused and is an organized UI. Take design inspiration from Opensea, Uniswap and TicketMaster. You don't need to copy all the functionalities, just keep the frontend simple and neat. Try to auction, sell and buy an item from Opensea testnet before you begin.
- The website should be deployed. You can deploy on Netlify, Vercel or any other cloud provider. The URL should be in the ReadMe.
- The code should be uploaded to the course Github in 2 folders: Frontend and SmartContracts.
- A smart contract plan should be uploaded to the repo. Follow the format shown in the example below. The example is unrelated to this assignment.
Frontend:
- ReactJS: Frontend library to building Single Page Applications
- EtherJS: JS library used for integrating with EVM
- [RainbowKit](RainbowKit: Open source library for multi-wallet integration): Open source library for multi-wallet integration
- Netlify: Platform to host website
Blockchain:
- Hardhat: Framework for developing, testing and deploying Smart Contracts. Uses Mocha, Chai and Waffle
- Mocha: helps document and organize tests with "describe", "it", etc
- Chai: assertion library for testing with "expect", "assert", etc
- Waffle: tools for compiling, deploying and testing smart contracts. It also provides extra Chai methods and can be added as an extension of Mocha
- EthersJS: JS library used for integrating with EVM
- Solidity: Language used to build smart contracts
- OpenZeppelin Contracts: a library of well tested smart contracts, including ERC20 and ERC721
- Etherscan: Block explorer
- NFT Storage or Pinata: Decentralized file storage

