Przeglądaj źródła

sdk: evict genesis config (#4076)

* sdk: evict genesis_config

* Update sdk/src/lib.rs

Co-authored-by: Jon C <me@jonc.dev>

* Update sdk/src/lib.rs

Co-authored-by: Jon C <me@jonc.dev>

* Update sdk/genesis-config/Cargo.toml

Co-authored-by: Jon C <me@jonc.dev>

* sdk: drop unused deps

* pubkey rand feature dev dep

* remove serde feature

* serde is back now

* Update sdk/genesis-config/Cargo.toml

Co-authored-by: Jon C <me@jonc.dev>

* Update sdk/genesis-config/src/lib.rs

Co-authored-by: Jon C <me@jonc.dev>

* Update sdk/genesis-config/Cargo.toml

Co-authored-by: Jon C <me@jonc.dev>

* update lockfile

---------

Co-authored-by: Jon C <me@jonc.dev>
Joe C 10 miesięcy temu
rodzic
commit
11a84a4e1d

+ 33 - 2
Cargo.lock

@@ -7387,6 +7387,38 @@ dependencies = [
  "tempfile",
 ]
 
+[[package]]
+name = "solana-genesis-config"
+version = "2.2.0"
+dependencies = [
+ "bincode",
+ "chrono",
+ "memmap2",
+ "serde",
+ "serde_derive",
+ "solana-account",
+ "solana-clock",
+ "solana-cluster-type",
+ "solana-epoch-schedule",
+ "solana-fee-calculator",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-genesis-config",
+ "solana-hash",
+ "solana-inflation",
+ "solana-keypair",
+ "solana-logger",
+ "solana-native-token",
+ "solana-poh-config",
+ "solana-pubkey",
+ "solana-rent",
+ "solana-sdk-ids",
+ "solana-sha256-hasher",
+ "solana-shred-version",
+ "solana-signer",
+ "solana-time-utils",
+]
+
 [[package]]
 name = "solana-genesis-utils"
 version = "2.2.0"
@@ -8947,7 +8979,6 @@ dependencies = [
  "bytemuck",
  "bytemuck_derive",
  "byteorder",
- "chrono",
  "curve25519-dalek 4.1.3",
  "digest 0.10.7",
  "ed25519-dalek",
@@ -8958,7 +8989,6 @@ dependencies = [
  "lazy_static",
  "libsecp256k1",
  "log",
- "memmap2",
  "num-derive",
  "num-traits",
  "openssl",
@@ -8987,6 +9017,7 @@ dependencies = [
  "solana-fee-structure",
  "solana-frozen-abi",
  "solana-frozen-abi-macro",
+ "solana-genesis-config",
  "solana-hard-forks",
  "solana-inflation",
  "solana-instruction",

+ 2 - 0
Cargo.toml

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

+ 30 - 2
programs/sbf/Cargo.lock

@@ -5902,6 +5902,35 @@ dependencies = [
  "reqwest",
 ]
 
+[[package]]
+name = "solana-genesis-config"
+version = "2.2.0"
+dependencies = [
+ "bincode",
+ "chrono",
+ "memmap2",
+ "serde",
+ "serde_derive",
+ "solana-account",
+ "solana-clock",
+ "solana-cluster-type",
+ "solana-epoch-schedule",
+ "solana-fee-calculator",
+ "solana-hash",
+ "solana-inflation",
+ "solana-keypair",
+ "solana-logger",
+ "solana-native-token",
+ "solana-poh-config",
+ "solana-pubkey",
+ "solana-rent",
+ "solana-sdk-ids",
+ "solana-sha256-hasher",
+ "solana-shred-version",
+ "solana-signer",
+ "solana-time-utils",
+]
+
 [[package]]
 name = "solana-genesis-utils"
 version = "2.2.0"
@@ -7572,7 +7601,6 @@ dependencies = [
  "bytemuck",
  "bytemuck_derive",
  "byteorder 1.5.0",
- "chrono",
  "digest 0.10.7",
  "ed25519-dalek",
  "getrandom 0.1.14",
@@ -7581,7 +7609,6 @@ dependencies = [
  "lazy_static",
  "libsecp256k1 0.6.0",
  "log",
- "memmap2",
  "num-derive",
  "num-traits",
  "qualifier_attr",
@@ -7607,6 +7634,7 @@ dependencies = [
  "solana-epoch-rewards-hasher",
  "solana-feature-set",
  "solana-fee-structure",
+ "solana-genesis-config",
  "solana-hard-forks",
  "solana-inflation",
  "solana-instruction",

+ 5 - 4
sdk/Cargo.toml

@@ -22,8 +22,6 @@ default = [
 ]
 full = [
     "byteorder",
-    "chrono",
-    "memmap2",
     "rand",
     "rand0-7",
     "serde_json",
@@ -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",
@@ -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",
@@ -97,7 +97,6 @@ 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 }
@@ -105,7 +104,6 @@ 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 }
@@ -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 }

+ 64 - 0
sdk/genesis-config/Cargo.toml

@@ -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"]
+all-features = true
+rustdoc-args = ["--cfg=docsrs"]
+
+[lints]
+workspace = true

+ 39 - 27
sdk/src/genesis_config.rs → sdk/genesis-config/src/lib.rs

@@ -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},
     },
 };
@@ -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,
@@ -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()
@@ -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(
@@ -216,6 +231,7 @@ impl GenesisConfig {
     }
 }
 
+#[cfg(feature = "serde")]
 impl fmt::Display for GenesisConfig {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         write!(
@@ -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());
@@ -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

+ 3 - 1
sdk/src/lib.rs

@@ -66,7 +66,9 @@ pub mod entrypoint;
 pub mod entrypoint_deprecated;
 pub mod example_mocks;
 pub mod feature;
-pub mod genesis_config;
+#[cfg(feature = "full")]
+#[deprecated(since = "2.2.0", note = "Use `solana-genesis-config` crate instead")]
+pub use solana_genesis_config as genesis_config;
 #[cfg(feature = "full")]
 #[deprecated(since = "2.2.0", note = "Use `solana-hard-forks` crate instead")]
 pub use solana_hard_forks as hard_forks;

+ 30 - 2
svm/examples/Cargo.lock

@@ -5743,6 +5743,35 @@ dependencies = [
  "solana-native-token",
 ]
 
+[[package]]
+name = "solana-genesis-config"
+version = "2.2.0"
+dependencies = [
+ "bincode",
+ "chrono",
+ "memmap2",
+ "serde",
+ "serde_derive",
+ "solana-account",
+ "solana-clock",
+ "solana-cluster-type",
+ "solana-epoch-schedule",
+ "solana-fee-calculator",
+ "solana-hash",
+ "solana-inflation",
+ "solana-keypair",
+ "solana-logger",
+ "solana-native-token",
+ "solana-poh-config",
+ "solana-pubkey",
+ "solana-rent",
+ "solana-sdk-ids",
+ "solana-sha256-hasher",
+ "solana-shred-version",
+ "solana-signer",
+ "solana-time-utils",
+]
+
 [[package]]
 name = "solana-geyser-plugin-manager"
 version = "2.2.0"
@@ -6902,7 +6931,6 @@ dependencies = [
  "bytemuck",
  "bytemuck_derive",
  "byteorder",
- "chrono",
  "digest 0.10.7",
  "ed25519-dalek",
  "getrandom 0.1.16",
@@ -6911,7 +6939,6 @@ dependencies = [
  "lazy_static",
  "libsecp256k1",
  "log",
- "memmap2",
  "num-derive",
  "num-traits",
  "rand 0.7.3",
@@ -6936,6 +6963,7 @@ dependencies = [
  "solana-epoch-rewards-hasher",
  "solana-feature-set",
  "solana-fee-structure",
+ "solana-genesis-config",
  "solana-hard-forks",
  "solana-inflation",
  "solana-instruction",