diff --git a/zcash_keys/CHANGELOG.md b/zcash_keys/CHANGELOG.md index d6d5fb8cb..c7eeb4f0f 100644 --- a/zcash_keys/CHANGELOG.md +++ b/zcash_keys/CHANGELOG.md @@ -9,6 +9,11 @@ and this library adheres to Rust's notion of ### Added - `zcash_keys::keys::UnifiedAddressRequest::all` +### Fixed +- A missing application of the `sapling` feature flag was remedied; + prior to this fix it was not possible to use this crate without the + `sapling` feature enabled. + ## [0.1.0] - 2024-03-01 The entries below are relative to the `zcash_client_backend` crate as of `zcash_client_backend 0.10.0`. diff --git a/zcash_keys/Cargo.toml b/zcash_keys/Cargo.toml index dd32f35df..0ba67ad08 100644 --- a/zcash_keys/Cargo.toml +++ b/zcash_keys/Cargo.toml @@ -67,6 +67,7 @@ jubjub.workspace = true proptest.workspace = true rand_core.workspace = true zcash_address = { workspace = true, features = ["test-dependencies"] } +zcash_primitives = { workspace = true, features = ["test-dependencies"] } [features] ## Enables use of transparent key parts and addresses diff --git a/zcash_keys/src/address.rs b/zcash_keys/src/address.rs index 6872e5133..c0990c24b 100644 --- a/zcash_keys/src/address.rs +++ b/zcash_keys/src/address.rs @@ -143,7 +143,11 @@ impl UnifiedAddress { /// Returns whether this address has a Sapling receiver. pub fn has_sapling(&self) -> bool { - self.sapling.is_some() + #[cfg(not(feature = "sapling"))] + return false; + + #[cfg(feature = "sapling")] + return self.sapling.is_some(); } /// Returns the Sapling receiver within this Unified Address, if any. @@ -213,6 +217,7 @@ impl UnifiedAddress { let result = std::iter::empty(); #[cfg(feature = "orchard")] let result = result.chain(self.orchard.map(|_| Typecode::Orchard)); + #[cfg(feature = "sapling")] let result = result.chain(self.sapling.map(|_| Typecode::Sapling)); let result = result.chain(self.transparent.map(|taddr| match taddr { TransparentAddress::PublicKeyHash(_) => Typecode::P2pkh, @@ -353,7 +358,7 @@ mod tests { use zcash_address::test_vectors; use zcash_primitives::consensus::MAIN_NETWORK; - use super::Address; + use super::{Address, UnifiedAddress}; #[cfg(feature = "sapling")] use crate::keys::sapling; @@ -361,9 +366,6 @@ mod tests { #[cfg(any(feature = "orchard", feature = "sapling"))] use zcash_primitives::zip32::AccountId; - #[cfg(any(feature = "orchard", feature = "sapling"))] - use super::UnifiedAddress; - #[test] #[cfg(any(feature = "orchard", feature = "sapling"))] fn ua_round_trip() { diff --git a/zcash_keys/src/keys.rs b/zcash_keys/src/keys.rs index 8454aefc3..3515f4cbf 100644 --- a/zcash_keys/src/keys.rs +++ b/zcash_keys/src/keys.rs @@ -7,16 +7,16 @@ use zcash_primitives::{ use crate::address::UnifiedAddress; -#[cfg(feature = "transparent-inputs")] -use zcash_primitives::legacy::keys::NonHardenedChildIndex; - #[cfg(feature = "transparent-inputs")] use { std::convert::TryInto, - zcash_primitives::legacy::keys::{self as legacy, IncomingViewingKey}, + zcash_primitives::legacy::keys::{self as legacy, IncomingViewingKey, NonHardenedChildIndex}, }; -#[cfg(all(feature = "test-dependencies", feature = "transparent-inputs"))] +#[cfg(all( + feature = "transparent-inputs", + any(test, feature = "test-dependencies") +))] use zcash_primitives::legacy::TransparentAddress; #[cfg(feature = "unstable")] @@ -847,13 +847,15 @@ pub mod testing { #[cfg(test)] mod tests { + use super::UnifiedFullViewingKey; use proptest::prelude::proptest; - use super::UnifiedFullViewingKey; - use zcash_primitives::consensus::MAIN_NETWORK; - - #[cfg(any(feature = "orchard", feature = "sapling"))] - use zip32::AccountId; + #[cfg(any( + feature = "orchard", + feature = "sapling", + feature = "transparent-inputs" + ))] + use {zcash_primitives::consensus::MAIN_NETWORK, zip32::AccountId}; #[cfg(feature = "sapling")] use super::sapling; @@ -940,7 +942,7 @@ mod tests { ); #[cfg(not(any(feature = "orchard", feature = "sapling")))] - assert_eq!(ufvk, None); + assert!(ufvk.is_none()); #[cfg(any(feature = "orchard", feature = "sapling"))] { @@ -1055,6 +1057,7 @@ mod tests { // The test vectors contain some diversifier indices that do not generate // valid Sapling addresses, so skip those. + #[cfg(feature = "sapling")] if ufvk.sapling().unwrap().address(d_idx).is_none() { continue; } @@ -1075,6 +1078,7 @@ mod tests { if tvua.transparent().is_some() { assert_eq!(tvua.transparent(), ua.transparent()); } + #[cfg(feature = "sapling")] if tvua.sapling().is_some() { assert_eq!(tvua.sapling(), ua.sapling()); }