Home

Awesome

<div align="center"> <img src="media/logo.png" width="125" height="125"> <h1>HD Wallet Scanner</h1> <p> <b>Find all used addresses in your Bitcoin HD Wallets bypassing gap limits</b> </p> <br> </div>

HD Wallet Scanner is a utility for resolving an Account Discovery issue when a HD Wallet has more than X (usually 20) unused addresses in a row and a wallet software stops seeing addresses beyond this point.

The utility was made to supplement One-Time Address. However it will also be helpful if you encounter the gap limit issue in other circumstances.

How it works

  1. You set an extended public key, a range for address indexes and a starting block for each of your HD Wallets
  2. HD Wallet Scanner scans blocks and generates report files with address indexes and input stats in output directory
  3. You use Bitcoin Core + HWI (if you use a hardware wallet) to import child keys derived with the address indexes and then spend unspent outputs

Prerequisites

To run the application, you will need a synced Bitcoin full node with RPC enabled.

Installing

# clone repo
git clone https://github.com/alexk111/HD-Wallet-Scanner

# navigate to it
cd HD-Wallet-Scanner

# install dependencies
yarn install

# add env variables
cp .env.sample .env

# add wallets config
cp wallets.js.sample wallets.js

Edit .env:

Edit wallets.js:

Scanning

# running the scanner
yarn start

Using Address Indexes

After the scan completes, you will get two files in output directory: IDS ids{i}-{j} hgt{m}-{n}.json and INS ids{i}-{j} hgt{m}-{n}.json. The IDS ... file only contains the address indexes, whereas the INS ... file also contains an address, value of a transaction input and a height of a block the transaction is recorded in.

To derive child keys with the collected address indexes and import them into Bitcoin Core wallet use HWI if your private keys are stored on a hardware wallet and bitcoin-cli's importmulti. For more info on how to use Bitcoin Core with HWI check this guide.

Note. If you have huge gaps between used addresses, then call importmulti with keypool range parameter equal to n,n where n is an address index, to add only that specific address.

Backers 💝

[Become a backer]

Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer

License

MIT © Alex Kaul