We build NFT ticketing platforms that solve systemic market problems: scalpers buy up quotas via bots and resell with a 300–500% markup, while the organizer loses control over secondary sales. Take a large music festival: 50,000 visitors, average ticket price $200. With scalping, the organizer loses up to 30% of revenue — $3 million. One European client reduced resale losses by 95% in the first season after implementing our NFT tickets. Our solutions block these scenarios at the smart contract level. A standard ticket is a signature on paper or a database record. An NFT ticket is a smart contract that manages rights and verifications itself. This architecture gives the organizer tools unavailable in traditional systems. Ready for similar efficiency? Contact us.
«ERC-2981 defines a standardized way to retrieve royalty payment information for non-fungible tokens.» — Ethereum Improvement Proposals
How resale protection works
The contract is built on ERC-721 with extensions that override the standard transferFrom. Key mechanics:
- Royalties on secondary sales are implemented via ERC-2981 (
royaltyInfo). The organizer gets a percentage of each resale automatically — without intermediaries. The standard is supported by OpenSea, Blur, LooksRare. - Whitelist and purchase limits — via Merkle Tree for gas-efficient verification. We store only the root hash, the user provides a proof.
- Soulbound mode makes the ticket non-transferable after entry validation. Implemented by overriding
_beforeTokenTransferwith a check of theisUsedflag. - Dynamic URI changes metadata depending on state: before event, after validation, after use.
function _beforeTokenTransfer( address from, address to, uint256 tokenId, uint256 batchSize ) internal override { require(!usedTickets[tokenId], "Ticket already validated"); if (transferRestricted[tokenId]) { require(from == address(0) || to == address(0), "Non-transferable"); } super._beforeTokenTransfer(from, to, tokenId, batchSize); } On-chain vs off-chain validation
| Criterion | On-chain validation | Off-chain with signature |
|---|---|---|
| Transparency | 100% on-chain record | Signature verified off-chain, write in batch |
| Throughput | ~10 entries/min (Ethereum) | up to 1000 entries/sec |
| Cost | ~$0.01 on Polygon, $1+ on Mainnet | < $0.001 per check |
| Suitable for | VIP events, small concerts | Festivals, stadiums |
For festivals with thousands of simultaneous entries, we use the second option with a local token state cache synchronized every 30 seconds via WebSocket subscription to Transfer events. Using L2 solutions like Polygon reduces fees by 99% compared to Ethereum Mainnet.
Ticket validation process (off-chain)
- User opens the app and shows a QR code containing an EIP-712 signed message
{tokenId, eventId, timestamp}. - Validator scans the QR, extracts signature and data.
- Validator verifies the signature via
ecrecoverand confirms the address is the token owner (callsownerOfvia RPC). - If signature is valid and ticket not used — admit.
- Usage flag is recorded off-chain in the database; on-chain write optionally in batches after the event.
On-chain validation gives 100% transparency, but off-chain signature handles up to 1000 entries per second — 50 times faster.
Which blockchains for NFT tickets?
| Blockchain | Average mint fee | Confirmation | Marketplace ecosystem |
|---|---|---|---|
| Ethereum (L1) | ~$5 | 12-15 sec | Full (OpenSea, Blur) |
| Polygon (L2) | ~$0.02 | 2-3 sec | Broad (OpenSea, Quickswap) |
| Arbitrum (L2) | ~$0.10 | 1-2 sec | Good (OpenSea, Uniswap) |
| Solana (non-EVM) | ~$0.0002 | <1 sec | Limited (Magic Eden) |
For mass events with low margin, we recommend Polygon or Arbitrum: fees are low and speed satisfies most users. Ethereum Mainnet is justified only for premium events with a high ticket price.
Why choose NFT tickets?
- Minimized scalping via whitelist, limits, and soulbound mode.
- Automatic royalties on secondary sales without intermediaries.
- Transparent analytics: every sale and entry visible on-chain.
- Personalization: dynamic metadata changes ticket appearance after the event.
Frontend and user flow
User buys via a standard dApp:
- Wallet connection (wagmi + RainbowKit)
- Select category and quantity
- If presale — whitelist check via Merkle proof
- Pay in ETH/MATIC/USDC via
mint() - Ticket appears in wallet as NFT, displayed in the interface with a QR code (signed EIP-712 message)
For organizers, a separate dashboard: event configuration, on-chain sales analytics export, quota and whitelist management.
Integration with secondary marketplaces
Standard integration with OpenSea via properly filled contractURI and tokenURI. For our own secondary market, we use Seaport (open protocol), which supports atomic swaps and royalties via ERC-2981.
What's included in development
- ERC-721 smart contract with extensions (royalties, whitelist, soulbound, dynamic metadata)
- Deploy to testnet + mainnet (Ethereum, Polygon, or other EVM chain)
- Frontend dApp for buyers (React + wagmi)
- Dashboard for organizers
- Mobile app or web scanner for validation
- IPFS integration (Pinata/NFT.Storage)
- Contract audit (Slither + manual review)
Contact us to discuss your project. Request a consultation — we'll evaluate your project in 2 days. Our team has Web3 experience and has delivered over 20 projects on Ethereum, Polygon, and Solana.







