From 22e10c7a1e8ea789bb9c8293eb99b2a7ef84c14b Mon Sep 17 00:00:00 2001 From: Kevin Heavey Date: Thu, 14 Nov 2024 03:06:23 +0400 Subject: [PATCH] Extract ed25519-instructions crate (#3330) * strat extracting ed25519-instructions crate * missing feature activation * fix imports and deps * update lock file * import program id from solana_sdk_ids * use more granular dev deps * fix program id in tests --- Cargo.lock | 21 ++++++++++++ Cargo.toml | 2 ++ programs/sbf/Cargo.lock | 14 ++++++++ sdk/Cargo.toml | 2 ++ sdk/ed25519-instructions/Cargo.toml | 34 +++++++++++++++++++ .../src/lib.rs} | 16 ++++----- sdk/src/lib.rs | 7 +++- 7 files changed, 85 insertions(+), 11 deletions(-) create mode 100644 sdk/ed25519-instructions/Cargo.toml rename sdk/{src/ed25519_instruction.rs => ed25519-instructions/src/lib.rs} (98%) diff --git a/Cargo.lock b/Cargo.lock index be294c5cb7f1f2..7dc59eefb29437 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6810,6 +6810,26 @@ dependencies = [ "solana-sdk", ] +[[package]] +name = "solana-ed25519-instructions" +version = "2.2.0" +dependencies = [ + "bytemuck", + "bytemuck_derive", + "ed25519-dalek", + "hex", + "rand 0.7.3", + "solana-feature-set", + "solana-hash", + "solana-instruction", + "solana-keypair", + "solana-logger", + "solana-precompile-error", + "solana-sdk", + "solana-sdk-ids", + "solana-signer", +] + [[package]] name = "solana-ed25519-program-tests" version = "2.2.0" @@ -8328,6 +8348,7 @@ dependencies = [ "solana-commitment-config", "solana-decode-error", "solana-derivation-path", + "solana-ed25519-instructions", "solana-feature-set", "solana-fee-structure", "solana-frozen-abi", diff --git a/Cargo.toml b/Cargo.toml index 383d9e65316625..b8776cd00733b5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -111,6 +111,7 @@ members = [ "sdk/decode-error", "sdk/define-syscall", "sdk/derivation-path", + "sdk/ed25519-instructions", "sdk/epoch-rewards", "sdk/epoch-schedule", "sdk/feature-set", @@ -438,6 +439,7 @@ solana-decode-error = { path = "sdk/decode-error", version = "=2.2.0" } solana-define-syscall = { path = "sdk/define-syscall", version = "=2.2.0" } solana-derivation-path = { path = "sdk/derivation-path", version = "=2.2.0" } solana-download-utils = { path = "download-utils", version = "=2.2.0" } +solana-ed25519-instructions = { path = "sdk/ed25519-instructions", version = "=2.2.0" } solana-entry = { path = "entry", version = "=2.2.0" } solana-program-entrypoint = { path = "sdk/program-entrypoint", version = "=2.2.0" } solana-epoch-rewards = { path = "sdk/epoch-rewards", version = "=2.2.0" } diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index d705475746e296..fcf5836ef124f4 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -5459,6 +5459,19 @@ dependencies = [ "solana-sdk", ] +[[package]] +name = "solana-ed25519-instructions" +version = "2.2.0" +dependencies = [ + "bytemuck", + "bytemuck_derive", + "ed25519-dalek", + "solana-feature-set", + "solana-instruction", + "solana-precompile-error", + "solana-sdk-ids", +] + [[package]] name = "solana-entry" version = "2.2.0" @@ -7062,6 +7075,7 @@ dependencies = [ "solana-commitment-config", "solana-decode-error", "solana-derivation-path", + "solana-ed25519-instructions", "solana-feature-set", "solana-fee-structure", "solana-inflation", diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index 8d9f1225701eba..2475950c971c9d 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -35,6 +35,7 @@ full = [ "digest", "solana-pubkey/rand", "dep:solana-cluster-type", + "dep:solana-ed25519-instructions", "dep:solana-keypair", "dep:solana-precompile-error", "dep:solana-presigner", @@ -104,6 +105,7 @@ solana-cluster-type = { workspace = true, features = [ solana-commitment-config = { workspace = true, optional = true, features = ["serde"] } solana-decode-error = { workspace = true } solana-derivation-path = { workspace = true } +solana-ed25519-instructions = { workspace = true, optional = true } solana-feature-set = { workspace = true } solana-fee-structure = { workspace = true, features = ["serde"] } solana-frozen-abi = { workspace = true, optional = true, features = [ diff --git a/sdk/ed25519-instructions/Cargo.toml b/sdk/ed25519-instructions/Cargo.toml new file mode 100644 index 00000000000000..27014a646374b7 --- /dev/null +++ b/sdk/ed25519-instructions/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "solana-ed25519-instructions" +description = "Instructions for the Solana ed25519 native program" +documentation = "https://docs.rs/solana-ed25519-instructions" +version = { workspace = true } +authors = { workspace = true } +repository = { workspace = true } +homepage = { workspace = true } +license = { workspace = true } +edition = { workspace = true } + +[dependencies] +bytemuck = { workspace = true } +bytemuck_derive = { workspace = true } +ed25519-dalek = { workspace = true } +solana-feature-set = { workspace = true } +solana-instruction = { workspace = true, features = ["std"] } +solana-precompile-error = { workspace = true } +solana-sdk-ids = { workspace = true } + +[dev-dependencies] +hex = { workspace = true } +rand0-7 = { workspace = true } +solana-hash = { workspace = true } +solana-keypair = { workspace = true } +solana-logger = { workspace = true } +solana-sdk = { path = ".." } +solana-signer = { workspace = true } + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[lints] +workspace = true diff --git a/sdk/src/ed25519_instruction.rs b/sdk/ed25519-instructions/src/lib.rs similarity index 98% rename from sdk/src/ed25519_instruction.rs rename to sdk/ed25519-instructions/src/lib.rs index 688ef0dade9d39..8e81aeac903d2d 100644 --- a/sdk/src/ed25519_instruction.rs +++ b/sdk/ed25519-instructions/src/lib.rs @@ -2,8 +2,6 @@ //! //! [np]: https://docs.solanalabs.com/runtime/programs#ed25519-program -#![cfg(feature = "full")] - use { bytemuck::bytes_of, bytemuck_derive::{Pod, Zeroable}, @@ -79,7 +77,7 @@ pub fn new_ed25519_instruction(keypair: &ed25519_dalek::Keypair, message: &[u8]) instruction_data.extend_from_slice(message); Instruction { - program_id: solana_sdk::ed25519_program::id(), + program_id: solana_sdk_ids::ed25519_program::id(), accounts: vec![], data: instruction_data, } @@ -190,15 +188,13 @@ fn get_data_slice<'a>( pub mod test { use { super::*, - crate::{ - ed25519_instruction::new_ed25519_instruction, - hash::Hash, - signature::{Keypair, Signer}, - transaction::Transaction, - }, hex, rand0_7::{thread_rng, Rng}, solana_feature_set::FeatureSet, + solana_hash::Hash, + solana_keypair::Keypair, + solana_sdk::transaction::Transaction, + solana_signer::Signer, }; pub fn new_ed25519_instruction_raw( @@ -249,7 +245,7 @@ pub mod test { instruction_data.extend_from_slice(message); Instruction { - program_id: solana_sdk::ed25519_program::id(), + program_id: solana_sdk_ids::ed25519_program::id(), accounts: vec![], data: instruction_data, } diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs index 10721132595c5d..befe275a0ee223 100644 --- a/sdk/src/lib.rs +++ b/sdk/src/lib.rs @@ -64,7 +64,6 @@ pub use solana_signer::signers; pub mod client; pub mod compute_budget; pub mod deserialize_utils; -pub mod ed25519_instruction; pub mod entrypoint; pub mod entrypoint_deprecated; pub mod epoch_info; @@ -120,6 +119,12 @@ pub use solana_bn254 as alt_bn128; pub use solana_decode_error as decode_error; #[deprecated(since = "2.1.0", note = "Use `solana-derivation-path` crate instead")] pub use solana_derivation_path as derivation_path; +#[cfg(feature = "full")] +#[deprecated( + since = "2.2.0", + note = "Use `solana-ed25519-instructions` crate instead" +)] +pub use solana_ed25519_instructions as ed25519_instruction; #[deprecated(since = "2.1.0", note = "Use `solana-feature-set` crate instead")] pub use solana_feature_set as feature_set; #[deprecated(since = "2.2.0", note = "Use `solana-fee-structure` crate instead")]