Budokan: Key Functions
This section details the primary functions exposed by the Budokan tournament system. Each function is designed to be permissionless, composable, and secure.
create_tournament
fn create_tournament(
ref self: TState,
creator_rewards_address: ContractAddress,
metadata: Metadata,
schedule: Schedule,
game_config: GameConfig,
entry_fee: Option<EntryFee>,
entry_requirement: Option<EntryRequirement>,
) -> TournamentModel;Purpose: Create a new tournament with specified metadata, schedule, game configuration, entry fee, and requirements. Mints a game token to the creator for reward distribution.
Parameters:creator_rewards_address: Address to receive the creator's game token.metadata: Tournament metadata (name, description, etc.).schedule: Tournament schedule (registration, submission, finalization phases).game_config: Game configuration (game address, settings, prize spots).entry_fee: Optional entry fee (ERC20/721, amount, etc.).entry_requirement: Optional qualification requirement.
Returns: Tournament model struct.
enter_tournament
fn enter_tournament(
ref self: TState,
tournament_id: u64,
player_name: felt252,
player_address: ContractAddress,
qualification: Option<QualificationProof>,
) -> (u64, u32);Purpose: Register a player for a tournament, minting a game token and assigning an entry number.
Parameters:tournament_id: ID of the tournament to enter.player_name: Name of the player (felt252).player_address: Address to mint the game token to.qualification: Optional qualification proof.
Returns: Tuple of (game token ID, entry number).
submit_score
fn submit_score(
ref self: TState,
tournament_id: u64,
token_id: u64,
position: u8,
);Purpose: Submit a score/position for a tournament entry. Updates the leaderboard and marks the score as submitted.
Parameters:tournament_id: ID of the tournament.token_id: Game token ID for the entry.position: Leaderboard position (1-based index).
claim_prize
fn claim_prize(
ref self: TState,
tournament_id: u64,
prize_type: PrizeType,
);Purpose: Claim a prize for a tournament after it is finalized. Handles entry fee and custom prize types.
Parameters:tournament_id: ID of the tournament.prize_type: Type of prize to claim (entry fees, custom, etc.).
add_prize
fn add_prize(
ref self: TState,
tournament_id: u64,
token_address: ContractAddress,
token_type: TokenType,
position: u8,
) -> u64;Purpose: Add a new prize to a tournament for a specific leaderboard position.
Parameters:tournament_id: ID of the tournament.token_address: Address of the prize token.token_type: Type of token (ERC20, ERC721, etc.).position: Leaderboard position for the prize.
Returns: Prize ID.
register_token
fn register_token(
ref self: TState,
address: ContractAddress,
token_type: TokenType,
);Purpose: Register a new token (ERC20/ERC721) for use in tournaments.
Parameters:address: Token contract address.token_type: Type of token.
get_leaderboard
fn get_leaderboard(
self: @TState,
tournament_id: u64,
) -> Array<u64>;Purpose: Retrieve the current leaderboard for a tournament.
Parameters:tournament_id: ID of the tournament.
Returns: Array of game token IDs ordered by position.
Additional Functions
total_tournaments: Returns the total number of tournaments created.tournament: Returns the tournament model for a given ID.get_registration: Returns registration details for a game token.get_prize: Returns prize details for a given prize ID.tournament_entries: Returns the number of entries for a tournament.is_token_registered: Checks if a token is registered for tournaments.current_phase: Returns the current phase of a tournament.get_tournament_id_for_token_id: Returns the tournament ID for a given game token.