solana_router_main/
remove_farm.rs1use {
4 crate::refdb_init::{check_or_init_refdb, check_or_init_refdb_target},
5 solana_farm_sdk::{
6 program::account::close_system_account, refdb, refdb::RefDB, string::ArrayString64,
7 },
8 solana_program::{
9 account_info::{next_account_info, AccountInfo},
10 entrypoint::ProgramResult,
11 msg,
12 pubkey::Pubkey,
13 },
14};
15
16pub fn remove_farm(
17 program_id: &Pubkey,
18 accounts: &[AccountInfo],
19 name: &ArrayString64,
20 refdb_index: Option<u32>,
21) -> ProgramResult {
22 msg!("Processing MainInstruction::RemoveFarm");
23
24 let accounts_iter = &mut accounts.iter();
26
27 let signer_account = next_account_info(accounts_iter)?;
28 let _multisig_account = next_account_info(accounts_iter)?;
29 let refdb_account = next_account_info(accounts_iter)?;
30 let target_account = next_account_info(accounts_iter)?;
31
32 check_or_init_refdb(
33 program_id,
34 signer_account,
35 refdb_account,
36 refdb::StorageType::Farm,
37 0,
38 true,
39 )?;
40 check_or_init_refdb_target(
41 program_id,
42 signer_account,
43 target_account,
44 refdb::StorageType::Farm,
45 name,
46 0,
47 true,
48 )?;
49
50 msg!("Updating refdb storage");
52 let _ = RefDB::delete_with_name(*refdb_account.try_borrow_mut_data()?, name, refdb_index);
53
54 msg!("Closing metadata account");
56 close_system_account(signer_account, target_account, program_id)?;
57
58 msg!("RemoveFarm complete");
59
60 Ok(())
61}