From ea6c90bf4177d323d2bcc285dcbfc691e4436c1b Mon Sep 17 00:00:00 2001 From: Renato Britto Date: Tue, 31 Mar 2026 19:31:48 -0300 Subject: [PATCH] fixup! feat(engine): create engine rust package for detectors and orchestration Seed TxGraph ownership state from all derived addresses, not just addresses discovered from transaction outputs. This makes is_ours() recognize every descriptor-derived address and preserves internal/change tagging separately. --- engine/src/engine.rs | 1 + engine/src/graph.rs | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/engine/src/engine.rs b/engine/src/engine.rs index 3e3cd07..af70cf2 100644 --- a/engine/src/engine.rs +++ b/engine/src/engine.rs @@ -171,6 +171,7 @@ impl<'a, G: BlockchainGateway> AnalysisEngine<'a, G> { utxos: utxo_entries, transactions, internal_addresses: HashSet::new(), + derived_addresses: HashSet::new(), }) } } diff --git a/engine/src/graph.rs b/engine/src/graph.rs index 2400b78..f099529 100644 --- a/engine/src/graph.rs +++ b/engine/src/graph.rs @@ -140,6 +140,18 @@ impl TxGraph { }) .collect(); + // Add ALL derived addresses to `our_addrs` and `addr_map`, matching + // the Python reference (`our_addrs = set(addr_map.keys())` where + // `addr_map` contains every address derived from the descriptors). + for addr in &history.derived_addresses { + our_addrs.insert(addr.clone()); + addr_map.entry(addr.clone()).or_insert_with(|| AddressInfo { + script_type: script_type_from_address(addr), + internal: history.internal_addresses.contains(addr), + index: 0, + }); + } + // Pre-populate caches from decoded transactions. let mut tx_cache = HashMap::new(); let mut input_cache: HashMap> = HashMap::new();