From 1c80c454a006cb9946ee8dda7b2d84ab5431de43 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 25 Sep 2024 12:49:36 +0400 Subject: [PATCH 01/11] move functions from solana_sdk::pubkey to solana_pubkey --- Cargo.lock | 1 + programs/sbf/Cargo.lock | 2 ++ sdk/pubkey/Cargo.toml | 5 ++-- sdk/pubkey/src/lib.rs | 45 +++++++++++++++++++++++++++++++-- sdk/src/pubkey.rs | 56 ++++++----------------------------------- 5 files changed, 56 insertions(+), 53 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0e9569f47e6a82..90f7ac1ac5cdab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7445,6 +7445,7 @@ dependencies = [ "rand 0.8.5", "serde", "serde_derive", + "serde_json", "solana-atomic-u64", "solana-decode-error", "solana-define-syscall", diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index c77621fa74892a..cd4e96c387fb8d 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -5824,8 +5824,10 @@ dependencies = [ "getrandom 0.2.10", "js-sys", "num-traits", + "rand 0.8.5", "serde", "serde_derive", + "serde_json", "solana-atomic-u64", "solana-decode-error", "solana-define-syscall", diff --git a/sdk/pubkey/Cargo.toml b/sdk/pubkey/Cargo.toml index 50d7a5ed6bdef7..dfbb5bbf80849f 100644 --- a/sdk/pubkey/Cargo.toml +++ b/sdk/pubkey/Cargo.toml @@ -18,8 +18,10 @@ bytemuck = { workspace = true, optional = true } bytemuck_derive = { workspace = true, optional = true } five8_const = { workspace = true } num-traits = { workspace = true } +rand = { workspace = true, optional = true } serde = { workspace = true, optional = true } serde_derive = { workspace = true, optional = true } +serde_json = { workspace = true, optional = true } solana-atomic-u64 = { workspace = true } solana-decode-error = { workspace = true } solana-frozen-abi = { workspace = true, optional = true, features = [ @@ -47,7 +49,6 @@ wasm-bindgen = { workspace = true } anyhow = { workspace = true } arbitrary = { workspace = true, features = ["derive"] } bs58 = { workspace = true, features = ["alloc"] } -rand = { workspace = true } # circular dev deps need to be path deps for `cargo publish` to be happy, # and for now the doc tests need solana-program solana-program = { path = "../program" } @@ -72,7 +73,7 @@ frozen-abi = [ ] serde = ["dep:serde", "dep:serde_derive"] sha2 = ["dep:solana-sha256-hasher", "solana-sha256-hasher/sha2"] -std = [] +std = ["dep:rand", "dep:serde_json"] [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index e378c44caf3f06..dc7b09f218fa25 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -13,7 +13,7 @@ use bytemuck_derive::{Pod, Zeroable}; #[cfg(feature = "serde")] use serde_derive::{Deserialize, Serialize}; #[cfg(any(feature = "std", target_arch = "wasm32"))] -use std::vec::Vec; +use std::{boxed::Box, string::String, vec::Vec}; #[cfg(feature = "borsh")] use { borsh::{BorshDeserialize, BorshSchema, BorshSerialize}, @@ -1114,9 +1114,39 @@ macro_rules! pubkey { }; } +/// New random Pubkey for tests and benchmarks. +#[cfg(all(feature = "std", not(target_os = "solana")))] +pub fn new_rand() -> Pubkey { + Pubkey::from(rand::random::<[u8; PUBKEY_BYTES]>()) +} + +#[cfg(all(feature = "std", not(target_os = "solana")))] +pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), Box> { + use std::io::Write; + + let printable = std::format!("{pubkey}"); + let serialized = serde_json::to_string(&printable)?; + + if let Some(outdir) = std::path::Path::new(&outfile).parent() { + std::fs::create_dir_all(outdir)?; + } + let mut f = std::fs::File::create(outfile)?; + f.write_all(&serialized.into_bytes())?; + + Ok(()) +} + +#[cfg(all(feature = "std", not(target_os = "solana")))] +pub fn read_pubkey_file(infile: &str) -> Result> { + let f = std::fs::File::open(infile)?; + let printable: String = serde_json::from_reader(f)?; + + Ok(Pubkey::from_str(&printable)?) +} + #[cfg(test)] mod tests { - use {super::*, strum::IntoEnumIterator}; + use {super::*, std::fs::remove_file, strum::IntoEnumIterator}; #[test] fn test_new_unique() { @@ -1394,4 +1424,15 @@ mod tests { PK ); } + + #[test] + fn test_read_write_pubkey() -> Result<(), Box> { + let filename = "test_pubkey.json"; + let pubkey = solana_sdk::pubkey::new_rand(); + write_pubkey_file(filename, pubkey)?; + let read = read_pubkey_file(filename)?; + assert_eq!(read, pubkey); + remove_file(filename)?; + Ok(()) + } } diff --git a/sdk/src/pubkey.rs b/sdk/src/pubkey.rs index 92d1365d03c5bf..065bcc978cbee8 100644 --- a/sdk/src/pubkey.rs +++ b/sdk/src/pubkey.rs @@ -1,50 +1,8 @@ -//! Solana account addresses. - -pub use solana_program::pubkey::*; - -/// New random Pubkey for tests and benchmarks. +pub use solana_program::pubkey::{ + bytes_are_curve_point, ParsePubkeyError, Pubkey, PubkeyError, MAX_SEEDS, MAX_SEED_LEN, + PUBKEY_BYTES, +}; #[cfg(feature = "full")] -pub fn new_rand() -> Pubkey { - Pubkey::from(rand::random::<[u8; PUBKEY_BYTES]>()) -} - -#[cfg(feature = "full")] -pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), Box> { - use std::io::Write; - - let printable = format!("{pubkey}"); - let serialized = serde_json::to_string(&printable)?; - - if let Some(outdir) = std::path::Path::new(&outfile).parent() { - std::fs::create_dir_all(outdir)?; - } - let mut f = std::fs::File::create(outfile)?; - f.write_all(&serialized.into_bytes())?; - - Ok(()) -} - -#[cfg(feature = "full")] -pub fn read_pubkey_file(infile: &str) -> Result> { - let f = std::fs::File::open(infile)?; - let printable: String = serde_json::from_reader(f)?; - - use std::str::FromStr; - Ok(Pubkey::from_str(&printable)?) -} - -#[cfg(test)] -mod tests { - use {super::*, std::fs::remove_file}; - - #[test] - fn test_read_write_pubkey() -> Result<(), Box> { - let filename = "test_pubkey.json"; - let pubkey = solana_sdk::pubkey::new_rand(); - write_pubkey_file(filename, pubkey)?; - let read = read_pubkey_file(filename)?; - assert_eq!(read, pubkey); - remove_file(filename)?; - Ok(()) - } -} +pub use solana_program::pubkey::{new_rand, read_pubkey_file, write_pubkey_file}; +#[cfg(target_os = "solana")] +pub use solana_program::syscalls; From cb12dda474fa1db78e46aca893aaf820f6d2bf28 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 25 Sep 2024 12:51:01 +0400 Subject: [PATCH 02/11] fix test --- sdk/pubkey/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index dc7b09f218fa25..fc3a67a17cf187 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -1428,7 +1428,7 @@ mod tests { #[test] fn test_read_write_pubkey() -> Result<(), Box> { let filename = "test_pubkey.json"; - let pubkey = solana_sdk::pubkey::new_rand(); + let pubkey = new_rand(); write_pubkey_file(filename, pubkey)?; let read = read_pubkey_file(filename)?; assert_eq!(read, pubkey); From 5e36bef62636772002f5b1ae98b199fdd2e45677 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 25 Sep 2024 13:01:15 +0400 Subject: [PATCH 03/11] remove serde_json from write_pubkey_file --- sdk/pubkey/src/lib.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index fc3a67a17cf187..45ec2c428615b2 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -1123,9 +1123,7 @@ pub fn new_rand() -> Pubkey { #[cfg(all(feature = "std", not(target_os = "solana")))] pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), Box> { use std::io::Write; - - let printable = std::format!("{pubkey}"); - let serialized = serde_json::to_string(&printable)?; + let serialized = std::format!("\"{pubkey}\""); if let Some(outdir) = std::path::Path::new(&outfile).parent() { std::fs::create_dir_all(outdir)?; From 07911af5adf11d3b7b011ee25de64840888b854d Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 25 Sep 2024 13:09:54 +0400 Subject: [PATCH 04/11] remove serde_json --- Cargo.lock | 1 - programs/sbf/Cargo.lock | 1 - sdk/pubkey/Cargo.toml | 3 +-- sdk/pubkey/src/lib.rs | 18 ++++++++++++++---- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 90f7ac1ac5cdab..0e9569f47e6a82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7445,7 +7445,6 @@ dependencies = [ "rand 0.8.5", "serde", "serde_derive", - "serde_json", "solana-atomic-u64", "solana-decode-error", "solana-define-syscall", diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index cd4e96c387fb8d..27954dcdb561a7 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -5827,7 +5827,6 @@ dependencies = [ "rand 0.8.5", "serde", "serde_derive", - "serde_json", "solana-atomic-u64", "solana-decode-error", "solana-define-syscall", diff --git a/sdk/pubkey/Cargo.toml b/sdk/pubkey/Cargo.toml index dfbb5bbf80849f..169fec5502b0ef 100644 --- a/sdk/pubkey/Cargo.toml +++ b/sdk/pubkey/Cargo.toml @@ -21,7 +21,6 @@ num-traits = { workspace = true } rand = { workspace = true, optional = true } serde = { workspace = true, optional = true } serde_derive = { workspace = true, optional = true } -serde_json = { workspace = true, optional = true } solana-atomic-u64 = { workspace = true } solana-decode-error = { workspace = true } solana-frozen-abi = { workspace = true, optional = true, features = [ @@ -73,7 +72,7 @@ frozen-abi = [ ] serde = ["dep:serde", "dep:serde_derive"] sha2 = ["dep:solana-sha256-hasher", "solana-sha256-hasher/sha2"] -std = ["dep:rand", "dep:serde_json"] +std = ["dep:rand"] [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index 45ec2c428615b2..342f3731f75ba5 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -1136,10 +1136,20 @@ pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), Box Result> { - let f = std::fs::File::open(infile)?; - let printable: String = serde_json::from_reader(f)?; - - Ok(Pubkey::from_str(&printable)?) + use std::io::Read; + let mut f = std::fs::File::open(infile)?; + let mut buffer = String::new(); + f.read_to_string(&mut buffer)?; + let trimmed = buffer.trim(); + if !trimmed.starts_with('"') || !trimmed.ends_with('"') { + return Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Input must be a JSON string.", + ) + .into()); + } + let contents = &trimmed[1..trimmed.len() - 1]; + Ok(Pubkey::from_str(&contents)?) } #[cfg(test)] From 6fb737344685aafd66c1d2e489af53678e04d92f Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 25 Sep 2024 13:13:39 +0400 Subject: [PATCH 05/11] fix import --- sdk/src/pubkey.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/pubkey.rs b/sdk/src/pubkey.rs index 065bcc978cbee8..f7935b9808f5a6 100644 --- a/sdk/src/pubkey.rs +++ b/sdk/src/pubkey.rs @@ -5,4 +5,4 @@ pub use solana_program::pubkey::{ #[cfg(feature = "full")] pub use solana_program::pubkey::{new_rand, read_pubkey_file, write_pubkey_file}; #[cfg(target_os = "solana")] -pub use solana_program::syscalls; +pub use solana_program::pubkey::syscalls; From d7877a05cccf8ada559d6244a3333963f84dc489 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 25 Sep 2024 13:18:39 +0400 Subject: [PATCH 06/11] put new_rand behind a separate feature --- sdk/Cargo.toml | 3 ++- sdk/pubkey/Cargo.toml | 5 +++-- sdk/pubkey/src/lib.rs | 2 +- sdk/src/pubkey.rs | 8 ++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 10eb2b0f8a6c8a..938e21a2aed8c0 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -33,6 +33,7 @@ full = [ "libsecp256k1", "sha3", "digest", + "solana-pubkey/rand", ] borsh = ["dep:borsh", "solana-program/borsh", "solana-secp256k1-recover/borsh"] dev-context-only-utils = ["qualifier_attr", "solana-account/dev-context-only-utils"] @@ -97,7 +98,7 @@ solana-frozen-abi-macro = { workspace = true, optional = true, features = [ ] } solana-program = { workspace = true } solana-program-memory = { workspace = true } -solana-pubkey = { workspace = true } +solana-pubkey = { workspace = true, default-features = false, features = ["std"] } solana-sanitize = { workspace = true } solana-sdk-macro = { workspace = true } solana-secp256k1-recover = { workspace = true } diff --git a/sdk/pubkey/Cargo.toml b/sdk/pubkey/Cargo.toml index 169fec5502b0ef..cdafef8a939f15 100644 --- a/sdk/pubkey/Cargo.toml +++ b/sdk/pubkey/Cargo.toml @@ -65,14 +65,15 @@ borsh = ["dep:borsh", "dep:borsh0-10", "std"] bytemuck = ["dep:bytemuck", "dep:bytemuck_derive"] curve25519 = ["dep:curve25519-dalek", "sha2"] default = ["std"] -dev-context-only-utils = ["dep:arbitrary", "std"] +dev-context-only-utils = ["dep:arbitrary", "rand"] frozen-abi = [ "dep:solana-frozen-abi", "dep:solana-frozen-abi-macro" ] +rand = ["dep:rand", "std"] serde = ["dep:serde", "dep:serde_derive"] sha2 = ["dep:solana-sha256-hasher", "solana-sha256-hasher/sha2"] -std = ["dep:rand"] +std = [] [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index 342f3731f75ba5..882d74bab2b272 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -1115,7 +1115,7 @@ macro_rules! pubkey { } /// New random Pubkey for tests and benchmarks. -#[cfg(all(feature = "std", not(target_os = "solana")))] +#[cfg(all(feature = "rand", not(target_os = "solana")))] pub fn new_rand() -> Pubkey { Pubkey::from(rand::random::<[u8; PUBKEY_BYTES]>()) } diff --git a/sdk/src/pubkey.rs b/sdk/src/pubkey.rs index f7935b9808f5a6..e5145330e4d446 100644 --- a/sdk/src/pubkey.rs +++ b/sdk/src/pubkey.rs @@ -1,8 +1,8 @@ -pub use solana_program::pubkey::{ +#[cfg(target_os = "solana")] +pub use solana_pubkey::syscalls; +pub use solana_pubkey::{ bytes_are_curve_point, ParsePubkeyError, Pubkey, PubkeyError, MAX_SEEDS, MAX_SEED_LEN, PUBKEY_BYTES, }; #[cfg(feature = "full")] -pub use solana_program::pubkey::{new_rand, read_pubkey_file, write_pubkey_file}; -#[cfg(target_os = "solana")] -pub use solana_program::pubkey::syscalls; +pub use solana_pubkey::{new_rand, read_pubkey_file, write_pubkey_file}; From 93909253d7605560144c9a3732ad065ade7eab94 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Wed, 25 Sep 2024 13:28:38 +0400 Subject: [PATCH 07/11] lint --- sdk/pubkey/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index 882d74bab2b272..f59737162defa6 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -1149,7 +1149,7 @@ pub fn read_pubkey_file(infile: &str) -> Result Date: Thu, 26 Sep 2024 13:31:52 +0400 Subject: [PATCH 08/11] fix imports --- sdk/pubkey/src/lib.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index f59737162defa6..7924f9943c21de 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -13,7 +13,7 @@ use bytemuck_derive::{Pod, Zeroable}; #[cfg(feature = "serde")] use serde_derive::{Deserialize, Serialize}; #[cfg(any(feature = "std", target_arch = "wasm32"))] -use std::{boxed::Box, string::String, vec::Vec}; +use std::vec::Vec; #[cfg(feature = "borsh")] use { borsh::{BorshDeserialize, BorshSchema, BorshSerialize}, @@ -1121,7 +1121,7 @@ pub fn new_rand() -> Pubkey { } #[cfg(all(feature = "std", not(target_os = "solana")))] -pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), Box> { +pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), std::boxed::Box> { use std::io::Write; let serialized = std::format!("\"{pubkey}\""); @@ -1135,10 +1135,10 @@ pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), Box Result> { +pub fn read_pubkey_file(infile: &str) -> Result> { use std::io::Read; let mut f = std::fs::File::open(infile)?; - let mut buffer = String::new(); + let mut buffer = std::string::String::new(); f.read_to_string(&mut buffer)?; let trimmed = buffer.trim(); if !trimmed.starts_with('"') || !trimmed.ends_with('"') { @@ -1434,7 +1434,7 @@ mod tests { } #[test] - fn test_read_write_pubkey() -> Result<(), Box> { + fn test_read_write_pubkey() -> Result<(), std::boxed::Box> { let filename = "test_pubkey.json"; let pubkey = new_rand(); write_pubkey_file(filename, pubkey)?; From 0a6762ad0b570c4974836674623273418a5eb685 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Thu, 26 Sep 2024 13:43:18 +0400 Subject: [PATCH 09/11] fmt --- sdk/pubkey/src/lib.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index 7924f9943c21de..da16ac4856d957 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -1121,7 +1121,10 @@ pub fn new_rand() -> Pubkey { } #[cfg(all(feature = "std", not(target_os = "solana")))] -pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), std::boxed::Box> { +pub fn write_pubkey_file( + outfile: &str, + pubkey: Pubkey, +) -> Result<(), std::boxed::Box> { use std::io::Write; let serialized = std::format!("\"{pubkey}\""); From a1fb7a946c23ab6639f73bdd9b742e179dec7123 Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Tue, 15 Oct 2024 15:08:40 +0400 Subject: [PATCH 10/11] deprecate sdk::pubkey::{read_pubkey_file, write_pubkey_file} and duplicate in solana-keygen --- Cargo.lock | 1 + keygen/Cargo.toml | 1 + keygen/src/keygen.rs | 42 +++++++++++++++++++++++++++++++++++---- sdk/pubkey/src/lib.rs | 46 ------------------------------------------- sdk/src/pubkey.rs | 29 ++++++++++++++++++++++++++- 5 files changed, 68 insertions(+), 51 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0e9569f47e6a82..fa05995b7dc7d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6872,6 +6872,7 @@ dependencies = [ "clap 3.2.23", "dirs-next", "num_cpus", + "serde_json", "solana-clap-v3-utils", "solana-cli-config", "solana-derivation-path", diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 4dd74305996883..93c5e4f2e4f064 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -14,6 +14,7 @@ bs58 = { workspace = true } clap = { version = "3.1.5", features = ["cargo"] } dirs-next = { workspace = true } num_cpus = { workspace = true } +serde_json = { workspace = true } solana-clap-v3-utils = { workspace = true } solana-cli-config = { workspace = true } solana-derivation-path = { workspace = true } diff --git a/keygen/src/keygen.rs b/keygen/src/keygen.rs index cbccb33e9a9095..6f0b9ff93adc18 100644 --- a/keygen/src/keygen.rs +++ b/keygen/src/keygen.rs @@ -30,7 +30,7 @@ use { solana_sdk::{ instruction::{AccountMeta, Instruction}, message::Message, - pubkey::{write_pubkey_file, Pubkey}, + pubkey::Pubkey, signature::{ keypair_from_seed, keypair_from_seed_and_derivation_path, write_keypair, write_keypair_file, Keypair, Signer, @@ -424,6 +424,21 @@ fn app<'a>(num_threads: &'a str, crate_version: &'a str) -> Command<'a> { ) } +fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), Box> { + use std::io::Write; + + let printable = format!("{pubkey}"); + let serialized = serde_json::to_string(&printable)?; + + if let Some(outdir) = std::path::Path::new(&outfile).parent() { + std::fs::create_dir_all(outdir)?; + } + let mut f = std::fs::File::create(outfile)?; + f.write_all(&serialized.into_bytes())?; + + Ok(()) +} + fn main() -> Result<(), Box> { let default_num_threads = num_cpus::get().to_string(); let matches = app(&default_num_threads, solana_version::version!()) @@ -768,6 +783,14 @@ mod tests { tempfile::{tempdir, TempDir}, }; + fn read_pubkey_file(infile: &str) -> Result> { + let f = std::fs::File::open(infile)?; + let printable: String = serde_json::from_reader(f)?; + + use std::str::FromStr; + Ok(Pubkey::from_str(&printable)?) + } + fn process_test_command(args: &[&str]) -> Result<(), Box> { let default_num_threads = num_cpus::get().to_string(); let solana_version = solana_version::version!(); @@ -919,7 +942,7 @@ mod tests { ]) .unwrap(); - let result_pubkey = solana_sdk::pubkey::read_pubkey_file(&outfile_path).unwrap(); + let result_pubkey = read_pubkey_file(&outfile_path).unwrap(); assert_eq!(result_pubkey, expected_pubkey); } @@ -938,7 +961,7 @@ mod tests { ]) .unwrap(); - let result_pubkey = solana_sdk::pubkey::read_pubkey_file(&outfile_path).unwrap(); + let result_pubkey = read_pubkey_file(&outfile_path).unwrap(); assert_eq!(result_pubkey, expected_pubkey); } @@ -962,7 +985,7 @@ mod tests { ]) .unwrap(); - let result_pubkey = solana_sdk::pubkey::read_pubkey_file(&outfile_path).unwrap(); + let result_pubkey = read_pubkey_file(&outfile_path).unwrap(); assert_eq!(result_pubkey, expected_pubkey); } @@ -1129,4 +1152,15 @@ mod tests { ]) .unwrap(); } + + #[test] + fn test_read_write_pubkey() -> Result<(), std::boxed::Box> { + let filename = "test_pubkey.json"; + let pubkey = solana_sdk::pubkey::new_rand(); + write_pubkey_file(filename, pubkey)?; + let read = read_pubkey_file(filename)?; + assert_eq!(read, pubkey); + std::fs::remove_file(filename)?; + Ok(()) + } } diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index da16ac4856d957..4cc59f72536fc3 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -1120,41 +1120,6 @@ pub fn new_rand() -> Pubkey { Pubkey::from(rand::random::<[u8; PUBKEY_BYTES]>()) } -#[cfg(all(feature = "std", not(target_os = "solana")))] -pub fn write_pubkey_file( - outfile: &str, - pubkey: Pubkey, -) -> Result<(), std::boxed::Box> { - use std::io::Write; - let serialized = std::format!("\"{pubkey}\""); - - if let Some(outdir) = std::path::Path::new(&outfile).parent() { - std::fs::create_dir_all(outdir)?; - } - let mut f = std::fs::File::create(outfile)?; - f.write_all(&serialized.into_bytes())?; - - Ok(()) -} - -#[cfg(all(feature = "std", not(target_os = "solana")))] -pub fn read_pubkey_file(infile: &str) -> Result> { - use std::io::Read; - let mut f = std::fs::File::open(infile)?; - let mut buffer = std::string::String::new(); - f.read_to_string(&mut buffer)?; - let trimmed = buffer.trim(); - if !trimmed.starts_with('"') || !trimmed.ends_with('"') { - return Err(std::io::Error::new( - std::io::ErrorKind::InvalidData, - "Input must be a JSON string.", - ) - .into()); - } - let contents = &trimmed[1..trimmed.len() - 1]; - Ok(Pubkey::from_str(contents)?) -} - #[cfg(test)] mod tests { use {super::*, std::fs::remove_file, strum::IntoEnumIterator}; @@ -1435,15 +1400,4 @@ mod tests { PK ); } - - #[test] - fn test_read_write_pubkey() -> Result<(), std::boxed::Box> { - let filename = "test_pubkey.json"; - let pubkey = new_rand(); - write_pubkey_file(filename, pubkey)?; - let read = read_pubkey_file(filename)?; - assert_eq!(read, pubkey); - remove_file(filename)?; - Ok(()) - } } diff --git a/sdk/src/pubkey.rs b/sdk/src/pubkey.rs index e5145330e4d446..344f0698444cb2 100644 --- a/sdk/src/pubkey.rs +++ b/sdk/src/pubkey.rs @@ -1,8 +1,35 @@ +#[cfg(feature = "full")] +pub use solana_pubkey::new_rand; #[cfg(target_os = "solana")] pub use solana_pubkey::syscalls; pub use solana_pubkey::{ bytes_are_curve_point, ParsePubkeyError, Pubkey, PubkeyError, MAX_SEEDS, MAX_SEED_LEN, PUBKEY_BYTES, }; + +#[deprecated(since = "2.1.0")] +#[cfg(feature = "full")] +pub fn write_pubkey_file(outfile: &str, pubkey: Pubkey) -> Result<(), Box> { + use std::io::Write; + + let printable = format!("{pubkey}"); + let serialized = serde_json::to_string(&printable)?; + + if let Some(outdir) = std::path::Path::new(&outfile).parent() { + std::fs::create_dir_all(outdir)?; + } + let mut f = std::fs::File::create(outfile)?; + f.write_all(&serialized.into_bytes())?; + + Ok(()) +} + +#[deprecated(since = "2.1.0")] #[cfg(feature = "full")] -pub use solana_pubkey::{new_rand, read_pubkey_file, write_pubkey_file}; +pub fn read_pubkey_file(infile: &str) -> Result> { + let f = std::fs::File::open(infile)?; + let printable: String = serde_json::from_reader(f)?; + + use std::str::FromStr; + Ok(Pubkey::from_str(&printable)?) +} From f9717d62e7503b3aaa3bb28ada606e0d4846ac5f Mon Sep 17 00:00:00 2001 From: kevinheavey Date: Tue, 15 Oct 2024 15:21:26 +0400 Subject: [PATCH 11/11] lint --- sdk/pubkey/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/pubkey/src/lib.rs b/sdk/pubkey/src/lib.rs index 4cc59f72536fc3..d603d6a97b3b9b 100644 --- a/sdk/pubkey/src/lib.rs +++ b/sdk/pubkey/src/lib.rs @@ -1122,7 +1122,7 @@ pub fn new_rand() -> Pubkey { #[cfg(test)] mod tests { - use {super::*, std::fs::remove_file, strum::IntoEnumIterator}; + use {super::*, strum::IntoEnumIterator}; #[test] fn test_new_unique() {