diff --git a/Cargo.lock b/Cargo.lock index 55f64d1..9426599 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -348,6 +348,15 @@ dependencies = [ "five8_core", ] +[[package]] +name = "five8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f76610e969fa1784327ded240f1e28a3fd9520c9cec93b636fcf62dd37f772" +dependencies = [ + "five8_core", +] + [[package]] name = "five8_const" version = "0.1.3" @@ -357,6 +366,15 @@ dependencies = [ "five8_core", ] +[[package]] +name = "five8_const" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a0f1728185f277989ca573a402716ae0beaaea3f76a8ff87ef9dd8fb19436c5" +dependencies = [ + "five8_core", +] + [[package]] name = "five8_core" version = "0.1.1" @@ -1073,8 +1091,8 @@ dependencies = [ "bytemuck", "bytemuck_derive", "curve25519-dalek", - "five8", - "five8_const", + "five8 0.2.1", + "five8_const 0.1.3", "rand 0.8.5", "solana-atomic-u64", "solana-define-syscall 3.0.0", @@ -1083,6 +1101,21 @@ dependencies = [ "solana-sha256-hasher", ] +[[package]] +name = "solana-address" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c5d02824391b072dc5cd0aaa85fb0af9784a21d23286a767994d1e8a322131" +dependencies = [ + "borsh", + "bytemuck", + "bytemuck_derive", + "five8 1.0.0", + "five8_const 1.0.0", + "solana-program-error", + "wincode", +] + [[package]] name = "solana-atomic-u64" version = "3.0.0" @@ -1189,7 +1222,7 @@ checksum = "8a063723b9e84c14d8c0d2cdf0268207dc7adecf546e31251f9e07c7b00b566c" dependencies = [ "bytemuck", "bytemuck_derive", - "five8", + "five8 0.2.1", "solana-atomic-u64", "solana-sanitize", ] @@ -1306,7 +1339,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8909d399deb0851aa524420beeb5646b115fd253ef446e35fe4504c904da3941" dependencies = [ "rand 0.8.5", - "solana-address", + "solana-address 1.0.0", ] [[package]] @@ -1395,7 +1428,7 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19bb713a132fe904caa1f86c331d32846048ae517a3ebf52b068ed07a33070db" dependencies = [ - "five8", + "five8 0.2.1", "solana-sanitize", ] @@ -1639,9 +1672,9 @@ dependencies = [ "num_enum", "serde", "serde_json", + "solana-address 2.2.0", "solana-program-error", "solana-program-option", - "solana-pubkey", "solana-zk-sdk", "spl-pod 0.7.2", "test-case", diff --git a/pod/Cargo.toml b/pod/Cargo.toml index cdf0c7e..8e6ed38 100644 --- a/pod/Cargo.toml +++ b/pod/Cargo.toml @@ -8,8 +8,8 @@ license = "Apache-2.0" edition = "2021" [features] -serde-traits = ["dep:serde"] -borsh = ["dep:borsh", "solana-pubkey/borsh"] +serde-traits = ["dep:serde", "solana-address/decode"] +borsh = ["dep:borsh", "solana-address/borsh"] wincode = ["dep:wincode"] [dependencies] @@ -20,16 +20,17 @@ num-derive = "0.4" num_enum = "0.7" num-traits = "0.2" serde = { version = "1.0.228", optional = true } -wincode = { version = "0.4.4", features = ["derive"], optional = true } +solana-address = { version = "2.2.0", features = ["bytemuck"] } solana-program-error = "3.0.0" solana-program-option = "3.0.0" -solana-pubkey = "3.0.0" solana-zk-sdk = "4.0.0" thiserror = "2.0" +wincode = { version = "0.4.4", features = ["derive"], optional = true } [dev-dependencies] base64 = { version = "0.22.1" } serde_json = "1.0.145" +solana-address = { version = "2.2.0", features = ["decode"] } spl-pod = { path = ".", features = ["wincode"] } test-case = "3.3.1" diff --git a/pod/src/lib.rs b/pod/src/lib.rs index b9a26da..2eea1a5 100644 --- a/pod/src/lib.rs +++ b/pod/src/lib.rs @@ -11,4 +11,4 @@ pub mod slice; // Export current sdk types for downstream users building with a different sdk // version -pub use {solana_program_error, solana_program_option, solana_pubkey}; +pub use {solana_address, solana_program_error, solana_program_option}; diff --git a/pod/src/option.rs b/pod/src/option.rs index 02d7edd..c3138d3 100644 --- a/pod/src/option.rs +++ b/pod/src/option.rs @@ -8,9 +8,9 @@ use { bytemuck::{Pod, Zeroable}, + solana_address::{Address, ADDRESS_BYTES}, solana_program_error::ProgramError, solana_program_option::COption, - solana_pubkey::{Pubkey, PUBKEY_BYTES}, }; /// Trait for types that can be `None`. @@ -121,34 +121,34 @@ impl TryFrom> for PodOption { } } -/// Implementation of `Nullable` for `Pubkey`. -impl Nullable for Pubkey { - const NONE: Self = Pubkey::new_from_array([0u8; PUBKEY_BYTES]); +/// Implementation of `Nullable` for `Address`. +impl Nullable for Address { + const NONE: Self = Address::new_from_array([0u8; ADDRESS_BYTES]); } #[cfg(test)] mod tests { use {super::*, crate::bytemuck::pod_slice_from_bytes}; - const ID: Pubkey = Pubkey::from_str_const("TestSysvar111111111111111111111111111111111"); + const ID: Address = Address::from_str_const("TestSysvar111111111111111111111111111111111"); #[test] - fn test_pod_option_pubkey() { - let some_pubkey = PodOption::from(ID); - assert_eq!(some_pubkey.get(), Some(ID)); + fn test_pod_option_address() { + let some_address = PodOption::from(ID); + assert_eq!(some_address.get(), Some(ID)); - let none_pubkey = PodOption::from(Pubkey::default()); - assert_eq!(none_pubkey.get(), None); + let none_address = PodOption::from(Address::default()); + assert_eq!(none_address.get(), None); let mut data = Vec::with_capacity(64); data.extend_from_slice(ID.as_ref()); data.extend_from_slice(&[0u8; 32]); - let values = pod_slice_from_bytes::>(&data).unwrap(); + let values = pod_slice_from_bytes::>(&data).unwrap(); assert_eq!(values[0], PodOption::from(ID)); - assert_eq!(values[1], PodOption::from(Pubkey::default())); + assert_eq!(values[1], PodOption::from(Address::default())); let option_pubkey = Some(ID); - let pod_option_pubkey: PodOption = option_pubkey.try_into().unwrap(); + let pod_option_pubkey: PodOption
= option_pubkey.try_into().unwrap(); assert_eq!(pod_option_pubkey, PodOption::from(ID)); assert_eq!( pod_option_pubkey, @@ -156,7 +156,7 @@ mod tests { ); let coption_pubkey = COption::Some(ID); - let pod_option_pubkey: PodOption = coption_pubkey.try_into().unwrap(); + let pod_option_pubkey: PodOption
= coption_pubkey.try_into().unwrap(); assert_eq!(pod_option_pubkey, PodOption::from(ID)); assert_eq!( pod_option_pubkey, @@ -172,17 +172,17 @@ mod tests { let none_pubkey = None; assert_eq!( PodOption::try_from(none_pubkey).unwrap(), - PodOption::from(Pubkey::NONE) + PodOption::from(Address::NONE) ); - let invalid_option = Some(Pubkey::NONE); + let invalid_option = Some(Address::NONE); let err = PodOption::try_from(invalid_option).unwrap_err(); assert_eq!(err, ProgramError::InvalidArgument); } #[test] fn test_default() { - let def = PodOption::::default(); + let def = PodOption::
::default(); assert_eq!(def, None.try_into().unwrap()); } } diff --git a/pod/src/optional_keys.rs b/pod/src/optional_keys.rs index 28f6bed..4b80474 100644 --- a/pod/src/optional_keys.rs +++ b/pod/src/optional_keys.rs @@ -1,11 +1,11 @@ -//! Optional pubkeys that can be used a `Pod`s +//! Optional addresses that can be used a `Pod`s #[cfg(feature = "borsh")] use borsh::{BorshDeserialize, BorshSchema, BorshSerialize}; use { bytemuck_derive::{Pod, Zeroable}, + solana_address::Address, solana_program_error::ProgramError, solana_program_option::COption, - solana_pubkey::Pubkey, solana_zk_sdk::encryption::pod::elgamal::PodElGamalPubkey, }; #[cfg(feature = "serde-traits")] @@ -23,14 +23,14 @@ use { )] #[derive(Clone, Copy, Debug, Default, PartialEq, Pod, Zeroable)] #[repr(transparent)] -pub struct OptionalNonZeroPubkey(pub Pubkey); -impl TryFrom> for OptionalNonZeroPubkey { +pub struct OptionalNonZeroPubkey(pub Address); +impl TryFrom> for OptionalNonZeroPubkey { type Error = ProgramError; - fn try_from(p: Option) -> Result { + fn try_from(p: Option
) -> Result { match p { - None => Ok(Self(Pubkey::default())), + None => Ok(Self(Address::default())), Some(pubkey) => { - if pubkey == Pubkey::default() { + if pubkey == Address::default() { Err(ProgramError::InvalidArgument) } else { Ok(Self(pubkey)) @@ -39,13 +39,13 @@ impl TryFrom> for OptionalNonZeroPubkey { } } } -impl TryFrom> for OptionalNonZeroPubkey { +impl TryFrom> for OptionalNonZeroPubkey { type Error = ProgramError; - fn try_from(p: COption) -> Result { + fn try_from(p: COption
) -> Result { match p { - COption::None => Ok(Self(Pubkey::default())), + COption::None => Ok(Self(Address::default())), COption::Some(pubkey) => { - if pubkey == Pubkey::default() { + if pubkey == Address::default() { Err(ProgramError::InvalidArgument) } else { Ok(Self(pubkey)) @@ -54,18 +54,18 @@ impl TryFrom> for OptionalNonZeroPubkey { } } } -impl From for Option { +impl From for Option
{ fn from(p: OptionalNonZeroPubkey) -> Self { - if p.0 == Pubkey::default() { + if p.0 == Address::default() { None } else { Some(p.0) } } } -impl From for COption { +impl From for COption
{ fn from(p: OptionalNonZeroPubkey) -> Self { - if p.0 == Pubkey::default() { + if p.0 == Address::default() { COption::None } else { COption::Some(p.0) @@ -79,7 +79,7 @@ impl Serialize for OptionalNonZeroPubkey { where S: Serializer, { - if self.0 == Pubkey::default() { + if self.0 == Address::default() { s.serialize_none() } else { s.serialize_some(&self.0.to_string()) @@ -103,7 +103,7 @@ impl Visitor<'_> for OptionalNonZeroPubkeyVisitor { where E: Error, { - let pkey = Pubkey::from_str(v) + let pkey = Address::from_str(v) .map_err(|_| Error::invalid_value(Unexpected::Str(v), &"value string"))?; OptionalNonZeroPubkey::try_from(Some(pkey)) @@ -222,21 +222,21 @@ mod tests { super::*, crate::bytemuck::pod_from_bytes, base64::{prelude::BASE64_STANDARD, Engine}, - solana_pubkey::PUBKEY_BYTES, + solana_address::ADDRESS_BYTES, }; #[test] fn test_pod_non_zero_option() { assert_eq!( - Some(Pubkey::new_from_array([1; PUBKEY_BYTES])), - Option::::from( - *pod_from_bytes::(&[1; PUBKEY_BYTES]).unwrap() + Some(Address::new_from_array([1; ADDRESS_BYTES])), + Option::
::from( + *pod_from_bytes::(&[1; ADDRESS_BYTES]).unwrap() ) ); assert_eq!( None, - Option::::from( - *pod_from_bytes::(&[0; PUBKEY_BYTES]).unwrap() + Option::
::from( + *pod_from_bytes::(&[0; ADDRESS_BYTES]).unwrap() ) ); assert_eq!( @@ -257,7 +257,7 @@ mod tests { #[test] fn test_pod_non_zero_option_serde_some() { let optional_non_zero_pubkey_some = - OptionalNonZeroPubkey(Pubkey::new_from_array([1; PUBKEY_BYTES])); + OptionalNonZeroPubkey(Address::new_from_array([1; ADDRESS_BYTES])); let serialized_some = serde_json::to_string(&optional_non_zero_pubkey_some).unwrap(); assert_eq!( &serialized_some, @@ -273,7 +273,7 @@ mod tests { #[test] fn test_pod_non_zero_option_serde_none() { let optional_non_zero_pubkey_none = - OptionalNonZeroPubkey(Pubkey::new_from_array([0; PUBKEY_BYTES])); + OptionalNonZeroPubkey(Address::new_from_array([0; ADDRESS_BYTES])); let serialized_none = serde_json::to_string(&optional_non_zero_pubkey_none).unwrap(); assert_eq!(&serialized_none, "null");