zcash_client_sqlite: Do not request transparent UA components if "transparent-inputs" feature is disabled.

This commit is contained in:
Kris Nuttycombe 2024-02-07 13:51:48 -07:00
parent 45df8b7853
commit 7c0b9da9b7
4 changed files with 35 additions and 12 deletions

View File

@ -107,8 +107,13 @@ pub(crate) const VERIFY_LOOKAHEAD: u32 = 10;
pub(crate) const SAPLING_TABLES_PREFIX: &str = "sapling";
pub const DEFAULT_UA_REQUEST: UnifiedAddressRequest =
UnifiedAddressRequest::unsafe_new(false, true, true);
#[cfg(not(feature = "transparent-inputs"))]
pub(crate) const UA_TRANSPARENT: bool = false;
#[cfg(feature = "transparent-inputs")]
pub(crate) const UA_TRANSPARENT: bool = true;
pub(crate) const DEFAULT_UA_REQUEST: UnifiedAddressRequest =
UnifiedAddressRequest::unsafe_new(false, true, UA_TRANSPARENT);
/// A newtype wrapper for received note identifiers.
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]

View File

@ -398,6 +398,8 @@ mod tests {
use zcash_client_backend::keys::UnifiedAddressRequest;
use zcash_primitives::transaction::components::amount::NonNegativeAmount;
use crate::UA_TRANSPARENT;
let network = Network::TestNetwork;
let data_file = NamedTempFile::new().unwrap();
let mut db_data = WalletDb::for_path(data_file.path(), network).unwrap();
@ -438,7 +440,11 @@ mod tests {
let usk = UnifiedSpendingKey::from_seed(&network, &[0u8; 32][..], AccountId::ZERO).unwrap();
let ufvk = usk.to_unified_full_viewing_key();
let (ua, _) = ufvk.default_address(UnifiedAddressRequest::unsafe_new(false, true, true));
let (ua, _) = ufvk.default_address(UnifiedAddressRequest::unsafe_new(
false,
true,
UA_TRANSPARENT,
));
let taddr = ufvk
.transparent()
.and_then(|k| {

View File

@ -8,7 +8,10 @@ use zcash_client_backend::{address::Address, keys::UnifiedFullViewingKey};
use zcash_keys::keys::UnifiedAddressRequest;
use zcash_primitives::{consensus, zip32::AccountId};
use crate::wallet::{init::WalletMigrationError, insert_address};
use crate::{
wallet::{init::WalletMigrationError, insert_address},
UA_TRANSPARENT,
};
#[cfg(feature = "transparent-inputs")]
use zcash_primitives::legacy::keys::IncomingViewingKey;
@ -85,8 +88,11 @@ impl<P: consensus::Parameters> RusqliteMigration for Migration<P> {
"Address in accounts table was not a Unified Address.".to_string(),
));
};
let (expected_address, idx) =
ufvk.default_address(UnifiedAddressRequest::unsafe_new(false, true, true));
let (expected_address, idx) = ufvk.default_address(UnifiedAddressRequest::unsafe_new(
false,
true,
UA_TRANSPARENT,
));
if decoded_address != expected_address {
return Err(WalletMigrationError::CorruptedData(format!(
"Decoded UA {} does not match the UFVK's default address {} at {:?}.",
@ -156,8 +162,11 @@ impl<P: consensus::Parameters> RusqliteMigration for Migration<P> {
],
)?;
let (address, d_idx) =
ufvk.default_address(UnifiedAddressRequest::unsafe_new(false, true, true));
let (address, d_idx) = ufvk.default_address(UnifiedAddressRequest::unsafe_new(
false,
true,
UA_TRANSPARENT,
));
insert_address(transaction, &self.params, account, d_idx, &address)?;
}

View File

@ -19,9 +19,12 @@ use zcash_primitives::legacy::keys::IncomingViewingKey;
#[cfg(feature = "transparent-inputs")]
use zcash_client_backend::encoding::AddressCodec;
use crate::wallet::{
init::{migrations::initial_setup, WalletMigrationError},
pool_code,
use crate::{
wallet::{
init::{migrations::initial_setup, WalletMigrationError},
pool_code,
},
UA_TRANSPARENT,
};
pub(super) const MIGRATION_ID: Uuid = Uuid::from_u128(0xbe57ef3b_388e_42ea_97e2_678dafcf9754);
@ -65,7 +68,7 @@ impl<P: consensus::Parameters> RusqliteMigration for Migration<P> {
let mut stmt_fetch_accounts =
transaction.prepare("SELECT account, address FROM accounts")?;
let ua_request = UnifiedAddressRequest::new(false, true, true)
let ua_request = UnifiedAddressRequest::new(false, true, UA_TRANSPARENT)
.expect("A shielded receiver type is requested.");
let mut rows = stmt_fetch_accounts.query([])?;
while let Some(row) = rows.next()? {