Club World Cup
Overview
The ClubWorldCupEntry contract manages the game for a Club World Cup tournament. It provides a comprehensive system for tournament participation and prize distribution with the following key features:
Minting NFTs that represent bets on game outcomes
Managing game pots and a global jackpot
Handling prize claims for winners
Iterative processing of game results to determine winners
Integration with a GamesHub contract for role-based access control
Customizable parameters such as ticket price and prize percentage
Base Sepolia Contract: https://sepolia.basescan.org/address/0xF638df735B0d9cecFD3005CF61a0C4a7D85A879A
Base Contract: https://basescan.org/address/0x6b08888efd22d694504Bb293Cb135fD2Ea5f1fE4
Hyperliquid Contract: https://www.hyperscan.com/address/0x9c0B8c13dBC4c8b72Bd2574f23592E0b3118Ab7c
Events
PriceChanged: Emitted when the ticket price is changed
newPrice:uint256
ProtocolFeeChanged: Emitted when the protocol fee is changed
newFee:uint8
BetPlaced: Emitted when a new bet is placed
user:address(indexed)gameYear:uint256tokenId:uint256bets:uint8[47]
PrizeClaimed: Emitted when a prize is claimed
user:address(indexed)tokenId:uint256prize:uint256
PrizeIncreased: Emitted when the prize pot is increased
gameYear:uint256amount:uint256
IterateGameData: Emitted when game data iteration occurs
gameYear:uint256iterateStart:uint256iterateEnd:uint256
IterationFinished: Emitted when game iteration is complete
gameYear:uint256
IterationSizeChanged: Emitted when iteration size is changed
iterationSize:uint256
GamePotDismissed: Emitted when a game pot is dismissed
gameYear:uint256amount:uint256
TimeToDismissPotChanged: Emitted when time to dismiss pot is changed
timeToDismissPot:uint256
DebugGamePoints: Emitted during game iteration to track points
_gameYear:uint256- The year of the game_points:uint8- Current points_maxPoints:uint8- Maximum points found
Structs
GameData: Contains all data for a specific game year
tokenIds:uint256[]- List of all token IDs for the gamepointsToTokenIds:mapping(uint8 => uint256[])- Maps points to token IDsiterateStart:uint256- Start position for iterationiterateEnd:uint256- End position for iterationpot:uint256- Total pot for the gamepoints:uint8- Maximum points achievedpotDismissed:bool- Whether pot has been dismissed
State Variables
gamesHub:
IGamesHub public- GamesHub contract interfacetoken:
IERC20 public- USDC token contract interfaceprice:
uint256 public- Price to mint a new tokeniterationSize:
uint256 public- Number of tokens to process per iterationprotocolFee:
uint8 public- Fee percentage in basis points (100 = 1%)timeToDismissPot:
uint256 public- Time after game end to dismiss potgameRunning:
bool public- Whether a game is currently running
Modifiers
onlyAdmin: Requires caller to have ADMIN roleonlyGameContract: Requires caller to have WORLD_CUP roleonlyExecutor: Requires caller to have EXECUTOR or ADMIN role
Functions
Constructor
Description: Initializes contract parameters
Arguments:
_gamesHub:address- Address of the GamesHub contract_token:address- Address of the USDC token contract
Admin Functions
closeBets
Description: Closes the betting period for a specific game year
Arguments:
_gameYear:uint256- The year of the game
Modifiers:
onlyGameContract
changePrice
Description: Changes the ticket price
Arguments:
_newPrice:uint256- New price for tickets
Modifiers:
onlyAdmin
changeProtocolFee
Description: Changes the protocol fee percentage
Arguments:
_newFee:uint8- New protocol fee percentage
Modifiers:
onlyAdmin
changeTimeToDismissPot
Description: Changes the time required to wait before dismissing pot
Arguments:
_newTime:uint256- New time in days (minimum 15)
Modifiers:
onlyAdmin
changeIterationSize
Description: Changes the number of tokens processed per iteration
Arguments:
_newSize:uint256- New iteration size
Modifiers:
onlyAdmin
User Functions
safeMint
Description: Mints a new token and places a bet
Arguments:
_gameYear:uint256- Year of the gamebets:uint8[47]- Array of bet choices
Modifiers:
nonReentrant
claimPrize
Description: Claims prize for a single token
Arguments:
_tokenId:uint256- ID of the token to claim prize for
Modifiers:
nonReentrant
claimAllPrizes
Description: Claims prizes for multiple tokens at once
Arguments:
_tokenIds:uint256[]- Array of token IDs to claim prizes for
Modifiers:
nonReentrant
increasePrize
Description: Increases the prize pot for a specific game year
Arguments:
_gameYear:uint256- Year of the game_amount:uint256- Amount to add to the pot
Visibility:
external
Executor Functions
iterateGameTokenIds
Description: Processes a batch of tokens to find winners
Arguments:
_gameYear:uint256- Year of the game_iterateStart:uint256- Start index_iterateEnd:uint256- End index
Modifiers:
onlyExecutor
dismissGamePot
Description: Dismisses unclaimed pot after waiting period
Arguments:
_gameYear:uint256- Year of the game
Modifiers:
onlyExecutor
View Functions
calculatePoints
Description: Calculates points for a specific bet
Arguments:
tokenId:uint256- ID of the token
Returns:
points:uint8- Points for the betresultsArray:uint8[47]- Results array (0 for not defined, 1 for correct, 2 for wrong)
tokenURI
Description: Gets the URI for a token's metadata
Arguments:
_tokenId:uint256- ID of the token
Returns:
string- Token URI
getBetData
Description: Gets bet data for a token
Arguments:
_tokenId:uint256- ID of the token
Returns:
uint8[47]- Array of bets
getGameId
Description: Gets the game year for a token
Arguments:
_tokenId:uint256- ID of the token
Returns:
uint256- Game year
getTeamSymbols
Description: Gets team symbols for a token's bets
Arguments:
_tokenId:uint256- ID of the token
Returns:
string[47]- Array of team symbols
amountPrizeClaimed
Description: Gets prize info for a token
Arguments:
_tokenId:uint256- ID of the token
Returns:
amountToClaim:uint256- Amount available to claimclaimed:bool- Whether prize was claimed
isGameFinished
Description: Checks if a game is finished
Arguments:
_gameYear:uint256- Year of the game
Returns:
bool- Whether game is finished
getGamePot
Description: Gets total pot for a game
Arguments:
_gameYear:uint256- Year of the game
Returns:
uint256- Total pot amount
getGamePlayers
Description: Gets number of players in a game
Arguments:
_gameYear:uint256- Year of the game
Returns:
uint256- Number of players
getGameTokenIds
Description: Gets all token IDs for a game
Arguments:
_gameYear:uint256- Year of the game
Returns:
uint256[]- Array of token IDs
getGameWinners
Description: Gets winning token IDs for a game
Arguments:
_gameYear:uint256- Year of the game
Returns:
uint256[]- Array of winning token IDs
betStatus
Description: Gets the bet status for a specific year
Arguments:
_gameYear:uint256- Year of the game
Returns:
bool- Whether bets are closed
Last updated
Was this helpful?