diff --git a/core/tests/epoch_accounts_hash.rs b/core/tests/epoch_accounts_hash.rs index 76b5e4c30dd018..8f8abc713923e5 100755 --- a/core/tests/epoch_accounts_hash.rs +++ b/core/tests/epoch_accounts_hash.rs @@ -21,7 +21,7 @@ use { AbsRequestHandlers, AbsRequestSender, AccountsBackgroundService, DroppedSlotsReceiver, PrunedBanksRequestHandler, SnapshotRequestHandler, }, - bank::{epoch_accounts_hash_utils, Bank}, + bank::{epoch_accounts_hash_utils, Bank, BuiltinPrograms}, bank_forks::BankForks, genesis_utils::{self, GenesisConfigInfo}, snapshot_archive_info::SnapshotArchiveInfoGetter, @@ -451,7 +451,7 @@ fn test_snapshots_have_expected_epoch_accounts_hash() { &test_environment.genesis_config_info.genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), diff --git a/core/tests/snapshots.rs b/core/tests/snapshots.rs index 730277e2c12a65..cee031953db85a 100644 --- a/core/tests/snapshots.rs +++ b/core/tests/snapshots.rs @@ -23,7 +23,7 @@ use { AbsRequestHandlers, AbsRequestSender, AccountsBackgroundService, PrunedBanksRequestHandler, SendDroppedBankCallback, SnapshotRequestHandler, }, - bank::Bank, + bank::{Bank, BuiltinPrograms}, bank_forks::BankForks, genesis_utils::{create_genesis_config_with_leader, GenesisConfigInfo}, snapshot_archive_info::FullSnapshotArchiveInfo, @@ -166,7 +166,7 @@ fn restore_from_snapshot( old_genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, accounts_db::AccountShrinkThreshold::default(), @@ -922,7 +922,7 @@ fn restore_from_snapshots_and_check_banks_are_equal( genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, accounts_db::AccountShrinkThreshold::default(), @@ -1144,7 +1144,7 @@ fn test_snapshots_with_background_services( &snapshot_test_config.genesis_config_info.genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, accounts_db::AccountShrinkThreshold::default(), diff --git a/ledger/src/bank_forks_utils.rs b/ledger/src/bank_forks_utils.rs index 17412c1801ac68..44ce46e51eba8d 100644 --- a/ledger/src/bank_forks_utils.rs +++ b/ledger/src/bank_forks_utils.rs @@ -13,6 +13,7 @@ use { solana_accounts_db::accounts_update_notifier_interface::AccountsUpdateNotifier, solana_runtime::{ accounts_background_service::AbsRequestSender, + bank::BuiltinPrograms, bank_forks::BankForks, snapshot_archive_info::{ FullSnapshotArchiveInfo, IncrementalSnapshotArchiveInfo, SnapshotArchiveInfoGetter, @@ -272,7 +273,7 @@ fn bank_forks_from_snapshot( genesis_config, &process_options.runtime_config, process_options.debug_keys.clone(), - None, + Arc::::default(), process_options.account_indexes.clone(), process_options.limit_load_slot_count_from_snapshot, process_options.shrink_ratio, @@ -324,7 +325,7 @@ fn bank_forks_from_snapshot( genesis_config, &process_options.runtime_config, process_options.debug_keys.clone(), - None, + Arc::::default(), process_options.account_indexes.clone(), process_options.limit_load_slot_count_from_snapshot, process_options.shrink_ratio, diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 6d5c2345f92aca..5aaa01290f28f2 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -33,6 +33,8 @@ //! It offers a high-level API that signs transactions //! on behalf of the caller, and a low-level API for when they have //! already been signed and verified. + +pub use crate::builtins::BuiltinPrograms; #[cfg(feature = "dev-context-only-utils")] use solana_accounts_db::accounts_db::{ ACCOUNTS_DB_CONFIG_FOR_BENCHMARKS, ACCOUNTS_DB_CONFIG_FOR_TESTING, @@ -44,7 +46,7 @@ use { crate::{ bank::metrics::*, bank_forks::BankForks, - builtins::{BuiltinPrototype, BUILTINS}, + builtins::BuiltinPrototype, epoch_rewards_hasher::hash_rewards_into_partitions, epoch_stakes::{EpochStakes, NodeVoteAccounts}, installed_scheduler_pool::{BankWithScheduler, InstalledSchedulerRwLock}, @@ -528,7 +530,8 @@ impl PartialEq for Bank { epoch_stakes, is_delta, // TODO: Confirm if all these fields are intentionally ignored! - builtin_programs: _, + builtins: _, + builtin_program_ids: _, runtime_config: _, rewards: _, cluster_type: _, @@ -754,7 +757,9 @@ pub struct Bank { /// stream for the slot == self.slot is_delta: AtomicBool, - builtin_programs: HashSet, + builtins: Arc, + + builtin_program_ids: HashSet, /// Optional config parameters that can override runtime behavior pub(crate) runtime_config: Arc, @@ -932,6 +937,9 @@ pub(super) enum RewardInterval { impl Bank { fn default_with_accounts(accounts: Accounts) -> Self { + let builtins = Arc::new(BuiltinPrograms::default()); + let builtin_program_ids = builtins.get_program_ids(); + let mut bank = Self { skipped_rewrites: Mutex::default(), incremental_snapshot_persistence: None, @@ -971,7 +979,8 @@ impl Bank { stakes_cache: StakesCache::default(), epoch_stakes: HashMap::::default(), is_delta: AtomicBool::default(), - builtin_programs: HashSet::::default(), + builtins, + builtin_program_ids, runtime_config: Arc::::default(), rewards: RwLock::>::default(), cluster_type: Option::::default(), @@ -1049,11 +1058,7 @@ impl Bank { #[cfg(feature = "dev-context-only-utils")] bank.process_genesis_config(genesis_config, collector_id_for_tests); - bank.finish_init( - genesis_config, - additional_builtins, - debug_do_not_add_builtins, - ); + bank.finish_init(genesis_config, debug_do_not_add_builtins); // genesis needs stakes for all epochs up to the epoch implied by // slot = 0 and genesis configuration @@ -1226,8 +1231,10 @@ impl Bank { let (epoch_stakes, epoch_stakes_time_us) = measure_us!(parent.epoch_stakes.clone()); - let (builtin_programs, builtin_programs_time_us) = - measure_us!(parent.builtin_programs.clone()); + let (builtins, builtins_time_us) = measure_us!(parent.builtins.clone()); + + let (builtin_program_ids, builtin_program_ids_time_us) = + measure_us!(parent.builtin_program_ids.clone()); let (rewards_pool_pubkeys, rewards_pool_pubkeys_time_us) = measure_us!(parent.rewards_pool_pubkeys.clone()); @@ -1283,7 +1290,8 @@ impl Bank { ancestors: Ancestors::default(), hash: RwLock::new(Hash::default()), is_delta: AtomicBool::new(false), - builtin_programs, + builtins, + builtin_program_ids, tick_height: AtomicU64::new(parent.tick_height.load(Relaxed)), signature_count: AtomicU64::new(0), runtime_config: parent.runtime_config.clone(), @@ -1444,7 +1452,8 @@ impl Bank { blockhash_queue_time_us, stakes_cache_time_us, epoch_stakes_time_us, - builtin_programs_time_us, + builtins_time_us, + builtin_program_ids_time_us, rewards_pool_pubkeys_time_us, executor_cache_time_us: 0, transaction_debug_keys_time_us, @@ -1778,7 +1787,7 @@ impl Bank { runtime_config: Arc, fields: BankFieldsToDeserialize, debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, debug_do_not_add_builtins: bool, accounts_data_size_initial: u64, ) -> Self { @@ -1799,6 +1808,7 @@ impl Bank { a corrupted snapshot or bugs in cached accounts or accounts-db.", ); let stakes_accounts_load_duration = now.elapsed(); + let builtin_program_ids = builtins.get_program_ids(); let mut bank = Self { skipped_rewrites: Mutex::default(), incremental_snapshot_persistence: fields.incremental_snapshot_persistence, @@ -1839,7 +1849,8 @@ impl Bank { stakes_cache: StakesCache::new(stakes), epoch_stakes: fields.epoch_stakes, is_delta: AtomicBool::new(fields.is_delta), - builtin_programs: HashSet::::default(), + builtins, + builtin_program_ids, runtime_config, rewards: RwLock::new(vec![]), cluster_type: Some(genesis_config.cluster_type), @@ -1875,11 +1886,7 @@ impl Bank { bank.loaded_programs_cache.clone(), ); - bank.finish_init( - genesis_config, - additional_builtins, - debug_do_not_add_builtins, - ); + bank.finish_init(genesis_config, debug_do_not_add_builtins); bank.fill_missing_sysvar_cache_entries(); bank.rebuild_skipped_rewrites(); @@ -4650,7 +4657,7 @@ impl Bank { recording_config, timings, account_overrides, - self.builtin_programs.iter(), + self.builtin_program_ids.iter(), log_messages_bytes_limit, limit_to_load_programs, ); @@ -5975,12 +5982,7 @@ impl Bank { self.rc.accounts.clone() } - fn finish_init( - &mut self, - genesis_config: &GenesisConfig, - additional_builtins: Option<&[BuiltinPrototype]>, - debug_do_not_add_builtins: bool, - ) { + fn finish_init(&mut self, genesis_config: &GenesisConfig, debug_do_not_add_builtins: bool) { self.rewards_pool_pubkeys = Arc::new(genesis_config.rewards_pools.keys().cloned().collect()); @@ -5990,10 +5992,7 @@ impl Bank { ); if !debug_do_not_add_builtins { - for builtin in BUILTINS - .iter() - .chain(additional_builtins.unwrap_or(&[]).iter()) - { + for builtin in self.builtins.clone().iter() { if builtin.feature_id.is_none() { self.add_builtin( builtin.program_id, @@ -6061,6 +6060,10 @@ impl Bank { } } + pub(crate) fn get_builtin_program_ids(&self) -> &HashSet { + &self.builtin_program_ids + } + // Hi! leaky abstraction here.... // try to use get_account_with_fixed_root() if it's called ONLY from on-chain runtime account // processing. That alternative fn provides more safety. @@ -7089,7 +7092,7 @@ impl Bank { pub fn add_builtin(&mut self, program_id: Pubkey, name: String, builtin: LoadedProgram) { debug!("Adding program {} under {:?}", name, program_id); self.add_builtin_account(name.as_str(), &program_id, false); - self.builtin_programs.insert(program_id); + self.builtin_program_ids.insert(program_id); self.loaded_programs_cache .write() .unwrap() @@ -7339,7 +7342,7 @@ impl Bank { only_apply_transitions_for_new_features: bool, new_feature_activations: &HashSet, ) { - for builtin in BUILTINS.iter() { + for builtin in self.builtins.clone().iter() { if let Some(feature_id) = builtin.feature_id { let should_apply_action_for_feature_transition = if only_apply_transitions_for_new_features { diff --git a/runtime/src/bank/builtin_programs.rs b/runtime/src/bank/builtin_programs.rs index 138895ecb72ac2..34b911565b602f 100644 --- a/runtime/src/bank/builtin_programs.rs +++ b/runtime/src/bank/builtin_programs.rs @@ -13,7 +13,7 @@ mod tests { let mut bank = Bank::new_for_tests(&genesis_config); bank.feature_set = Arc::new(FeatureSet::all_enabled()); - bank.finish_init(&genesis_config, None, false); + bank.finish_init(&genesis_config, false); // Overwrite precompile accounts to simulate a cluster which already added precompiles. for precompile in get_precompiles() { @@ -48,7 +48,7 @@ mod tests { let mut bank = Bank::new_for_tests(&genesis_config); bank.feature_set = Arc::new(FeatureSet::all_enabled()); - bank.finish_init(&genesis_config, None, false); + bank.finish_init(&genesis_config, false); // Overwrite precompile accounts to simulate a cluster which already added precompiles. for precompile in get_precompiles() { @@ -59,6 +59,6 @@ mod tests { bank.freeze(); // Simulate starting up from snapshot finishing the initialization for a frozen bank - bank.finish_init(&genesis_config, None, false); + bank.finish_init(&genesis_config, false); } } diff --git a/runtime/src/bank/metrics.rs b/runtime/src/bank/metrics.rs index fd2c19473931d8..6b8a6f042f5ff6 100644 --- a/runtime/src/bank/metrics.rs +++ b/runtime/src/bank/metrics.rs @@ -31,7 +31,8 @@ pub(crate) struct NewBankTimings { pub(crate) blockhash_queue_time_us: u64, pub(crate) stakes_cache_time_us: u64, pub(crate) epoch_stakes_time_us: u64, - pub(crate) builtin_programs_time_us: u64, + pub(crate) builtins_time_us: u64, + pub(crate) builtin_program_ids_time_us: u64, pub(crate) rewards_pool_pubkeys_time_us: u64, pub(crate) executor_cache_time_us: u64, pub(crate) transaction_debug_keys_time_us: u64, @@ -125,7 +126,12 @@ pub(crate) fn report_new_bank_metrics( ("blockhash_queue_us", timings.blockhash_queue_time_us, i64), ("stakes_cache_us", timings.stakes_cache_time_us, i64), ("epoch_stakes_time_us", timings.epoch_stakes_time_us, i64), - ("builtin_programs_us", timings.builtin_programs_time_us, i64), + ("builtins_us", timings.builtins_time_us, i64), + ( + "builtin_program_ids_us", + timings.builtin_program_ids_time_us, + i64 + ), ( "rewards_pool_pubkeys_us", timings.rewards_pool_pubkeys_time_us, diff --git a/runtime/src/bank/serde_snapshot.rs b/runtime/src/bank/serde_snapshot.rs index f5b1653e8d6311..92d761e6cf9076 100644 --- a/runtime/src/bank/serde_snapshot.rs +++ b/runtime/src/bank/serde_snapshot.rs @@ -3,8 +3,8 @@ mod tests { use { crate::{ bank::{ - epoch_accounts_hash_utils, test_utils as bank_test_utils, Bank, EpochRewardStatus, - StartBlockHeightAndRewards, + epoch_accounts_hash_utils, test_utils as bank_test_utils, Bank, BuiltinPrograms, + EpochRewardStatus, StartBlockHeightAndRewards, }, genesis_utils::activate_all_features, serde_snapshot::{ @@ -265,7 +265,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -394,7 +394,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -484,7 +484,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -578,7 +578,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), diff --git a/runtime/src/bank/tests.rs b/runtime/src/bank/tests.rs index 29dbdc2e5aeacd..da616c988b4647 100644 --- a/runtime/src/bank/tests.rs +++ b/runtime/src/bank/tests.rs @@ -8213,7 +8213,7 @@ fn test_program_is_native_loader() { fn test_debug_bank() { let (genesis_config, _mint_keypair) = create_genesis_config(50000); let mut bank = Bank::new_for_tests(&genesis_config); - bank.finish_init(&genesis_config, None, false); + bank.finish_init(&genesis_config, false); let debug = format!("{bank:#?}"); assert!(!debug.is_empty()); } @@ -13746,7 +13746,7 @@ fn test_rebuild_skipped_rewrites() { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), diff --git a/runtime/src/builtins.rs b/runtime/src/builtins.rs index 2c7c36fa0ec415..a7ebbb938163ef 100644 --- a/runtime/src/builtins.rs +++ b/runtime/src/builtins.rs @@ -3,6 +3,7 @@ use { solana_sdk::{ bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, feature_set, pubkey::Pubkey, }, + std::collections::HashSet, }; /// Transitions of built-in programs at epoch bondaries when features are activated. @@ -40,71 +41,92 @@ impl solana_frozen_abi::abi_example::AbiExample for BuiltinPrototype { } } -pub static BUILTINS: &[BuiltinPrototype] = &[ - BuiltinPrototype { - feature_id: None, - program_id: solana_system_program::id(), - name: "system_program", - entrypoint: solana_system_program::system_processor::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: None, - program_id: solana_vote_program::id(), - name: "vote_program", - entrypoint: solana_vote_program::vote_processor::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: None, - program_id: solana_stake_program::id(), - name: "stake_program", - entrypoint: solana_stake_program::stake_instruction::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: None, - program_id: solana_config_program::id(), - name: "config_program", - entrypoint: solana_config_program::config_processor::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: None, - program_id: bpf_loader_deprecated::id(), - name: "solana_bpf_loader_deprecated_program", - entrypoint: solana_bpf_loader_program::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: None, - program_id: bpf_loader::id(), - name: "solana_bpf_loader_program", - entrypoint: solana_bpf_loader_program::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: None, - program_id: bpf_loader_upgradeable::id(), - name: "solana_bpf_loader_upgradeable_program", - entrypoint: solana_bpf_loader_program::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: None, - program_id: solana_sdk::compute_budget::id(), - name: "compute_budget_program", - entrypoint: solana_compute_budget_program::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: None, - program_id: solana_sdk::address_lookup_table::program::id(), - name: "address_lookup_table_program", - entrypoint: solana_address_lookup_table_program::processor::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: Some(feature_set::zk_token_sdk_enabled::id()), - program_id: solana_zk_token_sdk::zk_token_proof_program::id(), - name: "zk_token_proof_program", - entrypoint: solana_zk_token_proof_program::Entrypoint::vm, - }, - BuiltinPrototype { - feature_id: Some(feature_set::enable_program_runtime_v2_and_loader_v4::id()), - program_id: solana_sdk::loader_v4::id(), - name: "loader_v4", - entrypoint: solana_loader_v4_program::Entrypoint::vm, - }, -]; +#[derive(Debug)] +pub struct BuiltinPrograms(Vec); + +impl BuiltinPrograms { + pub fn new(builtins: Vec) -> BuiltinPrograms { + BuiltinPrograms(builtins) + } + + pub fn iter(&self) -> impl Iterator { + self.0.iter() + } + + pub fn get_program_ids(&self) -> HashSet { + self.0.iter().map(|p| p.program_id).collect() + } +} + +impl Default for BuiltinPrograms { + fn default() -> Self { + BuiltinPrograms(vec![ + BuiltinPrototype { + feature_id: None, + program_id: solana_system_program::id(), + name: "system_program", + entrypoint: solana_system_program::system_processor::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: None, + program_id: solana_vote_program::id(), + name: "vote_program", + entrypoint: solana_vote_program::vote_processor::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: None, + program_id: solana_stake_program::id(), + name: "stake_program", + entrypoint: solana_stake_program::stake_instruction::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: None, + program_id: solana_config_program::id(), + name: "config_program", + entrypoint: solana_config_program::config_processor::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: None, + program_id: bpf_loader_deprecated::id(), + name: "solana_bpf_loader_deprecated_program", + entrypoint: solana_bpf_loader_program::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: None, + program_id: bpf_loader::id(), + name: "solana_bpf_loader_program", + entrypoint: solana_bpf_loader_program::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: None, + program_id: bpf_loader_upgradeable::id(), + name: "solana_bpf_loader_upgradeable_program", + entrypoint: solana_bpf_loader_program::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: None, + program_id: solana_sdk::compute_budget::id(), + name: "compute_budget_program", + entrypoint: solana_compute_budget_program::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: None, + program_id: solana_sdk::address_lookup_table::program::id(), + name: "address_lookup_table_program", + entrypoint: solana_address_lookup_table_program::processor::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: Some(feature_set::zk_token_sdk_enabled::id()), + program_id: solana_zk_token_sdk::zk_token_proof_program::id(), + name: "zk_token_proof_program", + entrypoint: solana_zk_token_proof_program::Entrypoint::vm, + }, + BuiltinPrototype { + feature_id: Some(feature_set::enable_program_runtime_v2_and_loader_v4::id()), + program_id: solana_sdk::loader_v4::id(), + name: "loader_v4", + entrypoint: solana_loader_v4_program::Entrypoint::vm, + }, + ]) + } +} diff --git a/runtime/src/serde_snapshot.rs b/runtime/src/serde_snapshot.rs index 8e678044e23670..eb87539e74c2bd 100644 --- a/runtime/src/serde_snapshot.rs +++ b/runtime/src/serde_snapshot.rs @@ -1,7 +1,7 @@ use { crate::{ bank::{Bank, BankFieldsToDeserialize, BankRc}, - builtins::BuiltinPrototype, + builtins::{BuiltinPrograms, BuiltinPrototype}, epoch_stakes::EpochStakes, serde_snapshot::storage::SerializableAccountStorageEntry, snapshot_utils::{ @@ -356,7 +356,7 @@ pub(crate) fn bank_from_streams( genesis_config: &GenesisConfig, runtime_config: &RuntimeConfig, debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, account_secondary_indexes: AccountSecondaryIndexes, limit_load_slot_count_from_snapshot: Option, shrink_ratio: AccountShrinkThreshold, @@ -377,7 +377,7 @@ where account_paths, storage_and_next_append_vec_id, debug_keys, - additional_builtins, + builtins, account_secondary_indexes, limit_load_slot_count_from_snapshot, shrink_ratio, @@ -583,7 +583,7 @@ fn reconstruct_bank_from_fields( account_paths: &[PathBuf], storage_and_next_append_vec_id: StorageAndNextAppendVecId, debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, account_secondary_indexes: AccountSecondaryIndexes, limit_load_slot_count_from_snapshot: Option, shrink_ratio: AccountShrinkThreshold, @@ -631,7 +631,7 @@ where runtime_config, bank_fields, debug_keys, - additional_builtins, + builtins, debug_do_not_add_builtins, reconstructed_accounts_db_info.accounts_data_len, ); diff --git a/runtime/src/snapshot_bank_utils.rs b/runtime/src/snapshot_bank_utils.rs index ab3a76fc80945a..1392f1da9c16ce 100644 --- a/runtime/src/snapshot_bank_utils.rs +++ b/runtime/src/snapshot_bank_utils.rs @@ -1,7 +1,7 @@ use { crate::{ bank::{Bank, BankFieldsToDeserialize, BankSlotDelta}, - builtins::BuiltinPrototype, + builtins::{BuiltinPrograms, BuiltinPrototype}, serde_snapshot::{ bank_from_streams, bank_to_stream, fields_from_streams, BankIncrementalSnapshotPersistence, SerdeStyle, @@ -270,7 +270,7 @@ pub fn bank_from_snapshot_archives( genesis_config: &GenesisConfig, runtime_config: &RuntimeConfig, debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, account_secondary_indexes: AccountSecondaryIndexes, limit_load_slot_count_from_snapshot: Option, shrink_ratio: AccountShrinkThreshold, @@ -327,7 +327,7 @@ pub fn bank_from_snapshot_archives( genesis_config, runtime_config, debug_keys, - additional_builtins, + builtins, account_secondary_indexes, limit_load_slot_count_from_snapshot, shrink_ratio, @@ -420,7 +420,7 @@ pub fn bank_from_latest_snapshot_archives( genesis_config: &GenesisConfig, runtime_config: &RuntimeConfig, debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, account_secondary_indexes: AccountSecondaryIndexes, limit_load_slot_count_from_snapshot: Option, shrink_ratio: AccountShrinkThreshold, @@ -454,7 +454,7 @@ pub fn bank_from_latest_snapshot_archives( genesis_config, runtime_config, debug_keys, - additional_builtins, + builtins, account_secondary_indexes, limit_load_slot_count_from_snapshot, shrink_ratio, @@ -482,7 +482,7 @@ pub fn bank_from_snapshot_dir( genesis_config: &GenesisConfig, runtime_config: &RuntimeConfig, debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, account_secondary_indexes: AccountSecondaryIndexes, limit_load_slot_count_from_snapshot: Option, shrink_ratio: AccountShrinkThreshold, @@ -528,7 +528,7 @@ pub fn bank_from_snapshot_dir( genesis_config, runtime_config, debug_keys, - additional_builtins, + builtins, account_secondary_indexes, limit_load_slot_count_from_snapshot, shrink_ratio, @@ -565,7 +565,7 @@ pub fn bank_from_latest_snapshot_dir( runtime_config: &RuntimeConfig, account_paths: &[PathBuf], debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, account_secondary_indexes: AccountSecondaryIndexes, limit_load_slot_count_from_snapshot: Option, shrink_ratio: AccountShrinkThreshold, @@ -584,7 +584,7 @@ pub fn bank_from_latest_snapshot_dir( genesis_config, runtime_config, debug_keys, - additional_builtins, + builtins, account_secondary_indexes, limit_load_slot_count_from_snapshot, shrink_ratio, @@ -690,7 +690,7 @@ fn rebuild_bank_from_unarchived_snapshots( genesis_config: &GenesisConfig, runtime_config: &RuntimeConfig, debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, account_secondary_indexes: AccountSecondaryIndexes, limit_load_slot_count_from_snapshot: Option, shrink_ratio: AccountShrinkThreshold, @@ -739,7 +739,7 @@ fn rebuild_bank_from_unarchived_snapshots( genesis_config, runtime_config, debug_keys, - additional_builtins, + builtins, account_secondary_indexes, limit_load_slot_count_from_snapshot, shrink_ratio, @@ -786,7 +786,7 @@ fn rebuild_bank_from_snapshot( genesis_config: &GenesisConfig, runtime_config: &RuntimeConfig, debug_keys: Option>>, - additional_builtins: Option<&[BuiltinPrototype]>, + builtins: Arc, account_secondary_indexes: AccountSecondaryIndexes, limit_load_slot_count_from_snapshot: Option, shrink_ratio: AccountShrinkThreshold, @@ -814,7 +814,7 @@ fn rebuild_bank_from_snapshot( genesis_config, runtime_config, debug_keys, - additional_builtins, + builtins, account_secondary_indexes, limit_load_slot_count_from_snapshot, shrink_ratio, @@ -1334,7 +1334,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -1450,7 +1450,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -1586,7 +1586,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -1712,7 +1712,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -1855,7 +1855,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -1923,7 +1923,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -2271,7 +2271,7 @@ mod tests { &genesis_config_info.genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -2346,7 +2346,7 @@ mod tests { &genesis_config, &RuntimeConfig::default(), None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), @@ -2388,7 +2388,7 @@ mod tests { &RuntimeConfig::default(), account_paths, None, - None, + Arc::::default(), AccountSecondaryIndexes::default(), None, AccountShrinkThreshold::default(), diff --git a/runtime/src/snapshot_minimizer.rs b/runtime/src/snapshot_minimizer.rs index 15fe706dc0e504..d49e43fce19c1c 100644 --- a/runtime/src/snapshot_minimizer.rs +++ b/runtime/src/snapshot_minimizer.rs @@ -1,7 +1,7 @@ //! Used to create minimal snapshots - separated here to keep accounts_db simpler use { - crate::{bank::Bank, builtins::BUILTINS, static_ids}, + crate::{bank::Bank, static_ids}, dashmap::DashSet, log::info, rayon::{ @@ -113,9 +113,14 @@ impl<'a> SnapshotMinimizer<'a> { /// Used to get builtin accounts in `minimize` fn get_builtins(&self) { - BUILTINS.iter().for_each(|e| { - self.minimized_account_set.insert(e.program_id); - }); + // Use the bank's builtins, since some builtins from the static + // `BUILTINS` list may have been migrated to Core BPF. + self.bank + .get_builtin_program_ids() + .iter() + .for_each(|program_id| { + self.minimized_account_set.insert(*program_id); + }); } /// Used to get static runtime accounts in `minimize`