Replace the hand-rolled INI parser in read_bitcoin_conf_credentials
with the rust-ini crate (imported as 'ini'). The function shrinks
from ~35 lines to 6 and we stop maintaining INI parsing semantics
in this repo.
Replace the giant inline bootstrap-and-scan bash block with the
setup.sh script that already does the same thing (and is maintained
alongside the regtest harness). The reader sees four short steps —
setup, start API, scan, CLI alternative — instead of 40 lines of
shell to copy-paste correctly.
Replace the inline cat heredoc with a single cp instruction so the
example config stays canonical (the file is already in the repo and
also drives ./scripts/setup.sh).
The Bitcoin Core node is the authority on descriptor validity.
Reimplementing descriptor shape/prefix/checksum checks here creates
a divergence risk with the node's own validator and adds maintenance
surface for no real safety gain. Invalid descriptors now fail at the
node, surfaced through AnalysisError.
- delete api/src/preflight.rs and its module declaration
- drop ValidationError from ApiError (no remaining producers)
- remove the validate() call from the scan handler
- drop the two tests that asserted preflight-specific rejection codes
Replace the inline cookie split with stealth_bitcoincore::read_cookie_file,
which already implements the same parsing with proper error handling.
Removes duplication and keeps the cookie format in one place.
The if-chain and counter pattern is a 5-arm tuple match in disguise.
Pattern match on (descriptor, descriptors, utxos) directly: every
valid case picks exactly one variant, the empty tuple is a clear
missing-input error, and the wildcard catches mutual-exclusion
violations.
Browser-based frontends need CORS to call the API. Apply
tower_http::cors::CorsLayer::permissive() at the router level so
the frontend (and other origins during development) can reach the
scan endpoint.
Trim the scan_wallet comment so it only states the Rust-side behavior: derive every descriptor address, without the extra cross-reference to the Python path.
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.
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.
Track all addresses derived from wallet descriptors in WalletHistory, not only internal/change addresses. This gives TxGraph a complete address set to compare ownership against later.
Removed from crates/stealth-bitcoincore and moved to bitcoincore as a
standalone package. This change is part of the refactor to create
separate packages for each component of the stealth project, allowing
for better modularity and separation of concerns.
- Update config.ini example to show datadir setting
- Fix bitcoin-cli command to include -datadir=bitcoin-data
- Expand project structure tree to show current file layout
setup.sh starts bitcoind with -datadir=bitcoin-data, but bitcoin_rpc.py
was calling bitcoin-cli without it, so it looked in ~/.bitcoin for the
auth cookie and failed with "Incorrect rpcuser or rpcpassword".
Add datadir config to config.ini and resolve it in _build_base_args().
- Update loading screen messages to match actual backend processing steps
- Verified walletService.js, App.jsx, ReportScreen.jsx, FindingCard.jsx
have no dead code or legacy endpoint references