From 264e811838647f99d5953d548695f494318d9bd5 Mon Sep 17 00:00:00 2001 From: Moody Salem Date: Thu, 21 Mar 2024 06:58:47 -0400 Subject: [PATCH] add an airdrop claim check contract --- src/airdrop_claim_check.cairo | 54 +++++++++++++++++++++++++++++++++++ src/lib.cairo | 1 + 2 files changed, 55 insertions(+) create mode 100644 src/airdrop_claim_check.cairo diff --git a/src/airdrop_claim_check.cairo b/src/airdrop_claim_check.cairo new file mode 100644 index 0000000..4e02c06 --- /dev/null +++ b/src/airdrop_claim_check.cairo @@ -0,0 +1,54 @@ +use starknet::{ContractAddress}; +use governance::airdrop::{IAirdropDispatcher}; + +#[derive(Serde, Copy, Drop)] +struct CheckParams { + airdrop: IAirdropDispatcher, + claim_id: u64, + amount: u128, +} + +#[derive(Serde, Copy, Drop)] +struct CheckResult { + claimed: bool, + funded: bool, +} + +#[starknet::interface] +trait IAirdropClaimCheck { + fn check(self: @TContractState, claims: Span) -> Span; +} + +#[starknet::contract] +mod AirdropClaimCheck { + use super::{IAirdropClaimCheck, IAirdropDispatcher, CheckParams, CheckResult}; + use governance::airdrop::{IAirdropDispatcherTrait}; + use governance::interfaces::erc20::{IERC20Dispatcher, IERC20DispatcherTrait}; + use core::array::{SpanTrait}; + use core::option::{OptionTrait}; + + #[storage] + struct Storage {} + + #[abi(embed_v0)] + impl AirdropClaimCheckImpl of IAirdropClaimCheck { + fn check(self: @ContractState, mut claims: Span) -> Span { + let mut result: Array = array![]; + + while let Option::Some(claim_check) = claims + .pop_front() { + let token = IERC20Dispatcher { + contract_address: (*claim_check.airdrop).get_token() + }; + let claimed = (*claim_check.airdrop).is_claimed(*claim_check.claim_id); + let funded = token + .balanceOf( + *claim_check.airdrop.contract_address + ) >= ((*claim_check.amount).into()); + result.append(CheckResult { claimed, funded }); + }; + + result.span() + } + } +} diff --git a/src/lib.cairo b/src/lib.cairo index e69211f..2ee83c8 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -1,3 +1,4 @@ +mod airdrop_claim_check; pub mod airdrop; #[cfg(test)]