Shonen-Labs/Roster-Rumble

CONTRACT: Team Validation Contract

Open

#23 opened on 2025年4月23日

GitHub で見る
 (0 comments) (0 reactions) (0 assignees)TypeScript (11 forks)auto 404
ODHack 14contracthelp wanted

Repository metrics

Stars
 (4 stars)
PR merge metrics
 (PR metrics pending)

説明

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

コントリビューターガイド