From 73e7c4ff226288b52ebb7664856f84cb029dcfa6 Mon Sep 17 00:00:00 2001 From: Oscar Pepper Date: Sat, 13 Jun 2026 09:38:29 +0100 Subject: [PATCH 1/2] return error when all transparent address indexes are in use --- pepper-sync/src/sync/transparent.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pepper-sync/src/sync/transparent.rs b/pepper-sync/src/sync/transparent.rs index d69dee321..a98aeb4b5 100644 --- a/pepper-sync/src/sync/transparent.rs +++ b/pepper-sync/src/sync/transparent.rs @@ -109,20 +109,18 @@ pub(crate) async fn update_addresses_and_scan_targets( .filter(|id| id.account_id() == *account_id && id.scope() == *scope) .next_back() { - id.address_index().index() + 1 + id.address_index().next() } else { - 0 - }; + Some(NonHardenedChildIndex::ZERO) + } + .ok_or_else(|| { + SyncError::TransparentAddressDerivationError(bip32::Error::ChildNumber) + })?; let mut unused_address_count: usize = 0; let mut addresses: Vec<(TransparentAddressId, String)> = Vec::new(); while unused_address_count < config.gap_limit as usize { - let address_id = TransparentAddressId::new( - *account_id, - *scope, - NonHardenedChildIndex::from_index(address_index) - .expect("all non-hardened addresses in use!"), - ); + let address_id = TransparentAddressId::new(*account_id, *scope, address_index); let address = keys::transparent::derive_address( consensus_parameters, account_pubkey, @@ -152,7 +150,9 @@ pub(crate) async fn update_addresses_and_scan_targets( unused_address_count = 0; } - address_index += 1; + address_index.next().ok_or_else(|| { + SyncError::TransparentAddressDerivationError(bip32::Error::ChildNumber) + })?; } addresses.truncate(addresses.len() - config.gap_limit as usize); From c22b4725544a2c7ff8073e64b8e00a0850fc293f Mon Sep 17 00:00:00 2001 From: Oscar Pepper Date: Sat, 13 Jun 2026 09:49:46 +0100 Subject: [PATCH 2/2] correctly update address index --- pepper-sync/src/sync/transparent.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pepper-sync/src/sync/transparent.rs b/pepper-sync/src/sync/transparent.rs index a98aeb4b5..630595af2 100644 --- a/pepper-sync/src/sync/transparent.rs +++ b/pepper-sync/src/sync/transparent.rs @@ -150,7 +150,7 @@ pub(crate) async fn update_addresses_and_scan_targets( unused_address_count = 0; } - address_index.next().ok_or_else(|| { + address_index = address_index.next().ok_or_else(|| { SyncError::TransparentAddressDerivationError(bip32::Error::ChildNumber) })?; }