mirror of
https://github.com/LORDBABUINO/stealth.git
synced 2026-06-17 09:29:44 -07:00
fixup! refactor(bitcoincore): convert bitcoincore into gateway adapter
Derive addresses from all wallet descriptors, external and internal, and persist both internal_addresses and derived_addresses on WalletHistory. This aligns the Rust path with the Python reference behavior.
This commit is contained in:
+19
-10
@@ -253,6 +253,7 @@ impl BitcoinCoreRpc {
|
||||
utxos,
|
||||
transactions,
|
||||
internal_addresses: HashSet::new(),
|
||||
derived_addresses: HashSet::new(),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -479,17 +480,19 @@ impl BlockchainGateway for BitcoinCoreRpc {
|
||||
|
||||
let mut history = self.load_history_for_wallet(&wallet_name)?;
|
||||
|
||||
// Derive internal (change) addresses so TxGraph can correctly
|
||||
// mark them as internal in AddressInfo.
|
||||
// Derive all addresses from every descriptor
|
||||
let mut internal_addresses = HashSet::new();
|
||||
let mut derived_addresses = HashSet::new();
|
||||
for desc in descriptors {
|
||||
if desc.internal {
|
||||
if let Ok(addrs) = self.derive_addresses(desc) {
|
||||
internal_addresses.extend(addrs);
|
||||
if let Ok(addrs) = self.derive_addresses(desc) {
|
||||
if desc.internal {
|
||||
internal_addresses.extend(addrs.iter().cloned());
|
||||
}
|
||||
derived_addresses.extend(addrs);
|
||||
}
|
||||
}
|
||||
history.internal_addresses = internal_addresses;
|
||||
history.derived_addresses = derived_addresses;
|
||||
|
||||
Ok(history)
|
||||
}
|
||||
@@ -521,18 +524,24 @@ impl BlockchainGateway for BitcoinCoreRpc {
|
||||
fn scan_wallet(&self, wallet_name: &str) -> Result<WalletHistory, AnalysisError> {
|
||||
let mut history = self.load_history_for_wallet(wallet_name)?;
|
||||
|
||||
// Derive internal (change) addresses so TxGraph can correctly
|
||||
// mark them in AddressInfo, mirroring the scan_descriptors path.
|
||||
// Derive ALL addresses from every descriptor (both external and
|
||||
// internal chains) so that `is_ours()` in TxGraph recognises
|
||||
// every derived address — matching the Python reference which
|
||||
// calls `derive_all_addresses(descriptors)` before building the
|
||||
// TxGraph.
|
||||
if let Ok(descriptors) = self.list_wallet_descriptors(wallet_name) {
|
||||
let mut internal_addresses = HashSet::new();
|
||||
let mut derived_addresses = HashSet::new();
|
||||
for desc in &descriptors {
|
||||
if desc.internal {
|
||||
if let Ok(addrs) = self.derive_addresses(desc) {
|
||||
internal_addresses.extend(addrs);
|
||||
if let Ok(addrs) = self.derive_addresses(desc) {
|
||||
if desc.internal {
|
||||
internal_addresses.extend(addrs.iter().cloned());
|
||||
}
|
||||
derived_addresses.extend(addrs);
|
||||
}
|
||||
}
|
||||
history.internal_addresses = internal_addresses;
|
||||
history.derived_addresses = derived_addresses;
|
||||
}
|
||||
|
||||
Ok(history)
|
||||
|
||||
Reference in New Issue
Block a user