light_client/rpc/
lut.rs

1pub use solana_address_lookup_table_interface::{
2    error, instruction, program, state::AddressLookupTable,
3};
4use solana_message::AddressLookupTableAccount;
5use solana_pubkey::Pubkey;
6use solana_rpc_client::rpc_client::RpcClient;
7
8use crate::rpc::errors::RpcError;
9
10/// Gets a lookup table account state from the network.
11///
12/// # Arguments
13///
14/// * `client` - The RPC client to use to get the lookup table account state.
15/// * `lookup_table_address` - The address of the lookup table account to get.
16///
17/// # Returns
18///
19/// * `AddressLookupTableAccount` - The lookup table account state.
20pub fn load_lookup_table(
21    client: &RpcClient,
22    lookup_table_address: &Pubkey,
23) -> Result<AddressLookupTableAccount, RpcError> {
24    let raw_account = client.get_account(lookup_table_address)?;
25    let address_lookup_table = AddressLookupTable::deserialize(&raw_account.data).map_err(|e| {
26        RpcError::CustomError(format!("Failed to deserialize AddressLookupTable: {e:?}"))
27    })?;
28    let address_lookup_table_account = AddressLookupTableAccount {
29        key: lookup_table_address.to_bytes().into(),
30        addresses: address_lookup_table
31            .addresses
32            .iter()
33            .map(|p| p.to_bytes().into())
34            .collect(),
35    };
36    Ok(address_lookup_table_account)
37}