Pārlūkot izejas kodu

Pull sanitize crate out of solana-program (#1707)

* move sanitize.rs out of solana-program into its own crate

* update imports and dependencies

* fmt

* Update crate description

Co-authored-by: Joe C <joecaulfield29@yahoo.com>

* update lock files

* re-export solana-sanitize in sdk and program crates for backwards compatibility

* Update lib.rs

Co-authored-by: Joe C <joecaulfield29@yahoo.com>

* Revert "Update lib.rs"

This reverts commit fab60981dc5f29639d07198262b4e53d2a0a01b8.

---------

Co-authored-by: Joe C <joecaulfield29@yahoo.com>
Kevin Heavey 1 gadu atpakaļ
vecāks
revīzija
a4ba708cf7
45 mainītis faili ar 110 papildinājumiem un 68 dzēšanām
  1. 13 0
      Cargo.lock
  2. 2 0
      Cargo.toml
  3. 1 0
      bloom/Cargo.toml
  4. 2 4
      bloom/src/bloom.rs
  5. 1 0
      core/Cargo.toml
  6. 1 1
      core/src/banking_stage/immutable_deserialized_packet.rs
  7. 1 0
      gossip/Cargo.toml
  8. 1 1
      gossip/src/cluster_info.rs
  9. 1 1
      gossip/src/contact_info.rs
  10. 2 2
      gossip/src/crds_gossip_pull.rs
  11. 1 1
      gossip/src/crds_value.rs
  12. 2 5
      gossip/src/duplicate_shred.rs
  13. 2 5
      gossip/src/epoch_slots.rs
  14. 2 4
      gossip/src/legacy_contact_info.rs
  15. 1 1
      gossip/src/ping_pong.rs
  16. 2 7
      gossip/src/restart_crds_values.rs
  17. 13 0
      programs/sbf/Cargo.lock
  18. 16 0
      sanitize/Cargo.toml
  19. 0 0
      sanitize/src/lib.rs
  20. 1 0
      sdk/Cargo.toml
  21. 1 0
      sdk/program/Cargo.toml
  22. 1 1
      sdk/program/src/blake3.rs
  23. 1 1
      sdk/program/src/hash.rs
  24. 2 1
      sdk/program/src/instruction.rs
  25. 1 1
      sdk/program/src/keccak.rs
  26. 2 1
      sdk/program/src/lib.rs
  27. 1 1
      sdk/program/src/message/legacy.rs
  28. 1 1
      sdk/program/src/message/sanitized.rs
  29. 1 1
      sdk/program/src/message/versions/mod.rs
  30. 2 1
      sdk/program/src/message/versions/sanitized.rs
  31. 1 1
      sdk/program/src/message/versions/v0/mod.rs
  32. 1 1
      sdk/program/src/pubkey.rs
  33. 1 1
      sdk/program/src/serialize_utils/mod.rs
  34. 10 8
      sdk/program/src/sysvar/instructions.rs
  35. 6 4
      sdk/src/lib.rs
  36. 2 2
      sdk/src/offchain_message.rs
  37. 1 1
      sdk/src/signature.rs
  38. 1 1
      sdk/src/transaction/error.rs
  39. 1 1
      sdk/src/transaction/mod.rs
  40. 1 1
      sdk/src/transaction/sanitized.rs
  41. 1 1
      sdk/src/transaction/versioned/mod.rs
  42. 2 3
      sdk/src/transaction/versioned/sanitized.rs
  43. 1 0
      version/Cargo.toml
  44. 1 1
      version/src/legacy.rs
  45. 2 1
      version/src/lib.rs

+ 13 - 0
Cargo.lock

@@ -5706,6 +5706,7 @@ dependencies = [
  "serde_derive",
  "solana-frozen-abi",
  "solana-frozen-abi-macro",
+ "solana-sanitize",
  "solana-sdk",
 ]
 
@@ -6122,6 +6123,7 @@ dependencies = [
  "solana-rpc",
  "solana-rpc-client-api",
  "solana-runtime",
+ "solana-sanitize",
  "solana-sdk",
  "solana-send-transaction-service",
  "solana-stake-program",
@@ -6416,6 +6418,7 @@ dependencies = [
  "solana-perf",
  "solana-rayon-threadlimit",
  "solana-runtime",
+ "solana-sanitize",
  "solana-sdk",
  "solana-streamer",
  "solana-tpu-client",
@@ -6835,6 +6838,7 @@ dependencies = [
  "solana-frozen-abi",
  "solana-frozen-abi-macro",
  "solana-logger",
+ "solana-sanitize",
  "solana-sdk-macro",
  "static_assertions",
  "thiserror",
@@ -7243,6 +7247,13 @@ dependencies = [
  "thiserror",
 ]
 
+[[package]]
+name = "solana-sanitize"
+version = "2.1.0"
+dependencies = [
+ "thiserror",
+]
+
 [[package]]
 name = "solana-sdk"
 version = "2.1.0"
@@ -7291,6 +7302,7 @@ dependencies = [
  "solana-frozen-abi-macro",
  "solana-logger",
  "solana-program",
+ "solana-sanitize",
  "solana-sdk",
  "solana-sdk-macro",
  "static_assertions",
@@ -7798,6 +7810,7 @@ dependencies = [
  "serde_derive",
  "solana-frozen-abi",
  "solana-frozen-abi-macro",
+ "solana-sanitize",
  "solana-sdk",
 ]
 

+ 2 - 0
Cargo.toml

@@ -92,6 +92,7 @@ members = [
     "rpc-test",
     "runtime",
     "runtime-transaction",
+    "sanitize",
     "sdk",
     "sdk/cargo-build-bpf",
     "sdk/cargo-build-sbf",
@@ -376,6 +377,7 @@ solana-pubsub-client = { path = "pubsub-client", version = "=2.1.0" }
 solana-quic-client = { path = "quic-client", version = "=2.1.0" }
 solana-rayon-threadlimit = { path = "rayon-threadlimit", version = "=2.1.0" }
 solana-remote-wallet = { path = "remote-wallet", version = "=2.1.0", default-features = false }
+solana-sanitize = { path = "sanitize", version = "=2.1.0" }
 solana-unified-scheduler-logic = { path = "unified-scheduler-logic", version = "=2.1.0" }
 solana-unified-scheduler-pool = { path = "unified-scheduler-pool", version = "=2.1.0" }
 solana-rpc = { path = "rpc", version = "=2.1.0" }

+ 1 - 0
bloom/Cargo.toml

@@ -19,6 +19,7 @@ serde = { workspace = true, features = ["rc"] }
 serde_derive = { workspace = true }
 solana-frozen-abi = { workspace = true, optional = true }
 solana-frozen-abi-macro = { workspace = true, optional = true }
+solana-sanitize = { workspace = true }
 solana-sdk = { workspace = true }
 
 [lib]

+ 2 - 4
bloom/src/bloom.rs

@@ -5,10 +5,8 @@ use {
     fnv::FnvHasher,
     rand::{self, Rng},
     serde::{Deserialize, Serialize},
-    solana_sdk::{
-        sanitize::{Sanitize, SanitizeError},
-        timing::AtomicInterval,
-    },
+    solana_sanitize::{Sanitize, SanitizeError},
+    solana_sdk::timing::AtomicInterval,
     std::{
         cmp, fmt,
         hash::Hasher,

+ 1 - 0
core/Cargo.toml

@@ -65,6 +65,7 @@ solana-rayon-threadlimit = { workspace = true }
 solana-rpc = { workspace = true }
 solana-rpc-client-api = { workspace = true }
 solana-runtime = { workspace = true }
+solana-sanitize = { workspace = true }
 solana-sdk = { workspace = true }
 solana-send-transaction-service = { workspace = true }
 solana-streamer = { workspace = true }

+ 1 - 1
core/src/banking_stage/immutable_deserialized_packet.rs

@@ -2,11 +2,11 @@ use {
     super::packet_filter::PacketFilterFailure,
     solana_perf::packet::Packet,
     solana_runtime::compute_budget_details::{ComputeBudgetDetails, GetComputeBudgetDetails},
+    solana_sanitize::SanitizeError,
     solana_sdk::{
         hash::Hash,
         message::Message,
         pubkey::Pubkey,
-        sanitize::SanitizeError,
         short_vec::decode_shortu16_len,
         signature::Signature,
         transaction::{

+ 1 - 0
gossip/Cargo.toml

@@ -42,6 +42,7 @@ solana-net-utils = { workspace = true }
 solana-perf = { workspace = true }
 solana-rayon-threadlimit = { workspace = true }
 solana-runtime = { workspace = true }
+solana-sanitize = { workspace = true }
 solana-sdk = { workspace = true }
 solana-streamer = { workspace = true }
 solana-tpu-client = { workspace = true }

+ 1 - 1
gossip/src/cluster_info.rs

@@ -64,13 +64,13 @@ use {
     },
     solana_rayon_threadlimit::get_thread_count,
     solana_runtime::bank_forks::BankForks,
+    solana_sanitize::{Sanitize, SanitizeError},
     solana_sdk::{
         clock::{Slot, DEFAULT_MS_PER_SLOT, DEFAULT_SLOTS_PER_EPOCH},
         feature_set::FeatureSet,
         hash::Hash,
         pubkey::Pubkey,
         quic::QUIC_PORT_OFFSET,
-        sanitize::{Sanitize, SanitizeError},
         signature::{Keypair, Signable, Signature, Signer},
         timing::timestamp,
         transaction::Transaction,

+ 1 - 1
gossip/src/contact_info.rs

@@ -3,11 +3,11 @@ use {
     crate::{crds_value::MAX_WALLCLOCK, legacy_contact_info::LegacyContactInfo},
     assert_matches::{assert_matches, debug_assert_matches},
     serde::{Deserialize, Deserializer, Serialize},
+    solana_sanitize::{Sanitize, SanitizeError},
     solana_sdk::{
         pubkey::Pubkey,
         quic::QUIC_PORT_OFFSET,
         rpc_port::{DEFAULT_RPC_PORT, DEFAULT_RPC_PUBSUB_PORT},
-        sanitize::{Sanitize, SanitizeError},
         serde_varint, short_vec,
     },
     solana_streamer::socket::SocketAddrSpace,

+ 2 - 2
gossip/src/crds_gossip_pull.rs

@@ -73,8 +73,8 @@ impl Default for CrdsFilter {
     }
 }
 
-impl solana_sdk::sanitize::Sanitize for CrdsFilter {
-    fn sanitize(&self) -> std::result::Result<(), solana_sdk::sanitize::SanitizeError> {
+impl solana_sanitize::Sanitize for CrdsFilter {
+    fn sanitize(&self) -> std::result::Result<(), solana_sanitize::SanitizeError> {
         self.filter.sanitize()?;
         Ok(())
     }

+ 1 - 1
gossip/src/crds_value.rs

@@ -11,11 +11,11 @@ use {
     bincode::{serialize, serialized_size},
     rand::{CryptoRng, Rng},
     serde::de::{Deserialize, Deserializer},
+    solana_sanitize::{Sanitize, SanitizeError},
     solana_sdk::{
         clock::Slot,
         hash::Hash,
         pubkey::{self, Pubkey},
-        sanitize::{Sanitize, SanitizeError},
         signature::{Keypair, Signable, Signature, Signer},
         timing::timestamp,
         transaction::Transaction,

+ 2 - 5
gossip/src/duplicate_shred.rs

@@ -6,11 +6,8 @@ use {
         blockstore_meta::{DuplicateSlotProof, ErasureMeta},
         shred::{self, Shred, ShredType},
     },
-    solana_sdk::{
-        clock::Slot,
-        pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
-    },
+    solana_sanitize::{Sanitize, SanitizeError},
+    solana_sdk::{clock::Slot, pubkey::Pubkey},
     std::{
         collections::{hash_map::Entry, HashMap},
         convert::TryFrom,

+ 2 - 5
gossip/src/epoch_slots.rs

@@ -6,11 +6,8 @@ use {
     bincode::serialized_size,
     bv::BitVec,
     flate2::{Compress, Compression, Decompress, FlushCompress, FlushDecompress},
-    solana_sdk::{
-        clock::Slot,
-        pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
-    },
+    solana_sanitize::{Sanitize, SanitizeError},
+    solana_sdk::{clock::Slot, pubkey::Pubkey},
 };
 
 pub const MAX_SLOTS_PER_ENTRY: usize = 2048 * 8;

+ 2 - 4
gossip/src/legacy_contact_info.rs

@@ -7,10 +7,8 @@ use {
         },
         crds_value::MAX_WALLCLOCK,
     },
-    solana_sdk::{
-        pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
-    },
+    solana_sanitize::{Sanitize, SanitizeError},
+    solana_sdk::pubkey::Pubkey,
     solana_streamer::socket::SocketAddrSpace,
     std::net::{IpAddr, SocketAddr},
 };

+ 1 - 1
gossip/src/ping_pong.rs

@@ -3,10 +3,10 @@ use {
     lru::LruCache,
     rand::{CryptoRng, Fill, Rng},
     serde::Serialize,
+    solana_sanitize::{Sanitize, SanitizeError},
     solana_sdk::{
         hash::{self, Hash},
         pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
         signature::{Keypair, Signable, Signature, Signer},
     },
     std::{

+ 2 - 7
gossip/src/restart_crds_values.rs

@@ -3,13 +3,8 @@ use {
     bv::BitVec,
     itertools::Itertools,
     rand::Rng,
-    solana_sdk::{
-        clock::Slot,
-        hash::Hash,
-        pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
-        serde_varint,
-    },
+    solana_sanitize::{Sanitize, SanitizeError},
+    solana_sdk::{clock::Slot, hash::Hash, pubkey::Pubkey, serde_varint},
     thiserror::Error,
 };
 

+ 13 - 0
programs/sbf/Cargo.lock

@@ -4655,6 +4655,7 @@ dependencies = [
  "rustc_version",
  "serde",
  "serde_derive",
+ "solana-sanitize",
  "solana-sdk",
 ]
 
@@ -4881,6 +4882,7 @@ dependencies = [
  "solana-rpc",
  "solana-rpc-client-api",
  "solana-runtime",
+ "solana-sanitize",
  "solana-sdk",
  "solana-send-transaction-service",
  "solana-streamer",
@@ -5060,6 +5062,7 @@ dependencies = [
  "solana-perf",
  "solana-rayon-threadlimit",
  "solana-runtime",
+ "solana-sanitize",
  "solana-sdk",
  "solana-streamer",
  "solana-tpu-client",
@@ -5311,6 +5314,7 @@ dependencies = [
  "serde_derive",
  "sha2 0.10.8",
  "sha3 0.10.8",
+ "solana-sanitize",
  "solana-sdk-macro",
  "thiserror",
  "wasm-bindgen",
@@ -5639,6 +5643,13 @@ dependencies = [
  "zstd",
 ]
 
+[[package]]
+name = "solana-sanitize"
+version = "2.1.0"
+dependencies = [
+ "thiserror",
+]
+
 [[package]]
 name = "solana-sbf-programs"
 version = "2.1.0"
@@ -6136,6 +6147,7 @@ dependencies = [
  "sha3 0.10.8",
  "siphasher",
  "solana-program",
+ "solana-sanitize",
  "solana-sdk-macro",
  "thiserror",
  "uriparse",
@@ -6500,6 +6512,7 @@ dependencies = [
  "semver",
  "serde",
  "serde_derive",
+ "solana-sanitize",
  "solana-sdk",
 ]
 

+ 16 - 0
sanitize/Cargo.toml

@@ -0,0 +1,16 @@
+[package]
+name = "solana-sanitize"
+description = "Solana Message Sanitization"
+documentation = "https://docs.rs/solana-sanitize"
+version = { workspace = true }
+authors = { workspace = true }
+repository = { workspace = true }
+homepage = { workspace = true }
+license = { workspace = true }
+edition = { workspace = true }
+
+[dependencies]
+thiserror = { workspace = true }
+
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]

+ 0 - 0
sdk/program/src/sanitize.rs → sanitize/src/lib.rs


+ 1 - 0
sdk/Cargo.toml

@@ -82,6 +82,7 @@ siphasher = { workspace = true }
 solana-frozen-abi = { workspace = true, optional = true }
 solana-frozen-abi-macro = { workspace = true, optional = true }
 solana-program = { workspace = true }
+solana-sanitize = { workspace = true }
 solana-sdk-macro = { workspace = true }
 thiserror = { workspace = true }
 uriparse = { workspace = true }

+ 1 - 0
sdk/program/Cargo.toml

@@ -32,6 +32,7 @@ sha2 = { workspace = true }
 sha3 = { workspace = true }
 solana-frozen-abi = { workspace = true, optional = true }
 solana-frozen-abi-macro = { workspace = true, optional = true }
+solana-sanitize = { workspace = true }
 solana-sdk-macro = { workspace = true }
 thiserror = { workspace = true }
 

+ 1 - 1
sdk/program/src/blake3.rs

@@ -5,7 +5,7 @@
 #[cfg(feature = "borsh")]
 use borsh::{BorshDeserialize, BorshSchema, BorshSerialize};
 use {
-    crate::sanitize::Sanitize,
+    solana_sanitize::Sanitize,
     std::{convert::TryFrom, fmt, mem, str::FromStr},
     thiserror::Error,
 };

+ 1 - 1
sdk/program/src/hash.rs

@@ -8,9 +8,9 @@ use crate::wasm_bindgen;
 #[cfg(feature = "borsh")]
 use borsh::{BorshDeserialize, BorshSchema, BorshSerialize};
 use {
-    crate::sanitize::Sanitize,
     bytemuck_derive::{Pod, Zeroable},
     sha2::{Digest, Sha256},
+    solana_sanitize::Sanitize,
     std::{convert::TryFrom, fmt, mem, str::FromStr},
     thiserror::Error,
 };

+ 2 - 1
sdk/program/src/instruction.rs

@@ -18,9 +18,10 @@ use crate::wasm_bindgen;
 #[cfg(feature = "borsh")]
 use borsh::BorshSerialize;
 use {
-    crate::{pubkey::Pubkey, sanitize::Sanitize, short_vec},
+    crate::{pubkey::Pubkey, short_vec},
     bincode::serialize,
     serde::Serialize,
+    solana_sanitize::Sanitize,
     thiserror::Error,
 };
 

+ 1 - 1
sdk/program/src/keccak.rs

@@ -5,8 +5,8 @@
 #[cfg(feature = "borsh")]
 use borsh::{BorshDeserialize, BorshSchema, BorshSerialize};
 use {
-    crate::sanitize::Sanitize,
     sha3::{Digest, Keccak256},
+    solana_sanitize::Sanitize,
     std::{convert::TryFrom, fmt, mem, str::FromStr},
     thiserror::Error,
 };

+ 2 - 1
sdk/program/src/lib.rs

@@ -519,7 +519,6 @@ pub mod program_stubs;
 pub mod program_utils;
 pub mod pubkey;
 pub mod rent;
-pub mod sanitize;
 pub mod secp256k1_program;
 pub mod secp256k1_recover;
 pub mod serde_varint;
@@ -545,6 +544,8 @@ pub mod address_lookup_table_account {
     pub use crate::address_lookup_table::AddressLookupTableAccount;
 }
 
+#[deprecated(since = "2.1.0", note = "Use `solana-sanitize` crate instead")]
+pub use solana_sanitize as sanitize;
 #[cfg(target_arch = "wasm32")]
 pub use wasm_bindgen::prelude::wasm_bindgen;
 

+ 1 - 1
sdk/program/src/message/legacy.rs

@@ -22,9 +22,9 @@ use {
         instruction::{CompiledInstruction, Instruction},
         message::{compiled_keys::CompiledKeys, MessageHeader},
         pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
         short_vec, system_instruction, system_program, sysvar,
     },
+    solana_sanitize::{Sanitize, SanitizeError},
     std::{collections::HashSet, convert::TryFrom, str::FromStr},
 };
 

+ 1 - 1
sdk/program/src/message/sanitized.rs

@@ -12,11 +12,11 @@ use {
         nonce::NONCED_TX_MARKER_IX_INDEX,
         program_utils::limited_deserialize,
         pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
         secp256k1_program,
         solana_program::{system_instruction::SystemInstruction, system_program},
         sysvar::instructions::{BorrowedAccountMeta, BorrowedInstruction},
     },
+    solana_sanitize::{Sanitize, SanitizeError},
     std::{borrow::Cow, collections::HashSet, convert::TryFrom},
     thiserror::Error,
 };

+ 1 - 1
sdk/program/src/message/versions/mod.rs

@@ -4,7 +4,6 @@ use {
         instruction::CompiledInstruction,
         message::{legacy::Message as LegacyMessage, v0::MessageAddressTableLookup, MessageHeader},
         pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
         short_vec,
     },
     serde::{
@@ -12,6 +11,7 @@ use {
         ser::{SerializeTuple, Serializer},
     },
     serde_derive::{Deserialize, Serialize},
+    solana_sanitize::{Sanitize, SanitizeError},
     std::{collections::HashSet, fmt},
 };
 

+ 2 - 1
sdk/program/src/message/versions/sanitized.rs

@@ -1,6 +1,7 @@
 use {
     super::VersionedMessage,
-    crate::{instruction::CompiledInstruction, pubkey::Pubkey, sanitize::SanitizeError},
+    crate::{instruction::CompiledInstruction, pubkey::Pubkey},
+    solana_sanitize::SanitizeError,
 };
 
 /// Wraps a sanitized `VersionedMessage` to provide a safe API

+ 1 - 1
sdk/program/src/message/versions/v0/mod.rs

@@ -21,9 +21,9 @@ use {
             AccountKeys, MessageHeader, MESSAGE_VERSION_PREFIX,
         },
         pubkey::Pubkey,
-        sanitize::SanitizeError,
         short_vec,
     },
+    solana_sanitize::SanitizeError,
     std::collections::HashSet,
 };
 

+ 1 - 1
sdk/program/src/pubkey.rs

@@ -95,7 +95,7 @@ impl From<u64> for PubkeyError {
 #[cfg_attr(test, derive(Arbitrary))]
 pub struct Pubkey(pub(crate) [u8; 32]);
 
-impl crate::sanitize::Sanitize for Pubkey {}
+impl solana_sanitize::Sanitize for Pubkey {}
 
 #[derive(Error, Debug, Serialize, Clone, PartialEq, Eq, FromPrimitive, ToPrimitive)]
 pub enum ParsePubkeyError {

+ 1 - 1
sdk/program/src/serialize_utils/mod.rs

@@ -1,7 +1,7 @@
 //! Helpers for reading and writing bytes.
 
 #![allow(clippy::arithmetic_side_effects)]
-use crate::{pubkey::Pubkey, sanitize::SanitizeError};
+use {crate::pubkey::Pubkey, solana_sanitize::SanitizeError};
 
 pub mod cursor;
 

+ 10 - 8
sdk/program/src/sysvar/instructions.rs

@@ -29,19 +29,21 @@
 
 #![allow(clippy::arithmetic_side_effects)]
 
-use crate::{
-    account_info::AccountInfo,
-    instruction::{AccountMeta, Instruction},
-    program_error::ProgramError,
-    pubkey::Pubkey,
-    sanitize::SanitizeError,
-    serialize_utils::{read_pubkey, read_slice, read_u16, read_u8},
-};
 #[cfg(not(target_os = "solana"))]
 use {
     crate::serialize_utils::{append_slice, append_u16, append_u8},
     bitflags::bitflags,
 };
+use {
+    crate::{
+        account_info::AccountInfo,
+        instruction::{AccountMeta, Instruction},
+        program_error::ProgramError,
+        pubkey::Pubkey,
+        serialize_utils::{read_pubkey, read_slice, read_u16, read_u8},
+    },
+    solana_sanitize::SanitizeError,
+};
 
 /// Instructions sysvar, dummy type.
 ///

+ 6 - 4
sdk/src/lib.rs

@@ -50,10 +50,10 @@ pub use solana_program::{
     decode_error, ed25519_program, epoch_rewards, epoch_schedule, fee_calculator, impl_sysvar_get,
     incinerator, instruction, keccak, lamports, loader_instruction, loader_upgradeable_instruction,
     loader_v4, loader_v4_instruction, message, msg, native_token, nonce, program, program_error,
-    program_memory, program_option, program_pack, rent, sanitize, secp256k1_program,
-    secp256k1_recover, serde_varint, serialize_utils, short_vec, slot_hashes, slot_history,
-    stable_layout, stake, stake_history, syscalls, system_instruction, system_program, sysvar,
-    unchecked_div_by_const, vote,
+    program_memory, program_option, program_pack, rent, secp256k1_program, secp256k1_recover,
+    serde_varint, serialize_utils, short_vec, slot_hashes, slot_history, stable_layout, stake,
+    stake_history, syscalls, system_instruction, system_program, sysvar, unchecked_div_by_const,
+    vote,
 };
 #[allow(deprecated)]
 pub use solana_program::{address_lookup_table_account, sdk_ids};
@@ -112,6 +112,8 @@ pub mod transaction_context;
 pub mod transport;
 pub mod wasm;
 
+#[deprecated(since = "2.1.0", note = "Use `solana-sanitize` crate instead")]
+pub use solana_sanitize as sanitize;
 /// Same as `declare_id` except report that this id has been deprecated.
 pub use solana_sdk_macro::declare_deprecated_id;
 /// Convenience macro to declare a static public key and functions to interact with it.

+ 2 - 2
sdk/src/offchain_message.rs

@@ -6,10 +6,10 @@ use {
     crate::{
         hash::Hash,
         pubkey::Pubkey,
-        sanitize::SanitizeError,
         signature::{Signature, Signer},
     },
     num_enum::{IntoPrimitive, TryFromPrimitive},
+    solana_sanitize::SanitizeError,
 };
 
 #[cfg(test)]
@@ -49,8 +49,8 @@ pub mod v0 {
         crate::{
             hash::{Hash, Hasher},
             packet::PACKET_DATA_SIZE,
-            sanitize::SanitizeError,
         },
+        solana_sanitize::SanitizeError,
     };
 
     /// OffchainMessage Version 0.

+ 1 - 1
sdk/src/signature.rs

@@ -25,7 +25,7 @@ const MAX_BASE58_SIGNATURE_LEN: usize = 88;
 #[derive(Serialize, Deserialize, Clone, Copy, Default, Eq, PartialEq, Ord, PartialOrd, Hash)]
 pub struct Signature(GenericArray<u8, U64>);
 
-impl crate::sanitize::Sanitize for Signature {}
+impl solana_sanitize::Sanitize for Signature {}
 
 impl Signature {
     #[deprecated(

+ 1 - 1
sdk/src/transaction/error.rs

@@ -2,9 +2,9 @@ use {
     crate::{
         instruction::InstructionError,
         message::{AddressLoaderError, SanitizeMessageError},
-        sanitize::SanitizeError,
     },
     serde::Serialize,
+    solana_sanitize::SanitizeError,
     thiserror::Error,
 };
 

+ 1 - 1
sdk/src/transaction/mod.rs

@@ -122,13 +122,13 @@ use {
         precompiles::verify_if_precompile,
         program_utils::limited_deserialize,
         pubkey::Pubkey,
-        sanitize::{Sanitize, SanitizeError},
         short_vec,
         signature::{Signature, SignerError},
         signers::Signers,
     },
     serde::Serialize,
     solana_program::{system_instruction::SystemInstruction, system_program},
+    solana_sanitize::{Sanitize, SanitizeError},
     solana_sdk::feature_set,
     std::result,
 };

+ 1 - 1
sdk/src/transaction/sanitized.rs

@@ -13,13 +13,13 @@ use {
         precompiles::verify_if_precompile,
         pubkey::Pubkey,
         reserved_account_keys::ReservedAccountKeys,
-        sanitize::Sanitize,
         signature::Signature,
         simple_vote_transaction_checker::is_simple_vote_transaction,
         solana_sdk::feature_set,
         transaction::{Result, Transaction, TransactionError, VersionedTransaction},
     },
     solana_program::message::SanitizedVersionedMessage,
+    solana_sanitize::Sanitize,
     std::collections::HashSet,
 };
 

+ 1 - 1
sdk/src/transaction/versioned/mod.rs

@@ -6,7 +6,6 @@ use {
     crate::{
         hash::Hash,
         message::VersionedMessage,
-        sanitize::SanitizeError,
         short_vec,
         signature::Signature,
         signer::SignerError,
@@ -14,6 +13,7 @@ use {
         transaction::{Result, Transaction, TransactionError},
     },
     serde::Serialize,
+    solana_sanitize::SanitizeError,
     std::cmp::Ordering,
 };
 

+ 2 - 3
sdk/src/transaction/versioned/sanitized.rs

@@ -1,7 +1,6 @@
 use {
-    super::VersionedTransaction,
-    crate::{sanitize::SanitizeError, signature::Signature},
-    solana_program::message::SanitizedVersionedMessage,
+    super::VersionedTransaction, crate::signature::Signature,
+    solana_program::message::SanitizedVersionedMessage, solana_sanitize::SanitizeError,
 };
 
 /// Wraps a sanitized `VersionedTransaction` to provide a safe API

+ 1 - 0
version/Cargo.toml

@@ -16,6 +16,7 @@ serde = { workspace = true }
 serde_derive = { workspace = true }
 solana-frozen-abi = { workspace = true, optional = true }
 solana-frozen-abi-macro = { workspace = true, optional = true }
+solana-sanitize = { workspace = true }
 solana-sdk = { workspace = true }
 
 [features]

+ 1 - 1
version/src/legacy.rs

@@ -1,7 +1,7 @@
 use {
     crate::compute_commit,
     serde_derive::{Deserialize, Serialize},
-    solana_sdk::sanitize::Sanitize,
+    solana_sanitize::Sanitize,
     std::{convert::TryInto, fmt},
 };
 

+ 2 - 1
version/src/lib.rs

@@ -4,7 +4,8 @@ extern crate serde_derive;
 pub use self::legacy::{LegacyVersion1, LegacyVersion2};
 use {
     serde_derive::{Deserialize, Serialize},
-    solana_sdk::{sanitize::Sanitize, serde_varint},
+    solana_sanitize::Sanitize,
+    solana_sdk::serde_varint,
     std::{convert::TryInto, fmt},
 };
 #[cfg_attr(feature = "frozen-abi", macro_use)]