Ace the Brackets 16

This contract mints ERC-721 NFTs that represent bets on bracket tournament games run by the AceTheBrackets16 contract.

When a user wants to place a bet, they call the safeMint function and pass in the game ID and their bracket predictions. The contract checks that the predictions are valid. It collects the bet amount from the user, takes a protocol fee of 10% of the bet value, and adds the rest to the pot for that particular bet combination.

A bet is represented by a unique code derived from the game ID and bracket predictions. Bets that match the final game outcome split that pot evenly.

After a game finishes, users can call claimTokens to withdraw any winnings their NFT earned based on its associated bet. The contract checks the game status, winning bracket, and bet amount already claimed before sending winnings.

The NFT metadata is generated on-chain and contains the bet details. This allows wallets and interfaces to show the historical bet information tied to each NFT.

Some additional features:

  • Game pot expires every 30 days by default. The number of days is defined in the AceTheBrackets16 contract.

  • Each one of the 4 rounds lasts 10 minutes, with 10 initial minutes to bet. The game lasts 50 minutes from the betting period to end.

  • The expired pot gets split between the treasury and the jackpot pot.

  • Admins can change the betting token, ticket price, and add jackpot amount.

  • Bet validation functions check the current status of each token on the bet.

  • If no player gets the pot, 10% of the actual game pot goes to the players with the highest score.

Base Sepolia Contract:

https://sepolia.basescan.org/address/0x899A9bD928cc2A2912d0B407fabD0642784511D1

Base Contract:

https://basescan.org/address/0x70A254c8201adbD88d88D17937d5e8aBb8B8095F

Events

  • BetPlaced: Emitted when a bet is placed.

    • _player: address

    • _gameId: uint256

    • _tokenId: uint256

    • _betCode: bytes32

  • GamePotPlaced: Emitted when the game pot is placed.

    • _gameId: uint256

    • _pot: uint256

  • GamePotDismissed: Emitted when the game pot is dismissed.

    • _gameId: uint256

    • _amount: uint256

  • NoWinners: Emitted when there are no winners for a game.

    • _gameId: uint256

  • PrizeClaimed: Emitted when a prize is claimed.

    • _tokenId: uint256

    • _amount: uint256

  • PriceChanged: Emitted when the ticket price is changed.

    • _newPrice: uint256

  • ProtocolFeeChanged: Emitted when the protocol fee is changed.

    • _newFee: uint8

  • IterateGameData: Emitted when game data is iterated.

    • _gameId: uint256

    • _iterateStart: uint256

    • _iterateEnd: uint256

  • IterationFinished: Emitted when iteration is finished.

    • _gameId: uint256

  • GamePotDecided: Emitted when the game pot is decided.

    • _gameId: uint256

Structs

  • GameData: Struct to store game data.

    • tokenIds: uint256[]

    • iterateStart: uint256

    • pot: uint256

    • consolationPot: uint256

    • consolationPotClaimed: uint256

    • consolationWinners: mapping(uint8 => uint256[])

    • consolationPoints: uint8

    • potDismissed: bool

Constants

The note does not mention any constants.

State Variables

  • _nextTokenId: uint256 private The next token ID to be minted.

  • gamesHub: IGamesHub public The GamesHub contract.

  • token: IERC20 public The ERC20 token used for payments.

  • jackpot: uint256 public The jackpot amount.

  • price: uint256 public The price of a ticket.

  • iterationSize: uint256 public The size of each iteration.

  • consolationPerc: uint8 public The percentage for consolation prizes.

  • protocolFee: uint8 public The protocol fee percentage.

  • executionAddress: address public The address authorized to execute certain functions.

Modifiers

  • onlyAdmin(): Ensures the caller is an admin.

  • onlyGameContract(): Ensures the caller is the game contract.

  • onlyExecutor(): Ensures the caller is the executor.

Functions

Constructor

  • Description: Initializes contract parameters.

  • Arguments:

    • _gamesHub: address The address of the GamesHub contract.

    • _executionAddress: address The address of the Chainlink forwarder.

    • _token: address The address of the ERC20 token.

setExecutionAddress

  • Description: Sets the forwarder address.

  • Arguments:

    • _executionAddress: address The address of the Chainlink forwarder.

  • Modifiers:

    • onlyAdmin: Ensures the caller is an admin.

changePrice

  • Description: Changes the price of the ticket.

  • Arguments:

    • _newPrice: uint256 The new price of the ticket.

  • Modifiers:

    • onlyAdmin: Ensures the caller is an admin.

changeConsolationPerc

  • Description: Changes the consolation percentage.

  • Arguments:

    • _newPerc: uint8 The new consolation percentage.

  • Modifiers:

    • onlyAdmin: Ensures the caller is an admin.

changeGamesHub

  • Description: Changes the GamesHub contract address.

  • Arguments:

    • _gamesHub: address The address of the new GamesHub contract.

  • Modifiers:

    • onlyAdmin: Ensures the caller is an admin.

safeMint

  • Description: Mints a new ticket and places a bet.

  • Arguments:

    • _gameId: uint256 The ID of the game to bet on.

    • bets: uint256[15] The array of bets for the game.

claimTokens

  • Description: Claims the tokens won by a ticket. Only callable by the owner of the ticket.

  • Arguments:

    • _tokenId: uint256 The ID of the ticket to claim tokens from.

  • Modifiers:

    • nonReentrant: Prevents reentrancy attacks.

claimAll

  • Description: Claims all tokens on the input array. Iterates through the array, sums the amount to claim, and claims it. It skips the tokens where the amount to claim is 0.

  • Arguments:

    • _tokenIds: uint256[] The array of token IDs to claim tokens from.

  • Modifiers:

    • nonReentrant: Prevents reentrancy attacks.

setGamePot

  • Description: Sets the game pot for a specific game. Only callable by the game contract.

  • Arguments:

    • _gameId: uint256 The ID of the game to set the pot for.

    • betCode: bytes32 The bet code for the game.

  • Modifiers:

    • onlyGameContract: Ensures the caller is the game contract.

iterateGameTokenIds

  • Description: Iterates the game token IDs for a specific game. Only callable by the executor.

  • Arguments:

    • _gameId: uint256 The ID of the game to iterate the token IDs for.

    • _iterateStart: uint256 The start iteration position.

    • _iterateEnd: uint256 The end iteration position.

  • Modifiers:

    • onlyExecutor: Ensures the caller is the executor.

changeIterationSize

  • Description: Changes the iteration size. Only callable by the admin.

  • Arguments:

    • _newSize: uint256 The new iteration size.

  • Modifiers:

    • onlyAdmin: Ensures the caller is an admin.

dismissGamePot

  • Description: Dismisses the game pot for a specific game. Only callable by the executor.

  • Arguments:

    • _gameId: uint256 The ID of the game to dismiss the pot for.

    • betCode: bytes32 The bet code for the game.

  • Modifiers:

    • onlyExecutor: Ensures the caller is the executor.

increaseJackpot

  • Description: Increases the pot by a certain amount. Only callable by the admin.

  • Arguments:

    • _amount: uint256 The amount to increase the pot by.

  • Modifiers:

    • onlyAdmin: Ensures the caller is an admin.

tokenURI

  • Description: Gets the token URI for a specific token.

  • Arguments:

    • _tokenId: uint256 The ID of the token.

  • Returns:

    • string: The token URI.

getBetData

  • Description: Gets the bet data for a specific token.

  • Arguments:

    • _tokenId: uint256 The ID of the token.

  • Returns:

    • uint256[15]: The array of bets for the token.

getGameId

  • Description: Gets the game ID for a specific token.

  • Arguments:

    • _tokenId: uint256 The ID of the token.

  • Returns:

    • uint256: The ID of the game the token is betting on.

betValidator

  • Description: Validates the bets for a specific token.

  • Arguments:

    • _tokenId: uint256 The ID of the token.

  • Returns:

    • uint8[15]: The array of validation results for the bets.

betWinQty

  • Description: Gets the quantity of winning bets for a specific token.

  • Arguments:

    • _tokenId: uint256 The ID of the token.

  • Returns:

    • uint8: The quantity of winning bets for the token.

getTokenSymbols

  • Description: Gets the symbols for the tokens bet on a specific token.

  • Arguments:

    • _tokenId: uint256 The ID of the token.

  • Returns:

    • string[15]: The array of token symbols.

amountPrizeClaimed

  • Description: Gets the amount to claim and the amount claimed for a specific token.

  • Arguments:

    • _tokenId: uint256 The ID of the token.

  • Returns:

    • uint256 amountToClaim: The amount of tokens to claim.

    • uint256 amountClaimed: The amount of tokens already claimed.

potentialPayout

  • Description: Gets the potential payout for a specific game.

  • Arguments:

    • gameId: uint256 The ID of the game.

  • Returns:

    • uint256 payout: The potential payout amount.

    • uint256 consolationPayout: The potential consolation payout amount.

playerQuantity

  • Description: Gets the quantity of players for a specific game.

  • Arguments:

    • gameId: uint256 The ID of the game.

  • Returns:

    • uint256: The quantity of players for the game.

getGamePlayers

  • Description: Gets the token IDs for a specific game.

  • Arguments:

    • gameId: uint256 The ID of the game.

  • Returns:

    • uint256[]: The array of token IDs for the game.

getBetCodeToTokenIds

  • Description: Gets the token IDs for a specific bet code.

  • Arguments:

    • betCode: bytes32 The bet code to get the token IDs for.

  • Returns:

    • uint256[]: The array of token IDs for the bet code.

getGameWinners

  • Description: Gets the token IDs for a specific game ID.

  • Arguments:

    • gameId: uint256 The ID of the game.

  • Returns:

    • uint256[]: The array of token IDs for the game ID.

getGameConsolationData

  • Description: Gets the game consolation prize data for a specific game.

  • Arguments:

    • gameId: uint256 The ID of the game.

  • Returns:

    • uint256[] consolationWinners: The array of consolation winners.

    • uint8 consolationPoints: The points for the consolation winners.

getPotStatus

  • Description: Gets the pot status for the pot of a specific game.

  • Arguments:

    • _gameId: uint256 The ID of the game.

  • Returns:

    • bool: The status of the pot. If true, the pot iteration is finished and it can be claimed.

Last updated

Was this helpful?