solana_central/utilities/
is_legit_token.rs1use crate::CentralContext;
2use crate::constants::SOLANA_PROGRAMS;
3use solana_sdk::pubkey::Pubkey;
4use std::sync::Arc;
5
6pub fn is_legit_token(token_address: &Pubkey, central_context: &Arc<CentralContext>) -> bool {
14 let mut legit_tokens = central_context.legit_tokens.lock().unwrap();
15 if let Some(legit_token) = legit_tokens.get(token_address) {
16 return *legit_token;
17 }
18
19 let (metaplex_pda, _) = Pubkey::find_program_address(
21 &[
22 b"metadata",
23 SOLANA_PROGRAMS.metaplex_program.as_ref(),
24 token_address.as_ref(),
25 ],
26 &SOLANA_PROGRAMS.metaplex_program,
27 );
28
29 if let Ok(metaplex_pda_data) = central_context.json_rpc_client.get_account(&metaplex_pda) {
31 let metaplex_pda_data = metaplex_pda_data.data;
32 if metaplex_pda_data.len() < 33 {
34 return false;
35 }
36 let update_authority = Pubkey::new_from_array(metaplex_pda_data[1..33].try_into().unwrap());
37 let legit = central_context
39 .legit_update_authorities
40 .contains(&update_authority);
41 legit_tokens.insert(*token_address, legit);
42 return legit;
43 }
44 false
49}