Remove runtime dependency on storage (#4480)
This commit is contained in:
parent
c82f4a1b6d
commit
39b40dfff8
|
@ -2625,7 +2625,6 @@ dependencies = [
|
||||||
"solana-sdk 0.16.0",
|
"solana-sdk 0.16.0",
|
||||||
"solana-stake-api 0.16.0",
|
"solana-stake-api 0.16.0",
|
||||||
"solana-stake-program 0.16.0",
|
"solana-stake-program 0.16.0",
|
||||||
"solana-storage-api 0.16.0",
|
|
||||||
"solana-storage-program 0.16.0",
|
"solana-storage-program 0.16.0",
|
||||||
"solana-vote-api 0.16.0",
|
"solana-vote-api 0.16.0",
|
||||||
"solana-vote-program 0.16.0",
|
"solana-vote-program 0.16.0",
|
||||||
|
|
|
@ -21,6 +21,7 @@ use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT;
|
||||||
use solana_sdk::transaction::Transaction;
|
use solana_sdk::transaction::Transaction;
|
||||||
use solana_stake_api::stake_instruction;
|
use solana_stake_api::stake_instruction;
|
||||||
use solana_storage_api::storage_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_instruction;
|
||||||
use solana_vote_api::vote_state::VoteState;
|
use solana_vote_api::vote_state::VoteState;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
@ -124,12 +125,13 @@ impl LocalCluster {
|
||||||
mut genesis_block,
|
mut genesis_block,
|
||||||
mint_keypair,
|
mint_keypair,
|
||||||
voting_keypair,
|
voting_keypair,
|
||||||
storage_keypair,
|
|
||||||
} = create_genesis_block_with_leader(
|
} = create_genesis_block_with_leader(
|
||||||
config.cluster_lamports,
|
config.cluster_lamports,
|
||||||
&leader_pubkey,
|
&leader_pubkey,
|
||||||
config.node_stakes[0],
|
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.ticks_per_slot = config.ticks_per_slot;
|
||||||
genesis_block.slots_per_epoch = config.slots_per_epoch;
|
genesis_block.slots_per_epoch = config.slots_per_epoch;
|
||||||
genesis_block.stakers_slot_offset = config.stakers_slot_offset;
|
genesis_block.stakers_slot_offset = config.stakers_slot_offset;
|
||||||
|
|
|
@ -6,8 +6,6 @@ extern crate solana_stake_program;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate solana_budget_program;
|
extern crate solana_budget_program;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate solana_storage_program;
|
|
||||||
#[macro_use]
|
|
||||||
extern crate solana_token_program;
|
extern crate solana_token_program;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate solana_config_program;
|
extern crate solana_config_program;
|
||||||
|
@ -25,7 +23,7 @@ use solana_sdk::signature::{read_keypair, KeypairUtil};
|
||||||
use solana_sdk::system_program;
|
use solana_sdk::system_program;
|
||||||
use solana_sdk::timing;
|
use solana_sdk::timing;
|
||||||
use solana_stake_api::stake_state;
|
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 solana_vote_api::vote_state;
|
||||||
use std::error;
|
use std::error;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
|
@ -213,22 +211,18 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
||||||
bootstrap_leader_stake_lamports,
|
bootstrap_leader_stake_lamports,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// storage account
|
|
||||||
(
|
|
||||||
bootstrap_storage_keypair.pubkey(),
|
|
||||||
storage_contract::create_validator_storage_account(1),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
&[
|
&[
|
||||||
solana_vote_program!(),
|
solana_vote_program!(),
|
||||||
solana_stake_program!(),
|
solana_stake_program!(),
|
||||||
solana_budget_program!(),
|
solana_budget_program!(),
|
||||||
solana_storage_program!(),
|
|
||||||
solana_token_program!(),
|
solana_token_program!(),
|
||||||
solana_config_program!(),
|
solana_config_program!(),
|
||||||
solana_exchange_program!(),
|
solana_exchange_program!(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
genesis_block.add_storage_program(&bootstrap_storage_keypair.pubkey());
|
||||||
|
|
||||||
genesis_block.fee_calculator.lamports_per_signature =
|
genesis_block.fee_calculator.lamports_per_signature =
|
||||||
value_t_or_exit!(matches, "lamports_per_signature", u64);
|
value_t_or_exit!(matches, "lamports_per_signature", u64);
|
||||||
genesis_block.ticks_per_slot = value_t_or_exit!(matches, "ticks_per_slot", u64);
|
genesis_block.ticks_per_slot = value_t_or_exit!(matches, "ticks_per_slot", u64);
|
||||||
|
|
|
@ -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!());
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
pub mod genesis_block_util;
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! solana_storage_program {
|
macro_rules! solana_storage_program {
|
||||||
() => {
|
() => {
|
||||||
|
|
|
@ -29,8 +29,6 @@ solana-noop-program = { path = "../programs/noop_program", version = "0.16.0" }
|
||||||
solana-sdk = { path = "../sdk", 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-api = { path = "../programs/stake_api", version = "0.16.0" }
|
||||||
solana-stake-program = { path = "../programs/stake_program", 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-api = { path = "../programs/vote_api", version = "0.16.0" }
|
||||||
solana-vote-program = { path = "../programs/vote_program", version = "0.16.0" }
|
solana-vote-program = { path = "../programs/vote_program", version = "0.16.0" }
|
||||||
sys-info = "0.5.7"
|
sys-info = "0.5.7"
|
||||||
|
|
|
@ -4,7 +4,6 @@ use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
use solana_sdk::system_program;
|
use solana_sdk::system_program;
|
||||||
use solana_stake_api::stake_state;
|
use solana_stake_api::stake_state;
|
||||||
use solana_storage_api::storage_contract;
|
|
||||||
use solana_vote_api::vote_state;
|
use solana_vote_api::vote_state;
|
||||||
|
|
||||||
// The default stake placed with the bootstrap leader
|
// The default stake placed with the bootstrap leader
|
||||||
|
@ -14,7 +13,6 @@ pub struct GenesisBlockInfo {
|
||||||
pub genesis_block: GenesisBlock,
|
pub genesis_block: GenesisBlock,
|
||||||
pub mint_keypair: Keypair,
|
pub mint_keypair: Keypair,
|
||||||
pub voting_keypair: Keypair,
|
pub voting_keypair: Keypair,
|
||||||
pub storage_keypair: Keypair,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_genesis_block_with_leader(
|
pub fn create_genesis_block_with_leader(
|
||||||
|
@ -25,7 +23,6 @@ pub fn create_genesis_block_with_leader(
|
||||||
let mint_keypair = Keypair::new();
|
let mint_keypair = Keypair::new();
|
||||||
let voting_keypair = Keypair::new();
|
let voting_keypair = Keypair::new();
|
||||||
let staking_keypair = Keypair::new();
|
let staking_keypair = Keypair::new();
|
||||||
let storage_keypair = Keypair::new();
|
|
||||||
|
|
||||||
// TODO: de-duplicate the stake once passive staking
|
// TODO: de-duplicate the stake once passive staking
|
||||||
// is fully implemented
|
// is fully implemented
|
||||||
|
@ -61,23 +58,13 @@ pub fn create_genesis_block_with_leader(
|
||||||
bootstrap_leader_stake_lamports,
|
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 {
|
GenesisBlockInfo {
|
||||||
genesis_block,
|
genesis_block,
|
||||||
mint_keypair,
|
mint_keypair,
|
||||||
voting_keypair,
|
voting_keypair,
|
||||||
storage_keypair,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,5 @@ extern crate solana_vote_program;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate solana_stake_program;
|
extern crate solana_stake_program;
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
extern crate solana_storage_program;
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde_derive;
|
extern crate serde_derive;
|
||||||
|
|
Loading…
Reference in New Issue