Skip to content

Commit

Permalink
Port BPFLoader2 activation to FeatureSet and rework built-in program …
Browse files Browse the repository at this point in the history
…activation
  • Loading branch information
mvines committed Sep 28, 2020
1 parent 6071d0d commit 31696a1
Show file tree
Hide file tree
Showing 26 changed files with 251 additions and 703 deletions.
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ members = [
"perf",
"validator",
"genesis",
"genesis-programs",
"gossip",
"install",
"keygen",
Expand Down
2 changes: 1 addition & 1 deletion core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ serde_derive = "1.0.103"
serde_json = "1.0.56"
solana-account-decoder = { path = "../account-decoder", version = "1.4.0" }
solana-banks-server = { path = "../banks-server", version = "1.4.0" }
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "1.4.0" }
solana-clap-utils = { path = "../clap-utils", version = "1.4.0" }
solana-client = { path = "../client", version = "1.4.0" }
solana-faucet = { path = "../faucet", version = "1.4.0" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.4.0" }
solana-ledger = { path = "../ledger", version = "1.4.0" }
solana-logger = { path = "../logger", version = "1.4.0" }
solana-merkle-tree = { path = "../merkle-tree", version = "1.4.0" }
Expand Down
44 changes: 44 additions & 0 deletions core/src/builtins.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
use solana_runtime::{
bank::{Builtin, Builtins, Entrypoint},
feature_set,
};
use solana_sdk::{genesis_config::ClusterType, pubkey::Pubkey};

/// Builtin programs that are always available
fn genesis_builtins(cluster_type: ClusterType) -> Vec<Builtin> {
let builtins = if cluster_type != ClusterType::MainnetBeta {
vec![
solana_bpf_loader_deprecated_program!(),
solana_bpf_loader_program!(),
]
} else {
// Remove this `else` block and the `cluster_type` argument to this function once
// `feature_set::bpf_loader2_program::id()` is active on Mainnet Beta
vec![solana_bpf_loader_deprecated_program!()]
};

builtins
.into_iter()
.map(|b| Builtin::new(&b.0, b.1, Entrypoint::Loader(b.2)))
.collect()
}

/// Builtin programs activated dynamically by feature
fn feature_builtins() -> Vec<(Builtin, Pubkey)> {
let builtins = vec![(
solana_bpf_loader_program!(),
feature_set::bpf_loader2_program::id(),
)];

builtins
.into_iter()
.map(|(b, p)| (Builtin::new(&b.0, b.1, Entrypoint::Loader(b.2)), p))
.collect()
}

pub(crate) fn get(cluster_type: ClusterType) -> Builtins {
Builtins {
genesis_builtins: genesis_builtins(cluster_type),
feature_builtins: feature_builtins(),
}
}
4 changes: 4 additions & 0 deletions core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@
//! command-line tools to spin up validators and a Rust library
//!
#[macro_use]
extern crate solana_bpf_loader_program;

pub mod accounts_background_service;
pub mod accounts_hash_verifier;
pub mod banking_stage;
pub mod bigtable_upload_service;
pub mod broadcast_stage;
mod builtins;
pub mod cache_block_time_service;
pub mod cluster_info_vote_listener;
pub mod commitment_service;
Expand Down
1 change: 1 addition & 0 deletions core/src/test_validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ impl TestValidator {
&Pubkey::new_rand(),
42,
bootstrap_validator_lamports,
solana_sdk::genesis_config::ClusterType::Development,
);
genesis_config.rent.lamports_per_byte_year = 1;
genesis_config.rent.exemption_threshold = 1.0;
Expand Down
2 changes: 2 additions & 0 deletions core/src/validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
use crate::{
broadcast_stage::BroadcastStageType,
builtins,
cache_block_time_service::{CacheBlockTimeSender, CacheBlockTimeService},
cluster_info::{ClusterInfo, Node},
cluster_info_vote_listener::VoteTracker,
Expand Down Expand Up @@ -791,6 +792,7 @@ fn new_banks_from_ledger(
new_hard_forks: config.new_hard_forks.clone(),
frozen_accounts: config.frozen_accounts.clone(),
debug_keys: config.debug_keys.clone(),
additional_builtins: Some(builtins::get(genesis_config.cluster_type)),
..blockstore_processor::ProcessOptions::default()
};

Expand Down
2 changes: 2 additions & 0 deletions core/tests/bank_forks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ mod tests {
vec![accounts_dir.path().to_path_buf()],
&[],
None,
None,
);
bank0.freeze();
let mut bank_forks = BankForks::new(bank0);
Expand Down Expand Up @@ -143,6 +144,7 @@ mod tests {
CompressionType::Bzip2,
old_genesis_config,
None,
None,
)
.unwrap();

Expand Down
25 changes: 0 additions & 25 deletions genesis-programs/Cargo.toml

This file was deleted.

190 changes: 0 additions & 190 deletions genesis-programs/src/lib.rs

This file was deleted.

6 changes: 4 additions & 2 deletions genesis/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,17 @@ chrono = "0.4"
serde = "1.0.112"
serde_json = "1.0.56"
serde_yaml = "0.8.13"
solana-budget-program = { path = "../programs/budget", version = "1.4.0" }
solana-clap-utils = { path = "../clap-utils", version = "1.4.0" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.4.0" }
solana-exchange-program = { path = "../programs/exchange", version = "1.4.0" }
solana-ledger = { path = "../ledger", version = "1.4.0" }
solana-logger = { path = "../logger", version = "1.4.0" }
solana-runtime = { path = "../runtime", version = "1.4.0" }
solana-sdk = { path = "../sdk", version = "1.4.0" }
solana-stake-program = { path = "../programs/stake", version = "1.4.0" }
solana-vote-program = { path = "../programs/vote", version = "1.4.0" }
solana-version = { path = "../version", version = "1.4.0" }
solana-vest-program = { path = "../programs/vest", version = "1.4.0" }
solana-vote-program = { path = "../programs/vote", version = "1.4.0" }
tempfile = "3.1.0"

[[bin]]
Expand Down
22 changes: 19 additions & 3 deletions genesis/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
//! A command-line executable for generating the chain's genesis config.
#[macro_use]
extern crate solana_budget_program;
#[macro_use]
extern crate solana_exchange_program;
#[macro_use]
extern crate solana_vest_program;

use clap::{crate_description, crate_name, value_t, value_t_or_exit, App, Arg, ArgMatches};
use solana_clap_utils::{
input_parsers::{cluster_type_of, pubkey_of, pubkeys_of, unix_timestamp_from_rfc3339_datetime},
Expand Down Expand Up @@ -462,8 +469,15 @@ fn main() -> Result<(), Box<dyn error::Error>> {
matches.is_present("enable_warmup_epochs"),
);

let native_instruction_processors =
solana_genesis_programs::get_native_programs_for_genesis(cluster_type);
let native_instruction_processors = if cluster_type == ClusterType::Development {
vec![
solana_vest_program!(),
solana_budget_program!(),
solana_exchange_program!(),
]
} else {
vec![]
};

let mut genesis_config = GenesisConfig {
native_instruction_processors,
Expand Down Expand Up @@ -526,7 +540,9 @@ fn main() -> Result<(), Box<dyn error::Error>> {
}

solana_stake_program::add_genesis_accounts(&mut genesis_config);
solana_runtime::genesis_utils::add_feature_accounts(&mut genesis_config);
if genesis_config.cluster_type == ClusterType::Development {
solana_runtime::genesis_utils::activate_all_features(&mut genesis_config);
}

if let Some(files) = matches.values_of("primordial_accounts_file") {
for file in files {
Expand Down
Loading

0 comments on commit 31696a1

Please sign in to comment.