Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions core/tests/epoch_accounts_hash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -451,7 +451,7 @@ fn test_snapshots_have_expected_epoch_accounts_hash() {
&test_environment.genesis_config_info.genesis_config,
&RuntimeConfig::default(),
None,
None,
Arc::<BuiltinPrograms>::default(),
AccountSecondaryIndexes::default(),
None,
AccountShrinkThreshold::default(),
Expand Down
8 changes: 4 additions & 4 deletions core/tests/snapshots.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -166,7 +166,7 @@ fn restore_from_snapshot(
old_genesis_config,
&RuntimeConfig::default(),
None,
None,
Arc::<BuiltinPrograms>::default(),
AccountSecondaryIndexes::default(),
None,
accounts_db::AccountShrinkThreshold::default(),
Expand Down Expand Up @@ -922,7 +922,7 @@ fn restore_from_snapshots_and_check_banks_are_equal(
genesis_config,
&RuntimeConfig::default(),
None,
None,
Arc::<BuiltinPrograms>::default(),
AccountSecondaryIndexes::default(),
None,
accounts_db::AccountShrinkThreshold::default(),
Expand Down Expand Up @@ -1144,7 +1144,7 @@ fn test_snapshots_with_background_services(
&snapshot_test_config.genesis_config_info.genesis_config,
&RuntimeConfig::default(),
None,
None,
Arc::<BuiltinPrograms>::default(),
AccountSecondaryIndexes::default(),
None,
accounts_db::AccountShrinkThreshold::default(),
Expand Down
5 changes: 3 additions & 2 deletions ledger/src/bank_forks_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -272,7 +273,7 @@ fn bank_forks_from_snapshot(
genesis_config,
&process_options.runtime_config,
process_options.debug_keys.clone(),
None,
Arc::<BuiltinPrograms>::default(),
process_options.account_indexes.clone(),
process_options.limit_load_slot_count_from_snapshot,
process_options.shrink_ratio,
Expand Down Expand Up @@ -324,7 +325,7 @@ fn bank_forks_from_snapshot(
genesis_config,
&process_options.runtime_config,
process_options.debug_keys.clone(),
None,
Arc::<BuiltinPrograms>::default(),
process_options.account_indexes.clone(),
process_options.limit_load_slot_count_from_snapshot,
process_options.shrink_ratio,
Expand Down
69 changes: 36 additions & 33 deletions runtime/src/bank.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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},
Expand Down Expand Up @@ -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: _,
Expand Down Expand Up @@ -754,7 +757,9 @@ pub struct Bank {
/// stream for the slot == self.slot
is_delta: AtomicBool,

builtin_programs: HashSet<Pubkey>,
builtins: Arc<BuiltinPrograms>,

builtin_program_ids: HashSet<Pubkey>,

/// Optional config parameters that can override runtime behavior
pub(crate) runtime_config: Arc<RuntimeConfig>,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -971,7 +979,8 @@ impl Bank {
stakes_cache: StakesCache::default(),
epoch_stakes: HashMap::<Epoch, EpochStakes>::default(),
is_delta: AtomicBool::default(),
builtin_programs: HashSet::<Pubkey>::default(),
builtins,
builtin_program_ids,
runtime_config: Arc::<RuntimeConfig>::default(),
rewards: RwLock::<Vec<(Pubkey, RewardInfo)>>::default(),
cluster_type: Option::<ClusterType>::default(),
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -1778,7 +1787,7 @@ impl Bank {
runtime_config: Arc<RuntimeConfig>,
fields: BankFieldsToDeserialize,
debug_keys: Option<Arc<HashSet<Pubkey>>>,
additional_builtins: Option<&[BuiltinPrototype]>,
builtins: Arc<BuiltinPrograms>,
debug_do_not_add_builtins: bool,
accounts_data_size_initial: u64,
) -> Self {
Expand All @@ -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,
Expand Down Expand Up @@ -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::<Pubkey>::default(),
builtins,
builtin_program_ids,
runtime_config,
rewards: RwLock::new(vec![]),
cluster_type: Some(genesis_config.cluster_type),
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -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,
);
Expand Down Expand Up @@ -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());

Expand All @@ -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,
Expand Down Expand Up @@ -6061,6 +6060,10 @@ impl Bank {
}
}

pub(crate) fn get_builtin_program_ids(&self) -> &HashSet<Pubkey> {
&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.
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -7339,7 +7342,7 @@ impl Bank {
only_apply_transitions_for_new_features: bool,
new_feature_activations: &HashSet<Pubkey>,
) {
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 {
Expand Down
6 changes: 3 additions & 3 deletions runtime/src/bank/builtin_programs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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() {
Expand All @@ -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);
}
}
10 changes: 8 additions & 2 deletions runtime/src/bank/metrics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
12 changes: 6 additions & 6 deletions runtime/src/bank/serde_snapshot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::{
Expand Down Expand Up @@ -265,7 +265,7 @@ mod tests {
&genesis_config,
&RuntimeConfig::default(),
None,
None,
Arc::<BuiltinPrograms>::default(),
AccountSecondaryIndexes::default(),
None,
AccountShrinkThreshold::default(),
Expand Down Expand Up @@ -394,7 +394,7 @@ mod tests {
&genesis_config,
&RuntimeConfig::default(),
None,
None,
Arc::<BuiltinPrograms>::default(),
AccountSecondaryIndexes::default(),
None,
AccountShrinkThreshold::default(),
Expand Down Expand Up @@ -484,7 +484,7 @@ mod tests {
&genesis_config,
&RuntimeConfig::default(),
None,
None,
Arc::<BuiltinPrograms>::default(),
AccountSecondaryIndexes::default(),
None,
AccountShrinkThreshold::default(),
Expand Down Expand Up @@ -578,7 +578,7 @@ mod tests {
&genesis_config,
&RuntimeConfig::default(),
None,
None,
Arc::<BuiltinPrograms>::default(),
AccountSecondaryIndexes::default(),
None,
AccountShrinkThreshold::default(),
Expand Down
Loading