Skip to content

CONTRACT: Team Validation Contract #23

@PoulavBhowmick03

Description

@PoulavBhowmick03

Title: Implement Fantasy Team Composition Rules
Description
Create a Cairo 2.0 contract to enforce fantasy team rules (player positions, salary cap, captain selection).

Acceptance Criteria:

  • Validates team has exactly 11 players
  • Ensures 1 goalkeeper, 3-5 defenders, 3-5 midfielders, 1-3 forwards
  • Verifies total player salaries ≤ 100M "SportSparX Bucks"
  • Requires exactly 1 captain (2x points multiplier)
  • Returns validation errors with error codes

Technical Details:

#[starknet::contract]
mod TeamValidation {
    #[derive(Drop, Serde)]
    struct Player {
        position: u8, // 0=GK, 1=DEF, 2=MID, 3=FWD
        salary: u64,
        is_captain: bool
    }

    #[external(v0)]
    fn validate_team(ref self: ContractState, players: Array<Player>) -> Result<(), u8> {
        let mut total_salary = 0;
        let mut captain_count = 0;
        let mut position_counts = [0; 4];

        for player in players.iter() {
            // Position validation
            if player.position > 3 { return Result::Err(1) }
            position_counts[player.position] += 1;

            // Salary cap
            total_salary += player.salary;
            if total_salary > 100_000_000 { return Result::Err(2) }

            // Captain check
            if player.is_captain {
                captain_count += 1;
                if captain_count > 1 { return Result::Err(3) }
            }
        }

        // Team composition rules
        if players.len() != 11 { return Result::Err(4) }
        if position_counts[0] != 1 { return Result::Err(5) } // GK
        if position_counts[1] < 3 || position_counts[1] > 5 { return Result::Err(6) } // DEF
        if position_counts[2] < 3 || position_counts[2] > 5 { return Result::Err(7) } // MID
        if position_counts[3] < 1 || position_counts[3] > 3 { return Result::Err(8) } // FWD
        
        Result::Ok(())
    }
}

Notes:

  • Use custom error codes for client-side translation
  • Add unit tests for all validation scenarios
  • Implement gas optimization with early returns

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions