A Starknet contract for creating and managing events with ERC721 tickets, integrated with Token Bound Accounts (TBA) and STRK token payments.
- Event Management: Create, update, and cancel events with configurable details
- ERC721 Tickets: Generate NFT tickets for each event
- Token Bound Accounts: Automatically create TBAs for ticket holders
- Access Control: Role-based permissions for event organizers
- Payment Handling: STRK token payments with 3% platform fee
- Check-in System: Track event attendance
- Payouts & Refunds: Secure fund distribution and cancellation refunds
events
: Map of event IDs to event dataevent_balance
: Track collected funds per eventevent_attendance
: Attendance records- Integrated OpenZeppelin components:
- Access Control
- Upgradeability
- SRC5 interface
create_event
: Initialize new event with ERC721 ticket contractupdate_event
: Modify event details (organizers only)cancel_event
: Cancel future event and enable refunds
purchase_ticket
: Buy ticket with STRK tokens (creates TBA)refund_ticket
: Get refund for canceled eventscheck_in
: Verify attendee ticket ownership
collect_event_payout
: Transfer event proceeds to organizer- Automatic 3% fee on ticket sales
DEFAULT_ADMIN_ROLE
: Manage contract upgrades- Event-specific roles:
- Main Organizer (per event)
- Secondary Organizers
Event Name | Description | Parameters |
---|---|---|
EventCreated |
New event created | Event ID, Organizer, Ticket Address |
TicketPurchased |
Ticket sold | Event ID, Ticket ID, Buyer, TBA Address, Price |
CheckedIn |
Attendee checked in | Event ID, Attendee Address, Timestamp |
PayoutCollected |
Organizer withdrew funds | Event ID, Organizer Address, Amount |
constructor(
default_admin: felt252 // Admin address
)
create_event(
name: ByteArray,
symbol: ByteArray,
uri: ByteArray,
description: ByteArray,
location: ByteArray,
start_date: u64,
end_date: u64,
total_tickets: u256,
ticket_price: u256
) → EventData
purchase_ticket(event_id: u256) → ContractAddress
// Returns created TBA address
Common error reasons include:
EVENT_ENDED
: Action attempted after event conclusionINSUFFICIENT_BALANCE
: Insufficient STRK for ticket purchaseNOT_EVENT_ORGANIZER
: Unauthorized organizer actionEVENT_SOLD_OUT
: No tickets remaining
- Inherits OpenZeppelin AccessControl for role management
- Upgradeable contract pattern
- STRK token transfers use ERC20
transferFrom
with allowance checks - Event-specific role isolation prevents cross-event interference
- OpenZeppelin Cairo Contracts v0.8
- Token Bound Accounts Registry
- StarkNet SRc5 Standard
MIT License - See [SPDX-License-Identifier: MIT] in contract header
Note: Address constants (TBA_REGISTRY_CLASS_HASH, STRK_TOKEN_ADDRESS etc.) should be updated according to deployment network.