joininbox/scripts/menu.wallet.sh
openoms 16fc83f47d
Some checks are pending
amd64-image-build / amd64-image-build (push) Waiting to run
arm64-rpi-image-build / arm64-rpi-image-build (push) Waiting to run
Test Shellcheck / Run Shellcheck (push) Waiting to run
chore: migrate the watch-only Bitcoin Core wallet to use descriptors (#177)
* chore: update wallet creation to use watch-only-descriptor-wallet

* remove duplicate version check

* fix: update release URL in install script and correct typo in wallet import message

* ci: test amd64 image descriptor wallet migration with Bats

* ci: boot amd64 image tests with OVMF pflash

* fix: gate descriptor wallet migration on Bitcoin Core v30

Detect the connected Bitcoin Core version over RPC before migrating.
Keep wallet.dat for v29.x or when the version cannot be determined.

Add regression coverage for both migration and compatibility paths.

* ci: make amd64 image tests independent of guest apt

Inject a pinned bats-core checkout into the temporary VM instead of
installing Bats through the guest package repositories.

Remove the duplicate pull request trigger and simplify artifact lookup.

* ci: harden image build run

* docs(FAQ): how automatic migration works
2026-08-13 11:57:42 +02:00

204 lines
No EOL
5.9 KiB
Bash
Executable file

#!/bin/bash
# WALLET menu options
source /home/joinmarket/joinin.conf
source /home/joinmarket/_functions.sh
if [ ${RPCoverTor} = "on" ]; then
tor="torsocks"
else
tor=""
fi
checkRPCwallet
# BASIC MENU INFO
HEIGHT=19
WIDTH=53
CHOICE_HEIGHT=13
TITLE="Wallet management options"
BACKTITLE="Wallet management options"
MENU=""
OPTIONS=()
# Basic Options
OPTIONS+=(
DISPLAY "Show the contents of all mixdepths"
LABEL "Add or edit a label to an address"
UTXOS "Show all the coins in the wallet"
HISTORY "Show all past transactions"
XPUBS "Show the master public keys"
PSBT "Sign a Base64 format PSBT"
GEN "Generate a new wallet"
IMPORT "Copy wallet(s) from a remote node"
SHOWSEED "Shows the wallet recovery seed"
RECOVER "Restore a wallet from the seed"
INCREASEGAP "Increase the gap limit"
RESCAN "Rescan the Bitcoin Core wallet"
UNLOCK "Remove the lockfiles"
)
CHOICE=$(dialog \
--clear \
--backtitle "$BACKTITLE" \
--title "$TITLE" \
--ok-label "Select" \
--cancel-label "Back" \
--menu "$MENU" \
$HEIGHT $WIDTH $CHOICE_HEIGHT \
"${OPTIONS[@]}" \
2>&1 >/dev/tty)
case $CHOICE in
GEN)
menu_GEN;;
DISPLAY)
menu_DISPLAY;;
LABEL)
# wallet
chooseWallet
# address
trap 'rm -f "$address"' EXIT
address=$(mktemp -p /dev/shm/)
dialog --backtitle "Choose the address" \
--title "Choose the address" \
--inputbox "
Paste the address to be labeled
from the wallet: $walletFileName
" 11 69 2> "$address"
openMenuIfCancelled $?
# label
trap 'rm -f "$label"' EXIT
label=$(mktemp -p /dev/shm/)
dialog --backtitle "Choose the label" \
--title "Choose the label" \
--inputbox "
Type or paste the label for the address:
$(cat "$address")
from the wallet: $walletFileName
" 12 69 2> "$label"
openMenuIfCancelled $?
# display
clear
echo
echo "Running the command:
$tor python wallet-tool.py \
$(cat "$wallet") setlabel $(cat "$address") $(cat "$label")
"
# run
. /home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate &&
$tor python ~/joinmarket-clientserver/scripts/wallet-tool.py \
$(cat $wallet) "setlabel" "$(cat "$address")" "$(cat "$label")"
echo
echo "Press ENTER to return to the menu"
read key;;
HISTORY)
activateJMvenv
if [ "$(pip list | grep -c scipy)" -eq 0 ];then
echo "# Installing optional dependencies"
pip install scipy
fi
# wallet
chooseWallet noLockFileCheck
/home/joinmarket/start.script.sh wallet-tool $(cat $wallet) "history -v 4"
echo
echo "Press ENTER to return to the menu"
read key;;
IMPORT)
/home/joinmarket/info.importwallet.sh
echo "Returning to the menu..."
sleep 1
/home/joinmarket/menu.sh;;
SHOWSEED)
# wallet
chooseWallet noLockFileCheck
/home/joinmarket/start.script.sh wallet-tool $(cat $wallet) "showseed"
echo
echo "Press ENTER to return to the menu"
read key;;
RECOVER)
echo
. /home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate
command="$tor python /home/joinmarket/joinmarket-clientserver/scripts/wallet-tool.py recover"
echo "Running the command:"
echo "$command"
$command
echo
echo "Press ENTER to return to the menu"
read key;;
INCREASEGAP)
# wallet
chooseWallet noLockFileCheck
# gaplimit
trap 'rm -f "$gaplimit"' EXIT
gaplimit=$(mktemp -p /dev/shm/)
dialog --backtitle "Choose the new gap limit" \
--title "Choose the new gap limit" \
--inputbox "
The gap limit is the number of empty addresses after which the wallet stops looking for funds.
The default used is 6.
Set a higher number if funds are missing after recovery.
The tradeoff is more time needed for the wallet to open with more addresses monitored.
Enter the new gap limit to be used" 16 60 2> "$gaplimit"
openMenuIfCancelled $?
. /home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate
command="$tor python /home/joinmarket/joinmarket-clientserver/scripts/wallet-tool.py --recoversync -g $(cat $gaplimit) $(cat $wallet)"
echo "Running the command:"
echo "$command"
$command
echo
echo "Check if the funds appeared now with DISPLAY."
echo "You can set the gap limit as many times as needed."
echo
echo "Press ENTER to return to the menu"
read key;;
UNLOCK)
echo "Removing the wallet lockfiles with the command:"
echo "rm ~/.joinmarket/wallets/.*.lock"
rm ~/.joinmarket/wallets/.*.lock
# for old version <v0.6.3
rm ~/.joinmarket/wallets/*.lock 2>/dev/null
echo
echo "Press ENTER to return to the menu"
read key;;
RESCAN)
checkRPCwallet
echo
echo "# Input the blockheight to scan from (first SegWit block: 481824):"
read blockheight
echo
echo "# Starting the rescan from the block $blockheight ..."
echo "# Can exit this screen with CTRL+C, the rescan will continue in the background"
echo "# Monitor the progress in the logs of the connected bitcoind"
echo
customRPC "# Rescan wallet in bitcoind" "rescanblockchain" "$blockheight"
echo
echo "Press ENTER to return to the menu"
read key;;
UTXOS)
# wallet
chooseWallet noLockFileCheck
/home/joinmarket/start.script.sh wallet-tool $(cat $wallet) "showutxos"
echo
echo "Press ENTER to return to the menu"
read key;;
XPUBS)
# wallet
chooseWallet noLockFileCheck
clear
echo
echo "The 5 master public keys correspond to the 5 mixdepths (accounts) of the JoinMarket wallet."
echo
/home/joinmarket/start.script.sh wallet-tool "$(cat $wallet)"|grep mixdepth|sed -n '1~2p'|awk '{print $3}'
echo
echo "Import the master public keys to Specter Desktop or Electrum to create watch-only wallets."
echo
echo "Press ENTER to return to the menu..."
read key
/home/joinmarket/menu.sh;;
PSBT)
signPSBT;;
esac