Synchronize and cleanup instruction processor lists (#5356)

This commit is contained in:
Jack May 2019-07-31 14:28:14 -07:00 committed by GitHub
parent 1d6bafbc77
commit d09afdbefe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 121 additions and 85 deletions

22
Cargo.lock generated
View File

@ -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",

View File

@ -10,6 +10,7 @@ members = [
"drone",
"validator",
"genesis",
"genesis_programs",
"gossip",
"install",
"keygen",

View File

@ -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"

View File

@ -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;

View File

@ -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<Keypair>,
pub voting_keypair: Arc<Keypair>,
@ -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();

View File

@ -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"

View File

@ -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<dyn error::Error>> {
),
),
])
.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<dyn error::Error>> {
#[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

2
genesis_programs/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/target/
/farf/

View File

@ -0,0 +1,35 @@
[package]
name = "solana-genesis-programs"
version = "0.18.0-pre0"
description = "Solana genesis programs"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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"

View File

@ -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)));
}
}

View File

@ -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" }

View File

@ -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!(),

View File

@ -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,