diff --git a/Cargo.lock b/Cargo.lock
index 2272c19754ba95..3b30fda64444ce 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6496,18 +6496,32 @@ dependencies = [
"log",
"quinn",
"rayon",
+ "solana-account",
+ "solana-client-traits",
+ "solana-commitment-config",
"solana-connection-cache",
+ "solana-epoch-info",
+ "solana-hash",
+ "solana-instruction",
+ "solana-keypair",
"solana-measure",
"solana-net-utils",
+ "solana-program",
+ "solana-pubkey",
"solana-pubsub-client",
"solana-quic-client",
+ "solana-quic-definitions",
"solana-rpc-client",
"solana-rpc-client-api",
"solana-rpc-client-nonce-utils",
- "solana-sdk",
+ "solana-signature",
+ "solana-signer",
"solana-streamer",
"solana-thin-client",
+ "solana-time-utils",
"solana-tpu-client",
+ "solana-transaction",
+ "solana-transaction-error",
"solana-udp-client",
"thiserror 2.0.3",
"tokio",
@@ -6542,6 +6556,24 @@ dependencies = [
"tungstenite",
]
+[[package]]
+name = "solana-client-traits"
+version = "2.2.0"
+dependencies = [
+ "solana-account",
+ "solana-commitment-config",
+ "solana-epoch-info",
+ "solana-hash",
+ "solana-instruction",
+ "solana-keypair",
+ "solana-program",
+ "solana-pubkey",
+ "solana-signature",
+ "solana-signer",
+ "solana-transaction",
+ "solana-transaction-error",
+]
+
[[package]]
name = "solana-clock"
version = "2.2.0"
@@ -8474,6 +8506,7 @@ dependencies = [
"siphasher",
"solana-account",
"solana-bn254",
+ "solana-client-traits",
"solana-cluster-type",
"solana-commitment-config",
"solana-compute-budget-interface",
@@ -8517,6 +8550,7 @@ dependencies = [
"solana-signer",
"solana-sysvar",
"solana-time-utils",
+ "solana-transaction",
"solana-transaction-context",
"solana-transaction-error",
"static_assertions",
@@ -9199,6 +9233,43 @@ dependencies = [
"tokio-util 0.7.12",
]
+[[package]]
+name = "solana-transaction"
+version = "2.2.0"
+dependencies = [
+ "anyhow",
+ "bincode",
+ "borsh 1.5.3",
+ "serde",
+ "serde_derive",
+ "solana-bincode",
+ "solana-feature-set",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-hash",
+ "solana-instruction",
+ "solana-keypair",
+ "solana-logger",
+ "solana-nonce",
+ "solana-packet",
+ "solana-precompiles",
+ "solana-presigner",
+ "solana-program",
+ "solana-pubkey",
+ "solana-reserved-account-keys",
+ "solana-sanitize",
+ "solana-sdk",
+ "solana-sdk-ids",
+ "solana-sha256-hasher",
+ "solana-short-vec",
+ "solana-signature",
+ "solana-signer",
+ "solana-transaction",
+ "solana-transaction-error",
+ "static_assertions",
+ "wasm-bindgen",
+]
+
[[package]]
name = "solana-transaction-context"
version = "2.2.0"
diff --git a/Cargo.toml b/Cargo.toml
index 55ce023631449f..7e64899c08180c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -105,6 +105,7 @@ members = [
"sdk/borsh",
"sdk/cargo-build-sbf",
"sdk/cargo-test-sbf",
+ "sdk/client-traits",
"sdk/clock",
"sdk/cluster-type",
"sdk/commitment-config",
@@ -171,6 +172,7 @@ members = [
"sdk/sysvar",
"sdk/sysvar-id",
"sdk/time-utils",
+ "sdk/transaction",
"sdk/transaction-context",
"sdk/transaction-error",
"send-transaction-service",
@@ -437,6 +439,7 @@ solana-cli = { path = "cli", version = "=2.2.0" }
solana-cli-config = { path = "cli-config", version = "=2.2.0" }
solana-cli-output = { path = "cli-output", version = "=2.2.0" }
solana-client = { path = "client", version = "=2.2.0" }
+solana-client-traits = { path = "sdk/client-traits", version = "=2.2.0" }
solana-clock = { path = "sdk/clock", version = "=2.2.0" }
solana-cluster-type = { path = "sdk/cluster-type", version = "=2.2.0" }
solana-commitment-config = { path = "sdk/commitment-config", version = "=2.2.0" }
@@ -564,6 +567,7 @@ solana-sysvar = { path = "sdk/sysvar", version = "=2.2.0" }
solana-sysvar-id = { path = "sdk/sysvar-id", version = "=2.2.0" }
solana-test-validator = { path = "test-validator", version = "=2.2.0" }
solana-thin-client = { path = "thin-client", version = "=2.2.0" }
+solana-transaction = { path = "sdk/transaction", version = "=2.2.0" }
solana-transaction-error = { path = "sdk/transaction-error", version = "=2.2.0" }
solana-tpu-client = { path = "tpu-client", version = "=2.2.0", default-features = false }
solana-tpu-client-next = { path = "tpu-client-next", version = "=2.2.0" }
diff --git a/client/Cargo.toml b/client/Cargo.toml
index 36cab356c05104..cf2a724bf847eb 100644
--- a/client/Cargo.toml
+++ b/client/Cargo.toml
@@ -20,17 +20,31 @@ indicatif = { workspace = true }
log = { workspace = true }
quinn = { workspace = true }
rayon = { workspace = true }
+solana-account = { workspace = true }
+solana-client-traits = { workspace = true }
+solana-commitment-config = { workspace = true }
solana-connection-cache = { workspace = true }
+solana-epoch-info = { workspace = true }
+solana-hash = { workspace = true }
+solana-instruction = { workspace = true }
+solana-keypair = { workspace = true }
solana-measure = { workspace = true }
+solana-program = { workspace = true, default-features = false }
+solana-pubkey = { workspace = true }
solana-pubsub-client = { workspace = true }
solana-quic-client = { workspace = true }
+solana-quic-definitions = { workspace = true }
solana-rpc-client = { workspace = true, features = ["default"] }
solana-rpc-client-api = { workspace = true }
solana-rpc-client-nonce-utils = { workspace = true }
-solana-sdk = { workspace = true, features = ["openssl-vendored"] }
+solana-signature = { workspace = true }
+solana-signer = { workspace = true }
solana-streamer = { workspace = true }
solana-thin-client = { workspace = true }
+solana-time-utils = { workspace = true }
solana-tpu-client = { workspace = true, features = ["default"] }
+solana-transaction = { workspace = true }
+solana-transaction-error = { workspace = true }
solana-udp-client = { workspace = true }
thiserror = { workspace = true }
tokio = { workspace = true, features = ["full"] }
diff --git a/client/src/connection_cache.rs b/client/src/connection_cache.rs
index 28cc60a18075b3..10b3bbb9ecd609 100644
--- a/client/src/connection_cache.rs
+++ b/client/src/connection_cache.rs
@@ -8,12 +8,12 @@ use {
NewConnectionConfig,
},
},
+ solana_keypair::Keypair,
+ solana_pubkey::Pubkey,
solana_quic_client::{QuicConfig, QuicConnectionManager, QuicPool},
- solana_sdk::{
- pubkey::Pubkey, quic::NotifyKeyUpdate, signature::Keypair,
- transport::Result as TransportResult,
- },
+ solana_quic_definitions::NotifyKeyUpdate,
solana_streamer::streamer::StakedNodes,
+ solana_transaction_error::TransportResult,
solana_udp_client::{UdpConfig, UdpConnectionManager, UdpPool},
std::{
net::{IpAddr, Ipv4Addr, SocketAddr},
@@ -201,8 +201,8 @@ mod tests {
super::*,
crate::connection_cache::ConnectionCache,
crossbeam_channel::unbounded,
+ solana_keypair::Keypair,
solana_net_utils::bind_to_localhost,
- solana_sdk::signature::Keypair,
solana_streamer::{
quic::{QuicServerParams, SpawnServerResult},
streamer::StakedNodes,
diff --git a/client/src/nonblocking/tpu_client.rs b/client/src/nonblocking/tpu_client.rs
index 5e71eae36bd6e4..e59a169416e4fa 100644
--- a/client/src/nonblocking/tpu_client.rs
+++ b/client/src/nonblocking/tpu_client.rs
@@ -5,15 +5,13 @@ use {
ConnectionCache as BackendConnectionCache, ConnectionManager, ConnectionPool,
NewConnectionConfig,
},
+ solana_program::message::Message,
solana_quic_client::{QuicConfig, QuicConnectionManager, QuicPool},
solana_rpc_client::nonblocking::rpc_client::RpcClient,
- solana_sdk::{
- message::Message,
- signers::Signers,
- transaction::{Transaction, TransactionError},
- transport::Result as TransportResult,
- },
+ solana_signer::signers::Signers,
solana_tpu_client::nonblocking::tpu_client::{Result, TpuClient as BackendTpuClient},
+ solana_transaction::Transaction,
+ solana_transaction_error::{TransactionError, TransportResult},
std::sync::Arc,
};
diff --git a/client/src/send_and_confirm_transactions_in_parallel.rs b/client/src/send_and_confirm_transactions_in_parallel.rs
index eb7153316702cf..adf3cee9c041d3 100644
--- a/client/src/send_and_confirm_transactions_in_parallel.rs
+++ b/client/src/send_and_confirm_transactions_in_parallel.rs
@@ -6,6 +6,8 @@ use {
bincode::serialize,
dashmap::DashMap,
futures_util::future::join_all,
+ solana_hash::Hash,
+ solana_program::message::Message,
solana_quic_client::{QuicConfig, QuicConnectionManager, QuicPool},
solana_rpc_client::spinner::{self, SendTransactionProgress},
solana_rpc_client_api::{
@@ -14,14 +16,11 @@ use {
request::{RpcError, RpcResponseErrorData, MAX_GET_SIGNATURE_STATUSES_QUERY_ITEMS},
response::RpcSimulateTransactionResult,
},
- solana_sdk::{
- hash::Hash,
- message::Message,
- signature::{Signature, SignerError},
- signers::Signers,
- transaction::{Transaction, TransactionError},
- },
+ solana_signature::Signature,
+ solana_signer::{signers::Signers, SignerError},
solana_tpu_client::tpu_client::{Result, TpuSenderError},
+ solana_transaction::Transaction,
+ solana_transaction_error::TransactionError,
std::{
sync::{
atomic::{AtomicU64, AtomicUsize, Ordering},
diff --git a/client/src/thin_client.rs b/client/src/thin_client.rs
index 596c9a13a6dbd3..c769d5bf623c16 100644
--- a/client/src/thin_client.rs
+++ b/client/src/thin_client.rs
@@ -5,24 +5,23 @@
#[allow(deprecated)]
use {
crate::connection_cache::{dispatch, ConnectionCache},
+ solana_account::Account,
+ solana_client_traits::{AsyncClient, Client, SyncClient},
+ solana_commitment_config::CommitmentConfig,
+ solana_epoch_info::EpochInfo,
+ solana_hash::Hash,
+ solana_instruction::Instruction,
+ solana_keypair::Keypair,
+ solana_program::message::Message,
+ solana_pubkey::Pubkey,
solana_quic_client::{QuicConfig, QuicConnectionManager, QuicPool},
solana_rpc_client::rpc_client::RpcClient,
solana_rpc_client_api::config::RpcProgramAccountsConfig,
- solana_sdk::{
- account::Account,
- client::{AsyncClient, Client, SyncClient},
- commitment_config::CommitmentConfig,
- epoch_info::EpochInfo,
- hash::Hash,
- instruction::Instruction,
- message::Message,
- pubkey::Pubkey,
- signature::{Keypair, Signature},
- signers::Signers,
- transaction::{self, Transaction, VersionedTransaction},
- transport::Result as TransportResult,
- },
+ solana_signature::Signature,
+ solana_signer::signers::Signers,
solana_thin_client::thin_client::ThinClient as BackendThinClient,
+ solana_transaction::{versioned::VersionedTransaction, Transaction},
+ solana_transaction_error::{TransactionResult, TransportResult},
solana_udp_client::{UdpConfig, UdpConnectionManager, UdpPool},
std::{net::SocketAddr, sync::Arc, time::Duration},
};
@@ -214,13 +213,13 @@ impl SyncClient for ThinClient {
dispatch!(fn get_signature_status(
&self,
signature: &Signature
- ) -> TransportResult