airdrop/
lib.rs

1mod allocate;
2mod claim;
3mod create_campaign;
4mod create_mint;
5mod direct_transfer;
6mod initialize;
7mod mint_tokens;
8mod replenish;
9mod update_config;
10mod withdraw_fees;
11
12use airdrop_api::instruction::*;
13use steel::*;
14
15pub fn process_instruction(
16    program_id: &Pubkey,
17    accounts: &[AccountInfo],
18    data: &[u8],
19) -> ProgramResult {
20    let (ix, data) = parse_instruction(&airdrop_api::ID, program_id, data)?;
21
22    match ix {
23        // Public instructions
24        AirdropInstruction::CreateMint => create_mint::process_create_mint(accounts, data)?,
25        AirdropInstruction::CreateCampaign => {
26            create_campaign::process_create_campaign(accounts, data)?
27        }
28        AirdropInstruction::Allocate => allocate::process_allocate(accounts, data)?,
29        AirdropInstruction::Claim => claim::process_claim(accounts, data)?,
30        AirdropInstruction::DirectTransfer => {
31            direct_transfer::process_direct_transfer(accounts, data)?
32        }
33        AirdropInstruction::Replenish => replenish::process_replenish(accounts, data)?,
34        AirdropInstruction::MintTokens => mint_tokens::process_mint_tokens(accounts, data)?,
35
36        // Admin instructions
37        AirdropInstruction::Initialize => initialize::process_initialize(accounts, data)?,
38        AirdropInstruction::UpdateConfig => update_config::process_update_config(accounts, data)?,
39        AirdropInstruction::WithdrawFees => withdraw_fees::process_withdraw_fees(accounts, data)?,
40    }
41
42    Ok(())
43}
44
45entrypoint!(process_instruction);