diff --git a/CMakeLists.txt b/CMakeLists.txt index d7785d8252..5388edc9da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ set(CLIENT_NAME "Elements Core") set(CLIENT_VERSION_MAJOR 29) set(CLIENT_VERSION_MINOR 3) set(CLIENT_VERSION_BUILD 0) -set(CLIENT_VERSION_RC 1) +set(CLIENT_VERSION_RC 2) set(CLIENT_VERSION_IS_RELEASE "true") set(COPYRIGHT_YEAR "2025") diff --git a/doc/man/bitcoin-cli.1 b/doc/man/bitcoin-cli.1 index aad8ffd52b..e762c0fa39 100644 --- a/doc/man/bitcoin-cli.1 +++ b/doc/man/bitcoin-cli.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH BITCOIN-CLI "1" "January 2026" "bitcoin-cli v29.3.0rc1" "User Commands" +.TH BITCOIN-CLI "1" "January 2026" "bitcoin-cli v29.3.0rc2" "User Commands" .SH NAME -bitcoin-cli \- manual page for bitcoin-cli v29.3.0rc1 +bitcoin-cli \- manual page for bitcoin-cli v29.3.0rc2 .SH SYNOPSIS .B bitcoin-cli [\fI\,options\/\fR] \fI\, \/\fR[\fI\,params\/\fR] @@ -15,7 +15,7 @@ bitcoin-cli \- manual page for bitcoin-cli v29.3.0rc1 .B bitcoin-cli [\fI\,options\/\fR] \fI\,help \/\fR .SH DESCRIPTION -Bitcoin Core RPC client version v29.3.0rc1 +Bitcoin Core RPC client version v29.3.0rc2 .PP The bitcoin\-cli utility provides a command line interface to interact with a Bitcoin Core RPC server. .PP diff --git a/doc/man/bitcoin-qt.1 b/doc/man/bitcoin-qt.1 index ba38159542..4a990e8082 100644 --- a/doc/man/bitcoin-qt.1 +++ b/doc/man/bitcoin-qt.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH BITCOIN-QT "1" "January 2026" "bitcoin-qt v29.3.0rc1" "User Commands" +.TH BITCOIN-QT "1" "January 2026" "bitcoin-qt v29.3.0rc2" "User Commands" .SH NAME -bitcoin-qt \- manual page for bitcoin-qt v29.3.0rc1 +bitcoin-qt \- manual page for bitcoin-qt v29.3.0rc2 .SH SYNOPSIS .B bitcoin-qt [\fI\,options\/\fR] [\fI\,URI\/\fR] .SH DESCRIPTION -Bitcoin Core version v29.3.0rc1 +Bitcoin Core version v29.3.0rc2 .PP The bitcoin\-qt application provides a graphical interface for interacting with Bitcoin Core. .PP diff --git a/doc/man/bitcoin-tx.1 b/doc/man/bitcoin-tx.1 index 4be1d58291..7b3b996afd 100644 --- a/doc/man/bitcoin-tx.1 +++ b/doc/man/bitcoin-tx.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH BITCOIN-TX "1" "January 2026" "bitcoin-tx v29.3.0rc1" "User Commands" +.TH BITCOIN-TX "1" "January 2026" "bitcoin-tx v29.3.0rc2" "User Commands" .SH NAME -bitcoin-tx \- manual page for bitcoin-tx v29.3.0rc1 +bitcoin-tx \- manual page for bitcoin-tx v29.3.0rc2 .SH SYNOPSIS .B bitcoin-tx [\fI\,options\/\fR] \fI\, \/\fR[\fI\,commands\/\fR] @@ -9,7 +9,7 @@ bitcoin-tx \- manual page for bitcoin-tx v29.3.0rc1 .B bitcoin-tx [\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] .SH DESCRIPTION -Bitcoin Core bitcoin\-tx utility version v29.3.0rc1 +Bitcoin Core bitcoin\-tx utility version v29.3.0rc2 .PP The bitcoin\-tx tool is used for creating and modifying bitcoin transactions. .PP diff --git a/doc/man/bitcoin-util.1 b/doc/man/bitcoin-util.1 index f4bc33f4da..d10f4b48b3 100644 --- a/doc/man/bitcoin-util.1 +++ b/doc/man/bitcoin-util.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH BITCOIN-UTIL "1" "January 2026" "bitcoin-util v29.3.0rc1" "User Commands" +.TH BITCOIN-UTIL "1" "January 2026" "bitcoin-util v29.3.0rc2" "User Commands" .SH NAME -bitcoin-util \- manual page for bitcoin-util v29.3.0rc1 +bitcoin-util \- manual page for bitcoin-util v29.3.0rc2 .SH SYNOPSIS .B bitcoin-util [\fI\,options\/\fR] [\fI\,command\/\fR] @@ -9,7 +9,7 @@ bitcoin-util \- manual page for bitcoin-util v29.3.0rc1 .B bitcoin-util [\fI\,options\/\fR] \fI\,grind \/\fR .SH DESCRIPTION -Bitcoin Core bitcoin\-util utility version v29.3.0rc1 +Bitcoin Core bitcoin\-util utility version v29.3.0rc2 .PP The bitcoin\-util tool provides bitcoin related functionality that does not rely on the ability to access a running node. Available [commands] are listed below. .SH OPTIONS diff --git a/doc/man/bitcoin-wallet.1 b/doc/man/bitcoin-wallet.1 index 000fb2a814..c8737d7989 100644 --- a/doc/man/bitcoin-wallet.1 +++ b/doc/man/bitcoin-wallet.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH BITCOIN-WALLET "1" "January 2026" "bitcoin-wallet v29.3.0rc1" "User Commands" +.TH BITCOIN-WALLET "1" "January 2026" "bitcoin-wallet v29.3.0rc2" "User Commands" .SH NAME -bitcoin-wallet \- manual page for bitcoin-wallet v29.3.0rc1 +bitcoin-wallet \- manual page for bitcoin-wallet v29.3.0rc2 .SH SYNOPSIS .B bitcoin-wallet [\fI\,options\/\fR] \fI\,\/\fR .SH DESCRIPTION -Bitcoin Core bitcoin\-wallet utility version v29.3.0rc1 +Bitcoin Core bitcoin\-wallet utility version v29.3.0rc2 .PP bitcoin\-wallet is an offline tool for creating and interacting with Bitcoin Core wallet files. .PP diff --git a/doc/man/bitcoind.1 b/doc/man/bitcoind.1 index f0005de61c..bcf2354452 100644 --- a/doc/man/bitcoind.1 +++ b/doc/man/bitcoind.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH BITCOIND "1" "January 2026" "bitcoind v29.3.0rc1" "User Commands" +.TH BITCOIND "1" "January 2026" "bitcoind v29.3.0rc2" "User Commands" .SH NAME -bitcoind \- manual page for bitcoind v29.3.0rc1 +bitcoind \- manual page for bitcoind v29.3.0rc2 .SH SYNOPSIS .B bitcoind [\fI\,options\/\fR] .SH DESCRIPTION -Bitcoin Core daemon version v29.3.0rc1 +Bitcoin Core daemon version v29.3.0rc2 .PP The Bitcoin Core daemon (bitcoind) is a headless program that connects to the Bitcoin network to validate and relay transactions and blocks, as well as relaying addresses. .PP diff --git a/doc/release-notes.md b/doc/release-notes.md index 4970d195e8..4aebc143d7 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,6 +1,6 @@ -Bitcoin Core version 29.3rc1 is now available from: +Bitcoin Core version 29.3rc2 is now available from: - + This release includes various bug fixes and performance improvements, as well as updated translations. @@ -54,6 +54,7 @@ Notable changes - #34226 wallet: test: Relative wallet failed migration cleanup - #34123 wallet: migration, avoid creating spendable wallet from a watch-only legacy wallet - #34215 wallettool: fix unnamed createfromdump failure walletsdir deletion +- #34370 wallet: Additional cleanups for migration, and fixes for createfromdump with BDB ### Mining @@ -92,10 +93,12 @@ Thanks to everyone who directly contributed to this release: - furszy - Hennadii Stepanov - ismaelsadeeq +- luke-jr - m3dwards - Padraic Slattery - Pieter Wuille - SatsAndSports +- sedited - willcl-ark As well as to everyone that helped with translations on diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 84515ecad0..45d4724341 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -5368,10 +5368,14 @@ util::Result MigrateLegacyToDescriptor(std::shared_ptr return util::Error{_("Error: This wallet is already a descriptor wallet")}; } - // Make a backup of the DB - fs::path this_wallet_dir = fs::absolute(fs::PathFromString(local_wallet->GetDatabase().Filename())).parent_path(); + // Make a backup of the DB in the wallet dir (top-level wallets directory). + // Using GetWalletDir() directly (rather than deriving the directory from + // the database's current Filename()) avoids depending on whether the + // legacy BDB file lives directly in GetWalletDir() or in its own + // subdirectory, and avoids having to move/rename the backup after the + // storage format changes from BDB to SQLite below. fs::path backup_filename = fs::PathFromString(strprintf("%s_%d.legacy.bak", MigrationPrefixName(*local_wallet), GetTime())); - fs::path backup_path = this_wallet_dir / backup_filename; + fs::path backup_path = fsbridge::AbsPathJoin(GetWalletDir(), backup_filename); if (!local_wallet->BackupWallet(fs::PathToString(backup_path))) { if (was_loaded) { reload_wallet(local_wallet); @@ -5403,12 +5407,6 @@ util::Result MigrateLegacyToDescriptor(std::shared_ptr // First change to using SQLite if (!local_wallet->MigrateToSQLite(error)) return util::Error{error}; - // In case we're migrating from file to directory, move the backup into it - this_wallet_dir = fs::absolute(fs::PathFromString(local_wallet->GetDatabase().Filename())).parent_path(); - backup_path = this_wallet_dir / backup_filename; - fs::rename(res.backup_path, backup_path); - res.backup_path = backup_path; - // Do the migration of keys and scripts for non-blank wallets, and cleanup if it fails success = local_wallet->IsWalletFlagSet(WALLET_FLAG_BLANK_WALLET); if (!success) {