From d09afdbefe405a1e7de52ef94b318949adc99e39 Mon Sep 17 00:00:00 2001 From: Jack May Date: Wed, 31 Jul 2019 14:28:14 -0700 Subject: [PATCH] Synchronize and cleanup instruction processor lists (#5356) --- Cargo.lock | 22 ++++++++---- Cargo.toml | 1 + core/Cargo.toml | 7 +--- core/src/lib.rs | 4 --- core/src/local_cluster.rs | 12 +++---- genesis/Cargo.toml | 14 +------- genesis/src/main.rs | 46 +------------------------ genesis_programs/.gitignore | 2 ++ genesis_programs/Cargo.toml | 35 +++++++++++++++++++ genesis_programs/src/lib.rs | 58 ++++++++++++++++++++++++++++++++ runtime/Cargo.toml | 1 - runtime/src/genesis_utils.rs | 2 ++ runtime/src/message_processor.rs | 2 +- 13 files changed, 121 insertions(+), 85 deletions(-) create mode 100644 genesis_programs/.gitignore create mode 100644 genesis_programs/Cargo.toml create mode 100644 genesis_programs/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index a985608fc6..00a0c178b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3060,27 +3060,22 @@ dependencies = [ "solana-budget-program 0.18.0-pre0", "solana-chacha-sys 0.18.0-pre0", "solana-client 0.18.0-pre0", - "solana-config-program 0.18.0-pre0", "solana-drone 0.18.0-pre0", "solana-ed25519-dalek 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-exchange-program 0.18.0-pre0", + "solana-genesis-programs 0.18.0-pre0", "solana-kvstore 0.18.0-pre0", "solana-librapay-api 0.18.0-pre0", "solana-logger 0.18.0-pre0", "solana-measure 0.18.0-pre0", "solana-merkle-tree 0.18.0-pre0", "solana-metrics 0.18.0-pre0", - "solana-move-loader-api 0.18.0-pre0", - "solana-move-loader-program 0.18.0-pre0", "solana-netutil 0.18.0-pre0", "solana-runtime 0.18.0-pre0", "solana-sdk 0.18.0-pre0", "solana-stake-api 0.18.0-pre0", - "solana-stake-program 0.18.0-pre0", "solana-storage-api 0.18.0-pre0", "solana-storage-program 0.18.0-pre0", "solana-vote-api 0.18.0-pre0", - "solana-vote-program 0.18.0-pre0", "solana-vote-signer 0.18.0-pre0", "sys-info 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3345,6 +3340,18 @@ dependencies = [ "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)", "solana 0.18.0-pre0", + "solana-genesis-programs 0.18.0-pre0", + "solana-sdk 0.18.0-pre0", + "solana-stake-api 0.18.0-pre0", + "solana-storage-api 0.18.0-pre0", + "solana-vote-api 0.18.0-pre0", +] + +[[package]] +name = "solana-genesis-programs" +version = "0.18.0-pre0" +dependencies = [ + "hashbrown 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "solana-bpf-loader-api 0.18.0-pre0", "solana-bpf-loader-program 0.18.0-pre0", "solana-budget-api 0.18.0-pre0", @@ -3353,6 +3360,8 @@ dependencies = [ "solana-config-program 0.18.0-pre0", "solana-exchange-api 0.18.0-pre0", "solana-exchange-program 0.18.0-pre0", + "solana-move-loader-api 0.18.0-pre0", + "solana-move-loader-program 0.18.0-pre0", "solana-sdk 0.18.0-pre0", "solana-stake-api 0.18.0-pre0", "solana-stake-program 0.18.0-pre0", @@ -3598,7 +3607,6 @@ dependencies = [ "solana-logger 0.18.0-pre0", "solana-measure 0.18.0-pre0", "solana-metrics 0.18.0-pre0", - "solana-noop-program 0.18.0-pre0", "solana-sdk 0.18.0-pre0", "solana-stake-api 0.18.0-pre0", "solana-stake-program 0.18.0-pre0", diff --git a/Cargo.toml b/Cargo.toml index 30eb6d0188..ba45537c57 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ members = [ "drone", "validator", "genesis", + "genesis_programs", "gossip", "install", "keygen", diff --git a/core/Cargo.toml b/core/Cargo.toml index f9484d3de2..70fc0a1e7d 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -50,10 +50,9 @@ solana-budget-api = { path = "../programs/budget_api", version = "0.18.0-pre0" } solana-budget-program = { path = "../programs/budget_program", version = "0.18.0-pre0" } solana-chacha-sys = { path = "../chacha-sys", version = "0.18.0-pre0" } solana-client = { path = "../client", version = "0.18.0-pre0" } -solana-config-program = { path = "../programs/config_program", version = "0.18.0-pre0" } solana-drone = { path = "../drone", version = "0.18.0-pre0" } solana-ed25519-dalek = "0.2.0" -solana-exchange-program = { path = "../programs/exchange_program", version = "0.18.0-pre0" } +solana-genesis-programs = { path = "../genesis_programs", version = "0.18.0-pre0" } solana-kvstore = { path = "../kvstore", version = "0.18.0-pre0", optional = true } solana-logger = { path = "../logger", version = "0.18.0-pre0" } solana-merkle-tree = { path = "../merkle-tree", version = "0.18.0-pre0" } @@ -63,14 +62,10 @@ solana-netutil = { path = "../netutil", version = "0.18.0-pre0" } solana-runtime = { path = "../runtime", version = "0.18.0-pre0" } solana-sdk = { path = "../sdk", version = "0.18.0-pre0" } solana-stake-api = { path = "../programs/stake_api", version = "0.18.0-pre0" } -solana-stake-program = { path = "../programs/stake_program", version = "0.18.0-pre0" } solana-storage-api = { path = "../programs/storage_api", version = "0.18.0-pre0" } solana-storage-program = { path = "../programs/storage_program", version = "0.18.0-pre0" } solana-vote-api = { path = "../programs/vote_api", version = "0.18.0-pre0" } -solana-vote-program = { path = "../programs/vote_program", version = "0.18.0-pre0" } solana-vote-signer = { path = "../vote-signer", version = "0.18.0-pre0" } -solana-move-loader-program = { path = "../programs/move_loader_program", version = "0.18.0-pre0" } -solana-move-loader-api = { path = "../programs/move_loader_api", version = "0.18.0-pre0" } solana-librapay-api = { path = "../programs/librapay_api", version = "0.18.0-pre0" } sys-info = "0.5.7" tokio = "0.1" diff --git a/core/src/lib.rs b/core/src/lib.rs index 79d87f311a..063a65ff18 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -76,7 +76,6 @@ pub mod window_service; #[macro_use] extern crate solana_budget_program; -#[macro_use] extern crate solana_storage_program; #[cfg(test)] @@ -101,6 +100,3 @@ extern crate solana_metrics; extern crate matches; extern crate crossbeam_channel; - -#[macro_use] -extern crate solana_move_loader_program; diff --git a/core/src/local_cluster.rs b/core/src/local_cluster.rs index 8d0640401b..f4e1733c53 100644 --- a/core/src/local_cluster.rs +++ b/core/src/local_cluster.rs @@ -30,8 +30,6 @@ use std::io::{Error, ErrorKind, Result}; use std::path::PathBuf; use std::sync::Arc; -use solana_move_loader_api; - pub struct ValidatorInfo { pub keypair: Arc, pub voting_keypair: Arc, @@ -159,17 +157,15 @@ impl LocalCluster { .native_instruction_processors .extend_from_slice(&config.native_instruction_processors); + genesis_block + .native_instruction_processors + .extend_from_slice(&solana_genesis_programs::get()); + let storage_keypair = Keypair::new(); genesis_block.accounts.push(( storage_keypair.pubkey(), storage_contract::create_validator_storage_account(leader_pubkey, 1), )); - genesis_block - .native_instruction_processors - .push(solana_storage_program!()); - genesis_block - .native_instruction_processors - .push(solana_move_loader_program!()); let (leader_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let leader_contact_info = leader_node.info.clone(); diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 00b7798689..8acf26f549 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -16,23 +16,11 @@ serde_derive = "1.0.98" serde_json = "1.0.40" serde_yaml = "0.8.9" solana = { path = "../core", version = "0.18.0-pre0" } -solana-bpf-loader-api = { path = "../programs/bpf_loader_api", version = "0.18.0-pre0" } -solana-bpf-loader-program = { path = "../programs/bpf_loader_program", version = "0.18.0-pre0" } -solana-budget-api = { path = "../programs/budget_api", version = "0.18.0-pre0" } -solana-budget-program = { path = "../programs/budget_program", version = "0.18.0-pre0" } -solana-config-api = { path = "../programs/config_api", version = "0.18.0-pre0" } -solana-config-program = { path = "../programs/config_program", version = "0.18.0-pre0" } -solana-exchange-api = { path = "../programs/exchange_api", version = "0.18.0-pre0" } -solana-exchange-program = { path = "../programs/exchange_program", version = "0.18.0-pre0" } +solana-genesis-programs = { path = "../genesis_programs", version = "0.18.0-pre0" } solana-sdk = { path = "../sdk", version = "0.18.0-pre0" } solana-stake-api = { path = "../programs/stake_api", version = "0.18.0-pre0" } -solana-stake-program = { path = "../programs/stake_program", version = "0.18.0-pre0" } solana-storage-api = { path = "../programs/storage_api", version = "0.18.0-pre0" } -solana-storage-program = { path = "../programs/storage_program", version = "0.18.0-pre0" } -solana-token-api = { path = "../programs/token_api", version = "0.18.0-pre0" } -solana-token-program = { path = "../programs/token_program", version = "0.18.0-pre0" } solana-vote-api = { path = "../programs/vote_api", version = "0.18.0-pre0" } -solana-vote-program = { path = "../programs/vote_program", version = "0.18.0-pre0" } [dev-dependencies] hashbrown = "0.3.0" diff --git a/genesis/src/main.rs b/genesis/src/main.rs index 29cb9037e7..29cbe15dbc 100644 --- a/genesis/src/main.rs +++ b/genesis/src/main.rs @@ -1,20 +1,4 @@ //! A command-line executable for generating the chain's genesis block. -#[macro_use] -extern crate solana_bpf_loader_program; -#[macro_use] -extern crate solana_vote_program; -#[macro_use] -extern crate solana_stake_program; -#[macro_use] -extern crate solana_budget_program; -#[macro_use] -extern crate solana_token_program; -#[macro_use] -extern crate solana_config_program; -#[macro_use] -extern crate solana_exchange_program; -#[macro_use] -extern crate solana_storage_program; use clap::{crate_description, crate_name, crate_version, value_t_or_exit, App, Arg}; use solana::blocktree::create_new_ledger; @@ -299,16 +283,7 @@ fn main() -> Result<(), Box> { ), ), ]) - .native_instruction_processors(&[ - solana_bpf_loader_program!(), - solana_vote_program!(), - solana_stake_program!(), - solana_budget_program!(), - solana_token_program!(), - solana_config_program!(), - solana_exchange_program!(), - solana_storage_program!(), - ]) + .native_instruction_processors(&solana_genesis_programs::get()) .ticks_per_slot(value_t_or_exit!(matches, "ticks_per_slot", u64)) .slots_per_epoch(value_t_or_exit!(matches, "slots_per_epoch", u64)); @@ -367,7 +342,6 @@ fn main() -> Result<(), Box> { #[cfg(test)] mod tests { use super::*; - use hashbrown::HashSet; use solana_sdk::genesis_block::Builder; use solana_sdk::pubkey::Pubkey; use std::collections::HashMap; @@ -375,24 +349,6 @@ mod tests { use std::io::Write; use std::path::Path; - #[test] - fn test_program_id_uniqueness() { - let mut unique = HashSet::new(); - let ids = vec![ - solana_sdk::system_program::id(), - solana_sdk::native_loader::id(), - solana_sdk::bpf_loader::id(), - solana_budget_api::id(), - solana_storage_api::id(), - solana_token_api::id(), - solana_vote_api::id(), - solana_stake_api::id(), - solana_config_api::id(), - solana_exchange_api::id(), - ]; - assert!(ids.into_iter().all(move |id| unique.insert(id))); - } - #[test] fn test_append_primordial_accounts_to_genesis() { // Test invalid file returns error diff --git a/genesis_programs/.gitignore b/genesis_programs/.gitignore new file mode 100644 index 0000000000..5404b132db --- /dev/null +++ b/genesis_programs/.gitignore @@ -0,0 +1,2 @@ +/target/ +/farf/ diff --git a/genesis_programs/Cargo.toml b/genesis_programs/Cargo.toml new file mode 100644 index 0000000000..b909e094f0 --- /dev/null +++ b/genesis_programs/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "solana-genesis-programs" +version = "0.18.0-pre0" +description = "Solana genesis programs" +authors = ["Solana Maintainers "] +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +edition = "2018" + +[dependencies] +hashbrown = "0.2.0" +solana-bpf-loader-api = { path = "../programs/bpf_loader_api", version = "0.18.0-pre0" } +solana-bpf-loader-program = { path = "../programs/bpf_loader_program", version = "0.18.0-pre0" } +solana-budget-api= { path = "../programs/budget_api", version = "0.18.0-pre0" } +solana-budget-program = { path = "../programs/budget_program", version = "0.18.0-pre0" } +solana-config-api = { path = "../programs/config_api", version = "0.18.0-pre0" } +solana-config-program = { path = "../programs/config_program", version = "0.18.0-pre0" } +solana-exchange-api = { path = "../programs/exchange_api", version = "0.18.0-pre0" } +solana-exchange-program = { path = "../programs/exchange_program", version = "0.18.0-pre0" } +solana-move-loader-program = { path = "../programs/move_loader_program", version = "0.18.0-pre0" } +solana-move-loader-api = { path = "../programs/move_loader_api", version = "0.18.0-pre0" } +solana-sdk = { path = "../sdk", version = "0.18.0-pre0" } +solana-stake-api = { path = "../programs/stake_api", version = "0.18.0-pre0" } +solana-stake-program = { path = "../programs/stake_program", version = "0.18.0-pre0" } +solana-storage-api = { path = "../programs/storage_api", version = "0.18.0-pre0" } +solana-storage-program = { path = "../programs/storage_program", version = "0.18.0-pre0" } +solana-token-api = { path = "../programs/token_api", version = "0.18.0-pre0" } +solana-token-program = { path = "../programs/token_program", version = "0.18.0-pre0" } +solana-vote-api = { path = "../programs/vote_api", version = "0.18.0-pre0" } +solana-vote-program = { path = "../programs/vote_program", version = "0.18.0-pre0" } + +[lib] +crate-type = ["lib"] +name = "solana_genesis_programs" diff --git a/genesis_programs/src/lib.rs b/genesis_programs/src/lib.rs new file mode 100644 index 0000000000..196f2344e8 --- /dev/null +++ b/genesis_programs/src/lib.rs @@ -0,0 +1,58 @@ +use solana_sdk::pubkey::Pubkey; + +#[macro_use] +extern crate solana_bpf_loader_program; +#[macro_use] +extern crate solana_budget_program; +#[macro_use] +extern crate solana_config_program; +#[macro_use] +extern crate solana_exchange_program; +#[macro_use] +extern crate solana_move_loader_program; +#[macro_use] +extern crate solana_stake_program; +#[macro_use] +extern crate solana_storage_program; +#[macro_use] +extern crate solana_token_program; +#[macro_use] +extern crate solana_vote_program; + +pub fn get() -> Vec<(String, Pubkey)> { + vec![ + solana_bpf_loader_program!(), + solana_budget_program!(), + solana_config_program!(), + solana_exchange_program!(), + solana_move_loader_program!(), + solana_stake_program!(), + solana_storage_program!(), + solana_token_program!(), + solana_vote_program!(), + ] +} + +#[cfg(test)] +mod tests { + use hashbrown::HashSet; + + #[test] + fn test_id_uniqueness() { + let mut unique = HashSet::new(); + let ids = vec![ + solana_budget_api::id(), + solana_config_api::id(), + solana_exchange_api::id(), + solana_move_loader_api::id(), + solana_sdk::bpf_loader::id(), + solana_sdk::native_loader::id(), + solana_sdk::system_program::id(), + solana_stake_api::id(), + solana_storage_api::id(), + solana_token_api::id(), + solana_vote_api::id(), + ]; + assert!(ids.into_iter().all(move |id| unique.insert(id))); + } +} diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index fbdb366e2e..0f88072808 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -30,7 +30,6 @@ solana-measure = { path = "../measure", version = "0.18.0-pre0" } solana-metrics = { path = "../metrics", version = "0.18.0-pre0" } solana-bpf-loader-api = { path = "../programs/bpf_loader_api", version = "0.18.0-pre0" } solana-bpf-loader-program = { path = "../programs/bpf_loader_program", version = "0.18.0-pre0" } -solana-noop-program = { path = "../programs/noop_program", version = "0.18.0-pre0" } solana-sdk = { path = "../sdk", version = "0.18.0-pre0" } solana-stake-api = { path = "../programs/stake_api", version = "0.18.0-pre0" } solana-stake-program = { path = "../programs/stake_program", version = "0.18.0-pre0" } diff --git a/runtime/src/genesis_utils.rs b/runtime/src/genesis_utils.rs index 8af381ca5d..427f9caaae 100644 --- a/runtime/src/genesis_utils.rs +++ b/runtime/src/genesis_utils.rs @@ -1,3 +1,4 @@ +//use solana_programs::get_default_native_instruction_processors; use solana_sdk::{ account::Account, fee_calculator::FeeCalculator, @@ -66,6 +67,7 @@ pub fn create_genesis_block_with_leader( ), ), ]) + // Bare minimum .native_instruction_processors(&[ solana_bpf_loader_program!(), solana_vote_program!(), diff --git a/runtime/src/message_processor.rs b/runtime/src/message_processor.rs index 14a65b9e2b..a3fea72cd1 100644 --- a/runtime/src/message_processor.rs +++ b/runtime/src/message_processor.rs @@ -157,7 +157,7 @@ impl Default for MessageProcessor { } impl MessageProcessor { - /// Add a static entrypoint to intercept intructions before the dynamic loader. + /// Add a static entrypoint to intercept instructions before the dynamic loader. pub fn add_instruction_processor( &mut self, program_id: Pubkey,