solana_runtime/bank/
address_lookup_table.rs1use {
2 super::Bank,
3 crate::accounts_db::LoadZeroLamports,
4 solana_address_lookup_table_program::error::AddressLookupError,
5 solana_sdk::{
6 feature_set::return_none_for_zero_lamport_accounts,
7 message::{
8 v0::{LoadedAddresses, MessageAddressTableLookup},
9 AddressLoaderError,
10 },
11 transaction::AddressLoader,
12 },
13};
14
15impl AddressLoader for &Bank {
16 fn load_addresses(
17 self,
18 address_table_lookups: &[MessageAddressTableLookup],
19 ) -> Result<LoadedAddresses, AddressLoaderError> {
20 if !self.versioned_tx_message_enabled() {
21 return Err(AddressLoaderError::Disabled);
22 }
23
24 let load_zero_lamports = if self
25 .feature_set
26 .is_active(&return_none_for_zero_lamport_accounts::id())
27 {
28 LoadZeroLamports::None
29 } else {
30 LoadZeroLamports::SomeWithZeroLamportAccount
31 };
32
33 let slot_hashes = self
34 .sysvar_cache
35 .read()
36 .unwrap()
37 .get_slot_hashes()
38 .map_err(|_| AddressLoaderError::SlotHashesSysvarNotFound)?;
39
40 Ok(address_table_lookups
41 .iter()
42 .map(|address_table_lookup| {
43 self.rc.accounts.load_lookup_table_addresses(
44 &self.ancestors,
45 address_table_lookup,
46 &slot_hashes,
47 load_zero_lamports,
48 )
49 })
50 .collect::<Result<_, AddressLookupError>>()?)
51 }
52}