From d255a29d8478b221b34dba92a32f53f55b280e08 Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Tue, 4 Mar 2025 18:41:39 -0700 Subject: [PATCH] zcash_client_sqlite: Skip gap address generation if no transparent key is available. --- zcash_client_sqlite/src/wallet/transparent.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/zcash_client_sqlite/src/wallet/transparent.rs b/zcash_client_sqlite/src/wallet/transparent.rs index 06d534ef0..c4beffb8c 100644 --- a/zcash_client_sqlite/src/wallet/transparent.rs +++ b/zcash_client_sqlite/src/wallet/transparent.rs @@ -418,6 +418,10 @@ pub(crate) fn generate_gap_addresses( let account = get_account_internal(conn, params, account_id)? .ok_or_else(|| SqliteClientError::AccountUnknown)?; + if !account.uivk().has_transparent() { + return Ok(()); + } + let gen_addrs = |key_scope: KeyScope, index: NonHardenedChildIndex| { Ok::<_, SqliteClientError>(match key_scope { KeyScope::Zip32(zip32::Scope::External) => { @@ -426,7 +430,7 @@ pub(crate) fn generate_gap_addresses( .uivk() .transparent() .as_ref() - .ok_or(AddressGenerationError::KeyNotAvailable(Typecode::P2pkh))? + .expect("presence of transparent key was checked above.") .derive_address(index)?; ( ua.map_or_else( @@ -448,7 +452,7 @@ pub(crate) fn generate_gap_addresses( let internal_address = account .ufvk() .and_then(|k| k.transparent()) - .ok_or(AddressGenerationError::KeyNotAvailable(Typecode::P2pkh))? + .expect("presence of transparent key was checked above.") .derive_internal_ivk()? .derive_address(index)?; ( @@ -460,7 +464,7 @@ pub(crate) fn generate_gap_addresses( let ephemeral_address = account .ufvk() .and_then(|k| k.transparent()) - .ok_or(AddressGenerationError::KeyNotAvailable(Typecode::P2pkh))? + .expect("presence of transparent key was checked above.") .derive_ephemeral_ivk()? .derive_ephemeral_address(index)?; (