Skip to content

Conversation

@openoms
Copy link
Owner

@openoms openoms commented Jan 14, 2026

Bitcoin Core Descriptor Wallet Migration

  • Switch to descriptor wallets: Replace legacy wallet.dat with watch-only-descriptor-wallet using descriptors=true and disable_private_keys=true
  • Remove deprecated RPC workaround: Removed the deprecatedrpc=create_bdb configuration check since BDB wallets are no longer created
  • Automatic migration detection: Added checkWalletMigration function that detects existing wallet.dat and guides users through the migration process with step-by-step instructions
  • Migration tracking: Stores walletMigrationDone=true in joinin.conf to show migration notice only once
  • Updated all references: Changed wallet name from wallet.dat to watch-only-descriptor-wallet across:
    • _functions.bitcoincore.sh
    • _functions.sh
    • _functions.standalone.sh
    • install.bitcoincore.sh
    • Documentation files (FAQ.md, README.md, release_notes.md, prepare_remote_node.md)

CI/Build Infrastructure

  • Migrate Packer to HCL format: Replace joininbox-amd64-debian.json with build.amd64-debian.pkr.hcl
  • Upgrade to Debian 13.3.0: Updated base ISO from Debian 12.11.0 to 13.3.0
  • Add UEFI boot support: New Packer configuration supports both UEFI and legacy BIOS boot modes
  • Modernize preseed configuration: Replace old Debian 9 preseed with updated configuration for Debian 13
  • Install OVMF firmware: Added ovmf package to enable UEFI boot in QEMU
  • Use packer init: Build script now uses packer init -upgrade for automatic plugin management

Documentation

  • Updated wallet references in FAQ.md, README.md, release_notes.md
  • Added migration guide: New FAQ section explaining the wallet migration process for existing users

Migration Guide for Existing Users

Existing users with the legacy wallet.dat will see a migration notice on first run after updating. The steps are:

  1. Open each JoinMarket wallet via WALLET -> DISPLAY to import addresses into the new descriptor wallet
  2. Run a blockchain rescan via WALLET -> RESCAN with blockheight 481824 (or earlier if needed)
  3. Wait for rescan to complete (can take several hours)

See the updated FAQ for detailed instructions.

@openoms openoms changed the title chore: pdate JoinMarket to commit ce32baf and add python 3.12/3.13 support chore: update JoinMarket to commit ce32baf and add python 3.12/3.13 support Jan 14, 2026
@openoms openoms force-pushed the chore--update-joinmarket-to-commit-ce32baf branch 5 times, most recently from 218d892 to 1a9f400 Compare January 16, 2026 05:32
@openoms openoms requested a review from Copilot January 16, 2026 19:26
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates JoinMarket to commit ce32baf and modernizes the installation infrastructure to support Python 3.12/3.13 and Bitcoin Core's descriptor wallets instead of legacy BDB wallets.

Changes:

  • Updated JoinMarket from tagged release v0.9.11 to commit ce32baf with enhanced verification logic for commit-based installations
  • Extended Python version support to include 3.12 and 3.13, prioritizing newer versions
  • Migrated Bitcoin Core wallet configuration from legacy wallet.dat to descriptor-based watch-only-descriptor-wallet

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
scripts/install.joinmarket.sh Supports commit-based JoinMarket installations with PGP verification via centralized verify.git.sh
scripts/menu.update.sh Displays commit hash when no tag is available
build_joininbox.sh Adds Python 3.12/3.13 detection prioritizing newer versions
scripts/_functions.bitcoincore.sh Updates wallet references and removes deprecated BDB configuration checks
scripts/_functions.sh Updates wallet configuration and adds dialog terminal compatibility fixes
scripts/install.bitcoincore.sh Creates descriptor wallets for signet with proper parameters
scripts/standalone/_functions.standalone.sh Updates wallet path check and creation to use descriptor wallets
scripts/menu.wallet.sh Updates user-facing message about watch-only wallets
ci/amd64/debian/build.amd64-debian.pkr.hcl New HCL-format Packer configuration with UEFI support and Debian 13.3.0
ci/amd64/packer.build.amd64-debian.sh Modernized to use packer init and new HCL configuration
ci/amd64/debian/http/preseed.cfg New preseed configuration for Debian 13
prepare_remote_node.md Fixed typo: "numbes" → "numbers"
scripts/.dialogrc Changed border color from black to cyan
.editorconfig Added new editor configuration file
release_notes.md, README.md, FAQ.md Updated documentation references to descriptor wallets

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Owner Author

@openoms openoms left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Summary

This is a well-structured PR that modernizes JoininBox's infrastructure with several important updates. The changes are logically grouped and maintain backward compatibility where needed.

Strengths

1. JoinMarket Commit-Based Installation

  • Good approach to support both tagged releases and commit hashes
  • The verification logic correctly differentiates between tags (starting with v) and commit hashes
  • Reusing verify.git.sh for signature verification reduces code duplication

2. Descriptor Wallet Migration

  • Properly switches from legacy BDB wallets to descriptor wallets with disable_private_keys=true
  • Correctly removes the deprecatedrpc=create_bdb workaround that's no longer needed
  • Consistent naming convention (watch-only-descriptor-wallet) across all scripts and docs

3. Python Version Support

  • Prioritizing newer Python versions (3.13 > 3.12 > ...) is the right approach for forward compatibility
  • Maintains fallback to older versions for compatibility with existing systems

4. CI/Build Infrastructure

  • Migrating from JSON to HCL format for Packer is a good modernization
  • UEFI boot support alongside legacy BIOS is well implemented
  • The packer init -upgrade approach for plugin management is cleaner

5. Code Quality Improvements

  • .editorconfig addition helps maintain consistent code style
  • Dialog fixes for unknown terminal types (xterm-ghostty fallback) improve robustness
  • NCURSES_NO_UTF8_ACS=1 export fixes box drawing character issues

Minor Observations

  1. _functions.standalone.sh:293: The wallet directory check path changed from /home/bitcoin/.bitcoin/mainnet/wallets/ to /home/bitcoin/.bitcoin/wallets/ - verify this is intentional for the mainnet case.

  2. install.joinmarket.sh: The testedJMversion is commented out while testedJMcommit is active. This is correct for using the commit, but consider adding a comment explaining when to switch back to a tagged release.

  3. Preseed references: The new preseed.cfg references httpredir.debian.org which is the modern redirect service - good choice over the old ftp.de.debian.org.

Testing Recommendations

Before merging, consider testing:

  • Fresh installation on Debian 13 with Python 3.12/3.13
  • Wallet creation with the new descriptor wallet format
  • Signet mode activation/deactivation
  • Packer build with UEFI boot mode
  • Dialog display with various terminal types

Overall, this is a solid update that prepares JoininBox for newer Python versions, modern Bitcoin Core wallet formats, and updated Debian releases. Looks good!

@openoms openoms force-pushed the chore--update-joinmarket-to-commit-ce32baf branch from f8e1d31 to e3f70d4 Compare January 16, 2026 21:52
@openoms openoms changed the title chore: update JoinMarket to commit ce32baf and add python 3.12/3.13 support chore: migrate the watch-only Bitcoin Core wallet to use descriptors Jan 17, 2026
@openoms openoms marked this pull request as draft January 17, 2026 21:54
@openoms openoms force-pushed the chore--update-joinmarket-to-commit-ce32baf branch 3 times, most recently from 30db791 to 5ef2e78 Compare January 18, 2026 07:08
@openoms openoms requested a review from Copilot January 18, 2026 07:08
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 6 comments.

Comments suppressed due to low confidence (1)

scripts/install.joinmarket.sh:135

  • Duplicate code block: Lines 124-129 are identical to lines 130-135. The version variable initialization and GitHub release check are being performed twice with the same logic. Remove the duplicate block.
# Use tag if set, otherwise use commit hash
: "${version:=${testedJMversion:-$testedJMcommit}}"
# Only check GitHub releases if version looks like a tag (starts with 'v')
if [[ "${version}" == v* ]]; then
  curl -s "https://github.com/JoinMarket-Org/joinmarket-clientserver/release/tag/${version}" | grep -q "\"message\": \"Version not found\"" && error_msg "'There is no: https://github.com/JoinMarket-Org/joinmarket-clientserver/release/tag/${version}'"
fi
# Use tag if set, otherwise use commit hash
: "${version:=${testedJMversion:-$testedJMcommit}}"
# Only check GitHub releases if version looks like a tag (starts with 'v')
if [[ "${version}" == v* ]]; then
  curl -s "https://github.com/JoinMarket-Org/joinmarket-clientserver/release/tag/${version}" | grep -q "\"message\": \"Version not found\"" && error_msg "'There is no: https://github.com/JoinMarket-Org/joinmarket-clientserver/release/tag/${version}'"
fi

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@openoms openoms force-pushed the chore--update-joinmarket-to-commit-ce32baf branch from 5ef2e78 to 67b0eac Compare January 18, 2026 09:40
@openoms openoms requested a review from Copilot January 18, 2026 16:30
@openoms openoms marked this pull request as ready for review January 18, 2026 16:30
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants