Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sdk: evict genesis config #4076

Merged
merged 12 commits into from
Jan 16, 2025
35 changes: 33 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ members = [
"sdk/frozen-abi",
"sdk/frozen-abi/macro",
"sdk/gen-headers",
"sdk/genesis-config",
"sdk/hard-forks",
"sdk/hash",
"sdk/inflation",
Expand Down Expand Up @@ -499,6 +500,7 @@ solana-frozen-abi-macro = { path = "sdk/frozen-abi/macro", version = "=2.2.0" }
solana-tps-client = { path = "tps-client", version = "=2.2.0" }
solana-file-download = { path = "sdk/file-download", version = "=2.2.0" }
solana-genesis = { path = "genesis", version = "=2.2.0" }
solana-genesis-config = { path = "sdk/genesis-config", version = "=2.2.0" }
solana-genesis-utils = { path = "genesis-utils", version = "=2.2.0" }
agave-geyser-plugin-interface = { path = "geyser-plugin-interface", version = "=2.2.0" }
solana-geyser-plugin-manager = { path = "geyser-plugin-manager", version = "=2.2.0" }
Expand Down
32 changes: 30 additions & 2 deletions programs/sbf/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions sdk/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ default = [
]
full = [
"byteorder",
"chrono",
"memmap2",
"rand",
"rand0-7",
"serde_json",
Expand All @@ -39,6 +37,7 @@ full = [
"dep:solana-cluster-type",
"dep:solana-ed25519-program",
"dep:solana-compute-budget-interface",
"dep:solana-genesis-config",
"dep:solana-hard-forks",
"dep:solana-keypair",
"dep:solana-offchain-message",
Expand Down Expand Up @@ -76,6 +75,7 @@ frozen-abi = [
"solana-fee-structure/frozen-abi",
"solana-account/frozen-abi",
"solana-cluster-type/frozen-abi",
"solana-genesis-config/frozen-abi",
"solana-hard-forks/frozen-abi",
"solana-inflation/frozen-abi",
"solana-poh-config/frozen-abi",
Expand All @@ -97,15 +97,13 @@ bs58 = { workspace = true }
bytemuck = { workspace = true }
bytemuck_derive = { workspace = true }
byteorder = { workspace = true, optional = true }
chrono = { workspace = true, features = ["alloc"], optional = true }
curve25519-dalek = { workspace = true, optional = true }
digest = { workspace = true, optional = true }
ed25519-dalek = { workspace = true, optional = true }
itertools = { workspace = true }
lazy_static = { workspace = true }
libsecp256k1 = { workspace = true, optional = true, features = ["hmac"] }
log = { workspace = true }
memmap2 = { workspace = true, optional = true }
num-derive = { workspace = true }
num-traits = { workspace = true }
qualifier_attr = { workspace = true, optional = true }
Expand Down Expand Up @@ -143,6 +141,9 @@ solana-frozen-abi = { workspace = true, optional = true, features = [
solana-frozen-abi-macro = { workspace = true, optional = true, features = [
"frozen-abi",
] }
solana-genesis-config = { workspace = true, features = [
"serde"
], optional = true }
solana-hard-forks = { workspace = true, features = [
"serde",
], optional = true }
Expand Down
64 changes: 64 additions & 0 deletions sdk/genesis-config/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
[package]
name = "solana-genesis-config"
description = "A Solana network's genesis config."
documentation = "https://docs.rs/solana-genesis-config"
version = { workspace = true }
authors = { workspace = true }
repository = { workspace = true }
homepage = { workspace = true }
license = { workspace = true }
edition = { workspace = true }

[dependencies]
bincode = { workspace = true }
chrono = { workspace = true, features = ["alloc"] }
memmap2 = { workspace = true }
serde = { workspace = true, optional = true }
serde_derive = { workspace = true, optional = true }
solana-account = { workspace = true }
solana-clock = { workspace = true }
solana-cluster-type = { workspace = true }
solana-epoch-schedule = { workspace = true }
solana-fee-calculator = { workspace = true }
solana-frozen-abi = { workspace = true, optional = true }
solana-frozen-abi-macro = { workspace = true, optional = true }
solana-hash = { workspace = true }
solana-inflation = { workspace = true }
solana-keypair = { workspace = true }
solana-logger = { workspace = true }
solana-native-token = { workspace = true }
solana-poh-config = { workspace = true }
solana-pubkey = { workspace = true }
solana-rent = { workspace = true }
solana-sdk-ids = { workspace = true }
solana-sha256-hasher = { workspace = true }
solana-shred-version = { workspace = true }
solana-signer = { workspace = true }
solana-time-utils = { workspace = true }

[dev-dependencies]
solana-genesis-config = { path = ".", features = ["serde"] }
solana-pubkey = { workspace = true, features = ["rand"] }

[features]
frozen-abi = ["dep:solana-frozen-abi", "dep:solana-frozen-abi-macro"]
serde = [
"dep:serde",
"dep:serde_derive",
"solana-account/serde",
"solana-clock/serde",
"solana-cluster-type/serde",
"solana-epoch-schedule/serde",
"solana-fee-calculator/serde",
"solana-inflation/serde",
"solana-poh-config/serde",
"solana-rent/serde",
]

[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
buffalojoec marked this conversation as resolved.
Show resolved Hide resolved
all-features = true
rustdoc-args = ["--cfg=docsrs"]

[lints]
workspace = true
66 changes: 39 additions & 27 deletions sdk/src/genesis_config.rs → sdk/genesis-config/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,38 +1,45 @@
//! The chain's genesis config.

#![cfg(feature = "full")]

#![cfg_attr(feature = "frozen-abi", feature(min_specialization))]
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
#[deprecated(
since = "2.2.0",
note = "Use `solana_cluster_type::ClusterType` instead."
)]
pub use solana_cluster_type::ClusterType;
#[cfg(feature = "frozen-abi")]
use solana_frozen_abi_macro::{frozen_abi, AbiExample};
#[cfg(feature = "serde")]
use {
crate::{
clock::{UnixTimestamp, DEFAULT_TICKS_PER_SLOT},
epoch_schedule::EpochSchedule,
fee_calculator::FeeRateGovernor,
hash::{hash, Hash},
inflation::Inflation,
poh_config::PohConfig,
pubkey::Pubkey,
rent::Rent,
shred_version::compute_shred_version,
signature::{Keypair, Signer},
system_program,
timing::years_as_slots,
},
bincode::{deserialize, serialize},
chrono::{TimeZone, Utc},
memmap2::Mmap,
solana_account::{Account, AccountSharedData},
solana_hash::Hash,
solana_native_token::lamports_to_sol,
solana_sha256_hasher::hash,
solana_shred_version::compute_shred_version,
std::{
collections::BTreeMap,
fmt,
fs::{File, OpenOptions},
io::Write,
path::{Path, PathBuf},
},
};
use {
solana_account::{Account, AccountSharedData},
solana_clock::{UnixTimestamp, DEFAULT_TICKS_PER_SLOT},
solana_epoch_schedule::EpochSchedule,
solana_fee_calculator::FeeRateGovernor,
solana_inflation::Inflation,
solana_keypair::Keypair,
solana_poh_config::PohConfig,
solana_pubkey::Pubkey,
solana_rent::Rent,
solana_sdk_ids::system_program,
solana_signer::Signer,
solana_time_utils::years_as_slots,
std::{
collections::BTreeMap,
time::{SystemTime, UNIX_EPOCH},
},
};
Expand All @@ -49,7 +56,11 @@ pub const UNUSED_DEFAULT: u64 = 1024;
derive(AbiExample),
frozen_abi(digest = "D9VFRSj4fodCuKFC9omQY2zY2Uw8wo6SzJFLeMJaVigm")
)]
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde_derive::Deserialize, serde_derive::Serialize)
)]
#[derive(Clone, Debug, PartialEq)]
pub struct GenesisConfig {
/// when the network (bootstrap validator) was started relative to the UNIX Epoch
pub creation_time: UnixTimestamp,
Expand Down Expand Up @@ -132,15 +143,18 @@ impl GenesisConfig {
}
}

#[cfg(feature = "serde")]
pub fn hash(&self) -> Hash {
let serialized = serialize(&self).unwrap();
hash(&serialized)
}

#[cfg(feature = "serde")]
fn genesis_filename(ledger_path: &Path) -> PathBuf {
Path::new(ledger_path).join(DEFAULT_GENESIS_FILE)
}

#[cfg(feature = "serde")]
pub fn load(ledger_path: &Path) -> Result<Self, std::io::Error> {
let filename = Self::genesis_filename(ledger_path);
let file = OpenOptions::new()
Expand Down Expand Up @@ -170,6 +184,7 @@ impl GenesisConfig {
Ok(genesis_config)
}

#[cfg(feature = "serde")]
pub fn write(&self, ledger_path: &Path) -> Result<(), std::io::Error> {
let serialized = serialize(&self).map_err(|err| {
std::io::Error::new(
Expand Down Expand Up @@ -216,6 +231,7 @@ impl GenesisConfig {
}
}

#[cfg(feature = "serde")]
buffalojoec marked this conversation as resolved.
Show resolved Hide resolved
impl fmt::Display for GenesisConfig {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
Expand Down Expand Up @@ -273,13 +289,9 @@ impl fmt::Display for GenesisConfig {
}
}

#[cfg(test)]
#[cfg(all(feature = "serde", test))]
mod tests {
use {
super::*,
crate::signature::{Keypair, Signer},
std::path::PathBuf,
};
use {super::*, solana_signer::Signer, std::path::PathBuf};

fn make_tmp_path(name: &str) -> PathBuf {
let out_dir = std::env::var("FARF_DIR").unwrap_or_else(|_| "farf".to_string());
Expand Down Expand Up @@ -310,10 +322,10 @@ mod tests {
AccountSharedData::new(10_000, 0, &Pubkey::default()),
);
config.add_account(
solana_sdk::pubkey::new_rand(),
solana_pubkey::new_rand(),
AccountSharedData::new(1, 0, &Pubkey::default()),
);
config.add_native_instruction_processor("hi".to_string(), solana_sdk::pubkey::new_rand());
config.add_native_instruction_processor("hi".to_string(), solana_pubkey::new_rand());

assert_eq!(config.accounts.len(), 2);
assert!(config
Expand Down
Loading
Loading