solana_router_main/
remove_farm.rs

1//! Removes Farm's metadata from chain
2
3use {
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    // validate accounts
25    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    // update ref storage
51    msg!("Updating refdb storage");
52    let _ = RefDB::delete_with_name(*refdb_account.try_borrow_mut_data()?, name, refdb_index);
53
54    // close metadata account
55    msg!("Closing metadata account");
56    close_system_account(signer_account, target_account, program_id)?;
57
58    msg!("RemoveFarm complete");
59
60    Ok(())
61}