From 39b40dfff8f480d94e66082377e308f3016f01c9 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Thu, 30 May 2019 10:54:28 -0700 Subject: [PATCH] Remove runtime dependency on storage (#4480) --- Cargo.lock | 1 - core/src/local_cluster.rs | 4 +++- genesis/src/main.rs | 12 +++--------- .../storage_program/src/genesis_block_util.rs | 19 +++++++++++++++++++ programs/storage_program/src/lib.rs | 2 ++ runtime/Cargo.toml | 2 -- runtime/src/genesis_utils.rs | 15 +-------------- runtime/src/lib.rs | 3 --- 8 files changed, 28 insertions(+), 30 deletions(-) create mode 100644 programs/storage_program/src/genesis_block_util.rs diff --git a/Cargo.lock b/Cargo.lock index e2f94e0dab..65efa8d112 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2625,7 +2625,6 @@ dependencies = [ "solana-sdk 0.16.0", "solana-stake-api 0.16.0", "solana-stake-program 0.16.0", - "solana-storage-api 0.16.0", "solana-storage-program 0.16.0", "solana-vote-api 0.16.0", "solana-vote-program 0.16.0", diff --git a/core/src/local_cluster.rs b/core/src/local_cluster.rs index ebfbd6e097..faef41d152 100644 --- a/core/src/local_cluster.rs +++ b/core/src/local_cluster.rs @@ -21,6 +21,7 @@ use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT; use solana_sdk::transaction::Transaction; use solana_stake_api::stake_instruction; use solana_storage_api::storage_instruction; +use solana_storage_program::genesis_block_util::GenesisBlockUtil; use solana_vote_api::vote_instruction; use solana_vote_api::vote_state::VoteState; use std::collections::HashMap; @@ -124,12 +125,13 @@ impl LocalCluster { mut genesis_block, mint_keypair, voting_keypair, - storage_keypair, } = create_genesis_block_with_leader( config.cluster_lamports, &leader_pubkey, config.node_stakes[0], ); + let storage_keypair = Keypair::new(); + genesis_block.add_storage_program(&storage_keypair.pubkey()); genesis_block.ticks_per_slot = config.ticks_per_slot; genesis_block.slots_per_epoch = config.slots_per_epoch; genesis_block.stakers_slot_offset = config.stakers_slot_offset; diff --git a/genesis/src/main.rs b/genesis/src/main.rs index 8f7501fe63..f51bf4120c 100644 --- a/genesis/src/main.rs +++ b/genesis/src/main.rs @@ -6,8 +6,6 @@ extern crate solana_stake_program; #[macro_use] extern crate solana_budget_program; #[macro_use] -extern crate solana_storage_program; -#[macro_use] extern crate solana_token_program; #[macro_use] extern crate solana_config_program; @@ -25,7 +23,7 @@ use solana_sdk::signature::{read_keypair, KeypairUtil}; use solana_sdk::system_program; use solana_sdk::timing; use solana_stake_api::stake_state; -use solana_storage_api::storage_contract; +use solana_storage_program::genesis_block_util::GenesisBlockUtil; use solana_vote_api::vote_state; use std::error; use std::time::{Duration, Instant}; @@ -213,22 +211,18 @@ fn main() -> Result<(), Box> { bootstrap_leader_stake_lamports, ), ), - // storage account - ( - bootstrap_storage_keypair.pubkey(), - storage_contract::create_validator_storage_account(1), - ), ], &[ solana_vote_program!(), solana_stake_program!(), solana_budget_program!(), - solana_storage_program!(), solana_token_program!(), solana_config_program!(), solana_exchange_program!(), ], ); + genesis_block.add_storage_program(&bootstrap_storage_keypair.pubkey()); + genesis_block.fee_calculator.lamports_per_signature = value_t_or_exit!(matches, "lamports_per_signature", u64); genesis_block.ticks_per_slot = value_t_or_exit!(matches, "ticks_per_slot", u64); diff --git a/programs/storage_program/src/genesis_block_util.rs b/programs/storage_program/src/genesis_block_util.rs new file mode 100644 index 0000000000..c5c35b52ec --- /dev/null +++ b/programs/storage_program/src/genesis_block_util.rs @@ -0,0 +1,19 @@ +use crate::solana_storage_program; +use solana_sdk::genesis_block::GenesisBlock; +use solana_sdk::pubkey::Pubkey; +use solana_storage_api::storage_contract; + +pub trait GenesisBlockUtil { + fn add_storage_program(&mut self, validator_storage_pubkey: &Pubkey); +} + +impl GenesisBlockUtil for GenesisBlock { + fn add_storage_program(&mut self, validator_storage_pubkey: &Pubkey) { + self.accounts.push(( + *validator_storage_pubkey, + storage_contract::create_validator_storage_account(1), + )); + self.native_instruction_processors + .push(solana_storage_program!()); + } +} diff --git a/programs/storage_program/src/lib.rs b/programs/storage_program/src/lib.rs index 7868bfd582..15b965d4fb 100644 --- a/programs/storage_program/src/lib.rs +++ b/programs/storage_program/src/lib.rs @@ -1,3 +1,5 @@ +pub mod genesis_block_util; + #[macro_export] macro_rules! solana_storage_program { () => { diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index fc73345f25..367639b916 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -29,8 +29,6 @@ solana-noop-program = { path = "../programs/noop_program", version = "0.16.0" } solana-sdk = { path = "../sdk", version = "0.16.0" } solana-stake-api = { path = "../programs/stake_api", version = "0.16.0" } solana-stake-program = { path = "../programs/stake_program", version = "0.16.0" } -solana-storage-api = { path = "../programs/storage_api", version = "0.16.0" } -solana-storage-program = { path = "../programs/storage_program", version = "0.16.0" } solana-vote-api = { path = "../programs/vote_api", version = "0.16.0" } solana-vote-program = { path = "../programs/vote_program", version = "0.16.0" } sys-info = "0.5.7" diff --git a/runtime/src/genesis_utils.rs b/runtime/src/genesis_utils.rs index 826c5b762b..21cbb8ee31 100644 --- a/runtime/src/genesis_utils.rs +++ b/runtime/src/genesis_utils.rs @@ -4,7 +4,6 @@ use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::system_program; use solana_stake_api::stake_state; -use solana_storage_api::storage_contract; use solana_vote_api::vote_state; // The default stake placed with the bootstrap leader @@ -14,7 +13,6 @@ pub struct GenesisBlockInfo { pub genesis_block: GenesisBlock, pub mint_keypair: Keypair, pub voting_keypair: Keypair, - pub storage_keypair: Keypair, } pub fn create_genesis_block_with_leader( @@ -25,7 +23,6 @@ pub fn create_genesis_block_with_leader( let mint_keypair = Keypair::new(); let voting_keypair = Keypair::new(); let staking_keypair = Keypair::new(); - let storage_keypair = Keypair::new(); // TODO: de-duplicate the stake once passive staking // is fully implemented @@ -61,23 +58,13 @@ pub fn create_genesis_block_with_leader( bootstrap_leader_stake_lamports, ), ), - // storage account - ( - storage_keypair.pubkey(), - storage_contract::create_validator_storage_account(1), - ), - ], - &[ - solana_vote_program!(), - solana_stake_program!(), - solana_storage_program!(), // TODO: storage program is only needed by core/, move this line into core/src/genesis_utils.rs ], + &[solana_vote_program!(), solana_stake_program!()], ); GenesisBlockInfo { genesis_block, mint_keypair, voting_keypair, - storage_keypair, } } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 9760effa7f..0e44d53aef 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -25,8 +25,5 @@ extern crate solana_vote_program; #[macro_use] extern crate solana_stake_program; -#[macro_use] -extern crate solana_storage_program; - #[macro_use] extern crate serde_derive;