Skip to content

CONTRACT: Automated Prize Distribution #28

@PoulavBhowmick03

Description

@PoulavBhowmick03

Title: Chainlink Automation Integration
Description
Create contract to trigger prize distribution via Chainlink Automation.

Acceptance Criteria:

  • Checks contest end time
  • Verifies all scores are finalized
  • Triggers PrizePool distribution
  • Emits PayoutExecuted event

Technical Details:

#[starknet::contract]
mod PayoutAutomation {
    #[storage]
    struct Storage {
        contests: LegacyMap<felt252, Contest>,
        merkle_root: felt252 // For score verification
    }

    #[external(v0)]
    fn check_upkeep(ref self: ContractState) -> bool {
        let contest = self.contests.read(contest_id);
        block_timestamp >= contest.end_time && 
        self.scores_finalized.read(contest_id)
    }

    #[external(v0)]
    fn perform_upkeep(ref self: ContractState, contest_id: felt252) {
        assert(self.check_upkeep(), 'Not ready');
        PrizePoolDispatcher { contract_address: PRIZE_POOL }
            .distribute_prizes(contest_id, self.merkle_root.read());
    }
}

Notes:

  • Implement Merkle proof verification
  • Add failed transaction handling
  • Test idempotent execution

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