This is part of the bitceptron product suite. A gui app to scan the utxo set for bitcoins locked in scripts built by custom derivation paths.
THIS IS A PROOF-OF-CONCEPTish THING. NOT PRODUCTION READY YET.
Various wallets using different BIP32 derivation paths can be a problem for bitcoiners. In some cases, this might lead to confusion or a perception of loss of bitcoins, when incompatible wallets are used for receiving bitcoins and retrieving them in a later time. Bitceptron retriever is to alleviate that problem to some extent.
Bitceptron retriever uses the txout dump of bitcoincore to scan the utxo set for various descriptors derivable from your mnemonic and passphrase. We use miniscript to create the following single key descriptors:
- P2PK.
- P2PKH.
- P2SHWPKH.
- P2WPKH.
- P2TR (Single key path spending without a script tree).
To use the bitceptron-retriever-gui, you must follow these steps:
- Make sure you have a bitcoind instance running with an rpc port open to requests.
- Build the
bitceptron-retriever-gui
from source (cargo build --release
) or download pertinent executable. - Run
RUST_LOG=trace ./bitceptron-retriever-gui
from where you put your release build, which defaults totarget/release
or runRUST_LOG=trace cargo run --release
from the root of the repository. - Following screen opens up:
- Enter bitcoincore rpc data. If all inputs are valid, those lights turn green and the
Fix Setting
button activates: - Enter exploration settings.
- About base derivation paths: This is a vector of base derivation paths. These are the fixed parts of the derivation path, after which the exploration starts. These base paths should comply with these formatting rules:
-
Must start with "m"
-
Each child should be separated by a "/"
-
Children may be normal or hardened. Normal children are just numbers and hardened children are numbers followed by either of "h" or " ' " characters.
Some valid examples:
- "m/84'/0/0"
- "m/40/0h/0h"
- "m/0/1/2'/4h/8"
If use presets is selected, it will use the built-in list of all known base paths for bitcoin wallets which is based on the data provided by https://walletsrecovery.org
8.About exploration path: This is the exploration path in which the program searches. Exploration path consists of steps separated by a "/". Step semantics are as follows:
- For any A, a member of u32: A means the specific child number A of the parent.
- For any A and B, members of u32 with A <= B: A..B means all children number A (inclusive) to number B (inclusive) of the parent.
- For and A, a member of u32: ..A means all the children from number 0 (inclusive) to number B (inclusive) of the parents.
- " * " means all children from (inclusive) 0 to exploration_depth (inclusive).
- suffixes " ' " and " h " mean all hardened children. Not using these suffixes makes all children in that step normal.
- Suffix " a " means exploring both hardened and normal children at that step.
Some valid examples(lose the spaces):
- " ..100' / 50..75a / * / *"
- " 42a / 83..120a / 68h / *a / 54h"
- " *' / *h / *a "
- Choose descriptors you want to be included in search and enter path of a temp directory of your choosing. Dump file will be created or searched for in this directory.
![Screenshot 1403-03-10 at 12 05 41](https://private-user-images.githubusercontent.com/139527025/335106593-c04ef3ce-615c-4202-9ff9-ee27c4c39e59.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NDk2NDgsIm5iZiI6MTczOTU0OTM0OCwicGF0aCI6Ii8xMzk1MjcwMjUvMzM1MTA2NTkzLWMwNGVmM2NlLTYxNWMtNDIwMi05ZmY5LWVlMjdjNGMzOWU1OS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNFQxNjA5MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iNDQyM2I0MWQ0NDc5NTMyMjM5NjM1OGJjOTA5ZThlZjJhZDA1MDcxYTk4ZGE5OTkwMzBlYjNmMWE0NTBmYzQwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.AdMSTAuB45dXSIMLKCA_JZNZdq6L8rzA7ferUII-L6c)
![Screenshot 1403-03-10 at 12 06 41](https://private-user-images.githubusercontent.com/139527025/335106908-76815de4-51ed-4fb9-96fc-6a21035d6a90.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NDk2NDgsIm5iZiI6MTczOTU0OTM0OCwicGF0aCI6Ii8xMzk1MjcwMjUvMzM1MTA2OTA4LTc2ODE1ZGU0LTUxZWQtNGZiOS05NmZjLTZhMjEwMzVkNmE5MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNFQxNjA5MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04N2U1YmYxMzZjNWM3MmY1MjgyY2ZmNjQ3MjVkMzEzNzhkMzlkY2U5ZTk1YTI0NmM0Yzk4ZGU1MGQ2OTljYjY4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ifL-0uxwAxkUvq7yJUSDNLvU9BqAzoV1iZWLGnNjKzg)
![Screenshot 1403-03-10 at 12 14 16](https://private-user-images.githubusercontent.com/139527025/335109923-f4cedc59-0bbe-46dd-afe0-cc33de0f63e1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NDk2NDgsIm5iZiI6MTczOTU0OTM0OCwicGF0aCI6Ii8xMzk1MjcwMjUvMzM1MTA5OTIzLWY0Y2VkYzU5LTBiYmUtNDZkZC1hZmUwLWNjMzNkZTBmNjNlMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNFQxNjA5MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lNmIwYzAyMGFiYjI4MzlhOWFiZTllMmZhNjNjZjYzZWQ4MDUxOTAzYTU3YTUxYTRhYWZiMjI0Y2ExZWVkNjEyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.gp9KIWHxEM_C28T6cGdy2Lgq5c37SBSwUH-IeLAvFi4)
![Screenshot 1403-03-10 at 12 16 37](https://private-user-images.githubusercontent.com/139527025/335110835-95aa47af-d835-42e4-a4b8-1ff2551b7e11.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NDk2NDgsIm5iZiI6MTczOTU0OTM0OCwicGF0aCI6Ii8xMzk1MjcwMjUvMzM1MTEwODM1LTk1YWE0N2FmLWQ4MzUtNDJlNC1hNGI4LTFmZjI1NTFiN2UxMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNFQxNjA5MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04NGVkYjUwYjM1MjYxY2M4NTZhNmE5Mzc5M2ZlMzQwN2QyMTkwMmU1MjRjM2ViMGRlYzIyZDViODhlMjA5NjIwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.vtvOtKg_Kp9vlc8Y-aXwBh55-khwlDGDl2EXlgXeFzM)
![Screenshot 1403-03-10 at 12 19 17](https://private-user-images.githubusercontent.com/139527025/335111354-756d4502-10ac-4c77-93e2-5cc3620988b7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NDk2NDgsIm5iZiI6MTczOTU0OTM0OCwicGF0aCI6Ii8xMzk1MjcwMjUvMzM1MTExMzU0LTc1NmQ0NTAyLTEwYWMtNGM3Ny05M2UyLTVjYzM2MjA5ODhiNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNFQxNjA5MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05NGYwM2EyZDJiZDg4ZTUwZGFhMDUxZDc3MDE2YWY4ODNkMjc2NTg0OGM2ZWU3ODk4MzUyYWUzOGFkMDE2NjFlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.knYmiEpYI565fwdNfy6q5hTh0v2hROQ0-n3h7bMsSGs)
![Screenshot 1403-03-10 at 12 22 31](https://private-user-images.githubusercontent.com/139527025/335112131-53b00769-cf21-47ad-b5be-09d63406923a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NDk2NDgsIm5iZiI6MTczOTU0OTM0OCwicGF0aCI6Ii8xMzk1MjcwMjUvMzM1MTEyMTMxLTUzYjAwNzY5LWNmMjEtNDdhZC1iNWJlLTA5ZDYzNDA2OTIzYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNFQxNjA5MDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yMWY2MmNmMGZhOGYwNzIxMDM4YzVkYTUwYTM3NjZiMThmYmY3M2ZmYzhlNWFhZmQwOGUwYjRkZmZhOTI0YmQwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9._RwM0FwQmYsulRMfCki2rGiF4sB8VNdngNP6rbNISqw)
This is a POC thing as of now. Can be improved in error handeling, logging and architecture fields.
Happy rusting plebs.