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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions