From 1610643c8b37a9f674b236cfa79abf8f8aaf1410 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Thu, 8 Aug 2024 20:00:45 +0200 Subject: [PATCH 1/9] chainparams: add mainnet assumeutxo param at height 840_000 --- src/kernel/chainparams.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/kernel/chainparams.cpp b/src/kernel/chainparams.cpp index d0de3a4eab605..bae7dcd5d2ffd 100644 --- a/src/kernel/chainparams.cpp +++ b/src/kernel/chainparams.cpp @@ -185,7 +185,12 @@ class CMainParams : public CChainParams { }; m_assumeutxo_data = { - // TODO to be specified in a future patch. + { + .height = 840'000, + .hash_serialized = AssumeutxoHash{uint256{"a2a5521b1b5ab65f67818e5e8eccabb7171a517f9e2382208f77687310768f96"}}, + .m_chain_tx_count = 991032194, + .blockhash = consteval_ctor(uint256{"0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5"}), + } }; chainTxData = ChainTxData{ From 28fc562f2692af4f37f918d4ae31c4d115e03aee Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Mon, 10 Jun 2024 15:00:21 -0400 Subject: [PATCH 2/9] wallet, interfaces: Include database format in listWalletDir --- src/interfaces/wallet.h | 2 +- src/qt/bitcoingui.cpp | 6 +++--- src/qt/walletcontroller.cpp | 10 +++++----- src/qt/walletcontroller.h | 2 +- src/wallet/db.cpp | 26 +++++++++++++++++--------- src/wallet/db.h | 2 +- src/wallet/interfaces.cpp | 8 ++++---- src/wallet/rpc/wallet.cpp | 2 +- 8 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/interfaces/wallet.h b/src/interfaces/wallet.h index c573d6aa65198..fa82e67ab1854 100644 --- a/src/interfaces/wallet.h +++ b/src/interfaces/wallet.h @@ -343,7 +343,7 @@ class WalletLoader : public ChainClient virtual util::Result migrateWallet(const std::string& name, const SecureString& passphrase) = 0; //! Return available wallets in wallet directory. - virtual std::vector listWalletDir() = 0; + virtual std::vector> listWalletDir() = 0; //! Return interfaces for accessing wallets (if any). virtual std::vector> getWallets() = 0; diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 1f78550a55904..6590147c6f855 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -396,15 +396,15 @@ void BitcoinGUI::createActions() connect(openAction, &QAction::triggered, this, &BitcoinGUI::openClicked); connect(m_open_wallet_menu, &QMenu::aboutToShow, [this] { m_open_wallet_menu->clear(); - for (const std::pair& i : m_wallet_controller->listWalletDir()) { - const std::string& path = i.first; + for (const auto& [path, info] : m_wallet_controller->listWalletDir()) { + const auto& [loaded, _] = info; QString name = path.empty() ? QString("["+tr("default wallet")+"]") : QString::fromStdString(path); // An single ampersand in the menu item's text sets a shortcut for this item. // Single & are shown when && is in the string. So replace & with &&. name.replace(QChar('&'), QString("&&")); QAction* action = m_open_wallet_menu->addAction(name); - if (i.second) { + if (loaded) { // This wallet is already loaded action->setEnabled(false); continue; diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp index 34b47c90a3b55..7b3d920e56ef2 100644 --- a/src/qt/walletcontroller.cpp +++ b/src/qt/walletcontroller.cpp @@ -65,16 +65,16 @@ WalletController::~WalletController() delete m_activity_worker; } -std::map WalletController::listWalletDir() const +std::map> WalletController::listWalletDir() const { QMutexLocker locker(&m_mutex); - std::map wallets; - for (const std::string& name : m_node.walletLoader().listWalletDir()) { - wallets[name] = false; + std::map> wallets; + for (const auto& [name, format] : m_node.walletLoader().listWalletDir()) { + wallets[name] = std::make_pair(false, format); } for (WalletModel* wallet_model : m_wallets) { auto it = wallets.find(wallet_model->wallet().getWalletName()); - if (it != wallets.end()) it->second = true; + if (it != wallets.end()) it->second.first = true; } return wallets; } diff --git a/src/qt/walletcontroller.h b/src/qt/walletcontroller.h index c595ba998db78..bc98dc051b2c0 100644 --- a/src/qt/walletcontroller.h +++ b/src/qt/walletcontroller.h @@ -61,7 +61,7 @@ class WalletController : public QObject //! Returns all wallet names in the wallet dir mapped to whether the wallet //! is loaded. - std::map listWalletDir() const; + std::map> listWalletDir() const; void closeWallet(WalletModel* wallet_model, QWidget* parent = nullptr); void closeAllWallets(QWidget* parent = nullptr); diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp index 1523b7d6133de..400b9dc44fbcc 100644 --- a/src/wallet/db.cpp +++ b/src/wallet/db.cpp @@ -19,9 +19,9 @@ namespace wallet { bool operator<(BytePrefix a, Span b) { return a.prefix < b.subspan(0, std::min(a.prefix.size(), b.size())); } bool operator<(Span a, BytePrefix b) { return a.subspan(0, std::min(a.size(), b.prefix.size())) < b.prefix; } -std::vector ListDatabases(const fs::path& wallet_dir) +std::vector> ListDatabases(const fs::path& wallet_dir) { - std::vector paths; + std::vector> paths; std::error_code ec; for (auto it = fs::recursive_directory_iterator(wallet_dir, ec); it != fs::recursive_directory_iterator(); it.increment(ec)) { @@ -38,21 +38,29 @@ std::vector ListDatabases(const fs::path& wallet_dir) try { const fs::path path{it->path().lexically_relative(wallet_dir)}; - if (it->status().type() == fs::file_type::directory && - (IsBDBFile(BDBDataFile(it->path())) || IsSQLiteFile(SQLiteDataFile(it->path())))) { - // Found a directory which contains wallet.dat btree file, add it as a wallet. - paths.emplace_back(path); + if (it->status().type() == fs::file_type::directory) { + if (IsBDBFile(BDBDataFile(it->path()))) { + // Found a directory which contains wallet.dat btree file, add it as a wallet with BERKELEY format. + paths.emplace_back(path, "bdb"); + } else if (IsSQLiteFile(SQLiteDataFile(it->path()))) { + // Found a directory which contains wallet.dat sqlite file, add it as a wallet with SQLITE format. + paths.emplace_back(path, "sqlite"); + } } else if (it.depth() == 0 && it->symlink_status().type() == fs::file_type::regular && it->path().extension() != ".bak") { if (it->path().filename() == "wallet.dat") { - // Found top-level wallet.dat btree file, add top level directory "" + // Found top-level wallet.dat file, add top level directory "" // as a wallet. - paths.emplace_back(); + if (IsBDBFile(it->path())) { + paths.emplace_back(fs::path(), "bdb"); + } else if (IsSQLiteFile(it->path())) { + paths.emplace_back(fs::path(), "sqlite"); + } } else if (IsBDBFile(it->path())) { // Found top-level btree file not called wallet.dat. Current bitcoin // software will never create these files but will allow them to be // opened in a shared database environment for backwards compatibility. // Add it to the list of available wallets. - paths.emplace_back(path); + paths.emplace_back(path, "bdb"); } } } catch (const std::exception& e) { diff --git a/src/wallet/db.h b/src/wallet/db.h index 2045d513769d9..049af8dd19e36 100644 --- a/src/wallet/db.h +++ b/src/wallet/db.h @@ -216,7 +216,7 @@ enum class DatabaseStatus { }; /** Recursively list database paths in directory. */ -std::vector ListDatabases(const fs::path& path); +std::vector> ListDatabases(const fs::path& path); void ReadDatabaseArgs(const ArgsManager& args, DatabaseOptions& options); std::unique_ptr MakeDatabase(const fs::path& path, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error); diff --git a/src/wallet/interfaces.cpp b/src/wallet/interfaces.cpp index 9fab1b2ee44a3..14f05b687163b 100644 --- a/src/wallet/interfaces.cpp +++ b/src/wallet/interfaces.cpp @@ -656,11 +656,11 @@ class WalletLoaderImpl : public WalletLoader { return fs::PathToString(GetWalletDir()); } - std::vector listWalletDir() override + std::vector> listWalletDir() override { - std::vector paths; - for (auto& path : ListDatabases(GetWalletDir())) { - paths.push_back(fs::PathToString(path)); + std::vector> paths; + for (auto& [path, format] : ListDatabases(GetWalletDir())) { + paths.emplace_back(fs::PathToString(path), format); } return paths; } diff --git a/src/wallet/rpc/wallet.cpp b/src/wallet/rpc/wallet.cpp index ae1c67ef2a280..7a0b0103c0b99 100644 --- a/src/wallet/rpc/wallet.cpp +++ b/src/wallet/rpc/wallet.cpp @@ -169,7 +169,7 @@ static RPCHelpMan listwalletdir() [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue { UniValue wallets(UniValue::VARR); - for (const auto& path : ListDatabases(GetWalletDir())) { + for (const auto& [path, _] : ListDatabases(GetWalletDir())) { UniValue wallet(UniValue::VOBJ); wallet.pushKV("name", path.utf8string()); wallets.push_back(std::move(wallet)); From bfba63880fbb1108b73540faeb0620ba24b8cdd0 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Mon, 10 Jun 2024 15:39:35 -0400 Subject: [PATCH 3/9] gui: Consolidate wallet display name to GUIUtil function Instead of having the code for the wallet display name being copy and pasted, use a GUIUtil function to get that for us. --- src/qt/bitcoingui.cpp | 2 +- src/qt/guiutil.cpp | 9 +++++++++ src/qt/guiutil.h | 3 +++ src/qt/walletcontroller.cpp | 2 +- src/qt/walletmodel.cpp | 3 +-- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 6590147c6f855..189af77a0cdc1 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -398,7 +398,7 @@ void BitcoinGUI::createActions() m_open_wallet_menu->clear(); for (const auto& [path, info] : m_wallet_controller->listWalletDir()) { const auto& [loaded, _] = info; - QString name = path.empty() ? QString("["+tr("default wallet")+"]") : QString::fromStdString(path); + QString name = GUIUtil::WalletDisplayName(path); // An single ampersand in the menu item's text sets a shortcut for this item. // Single & are shown when && is in the string. So replace & with &&. name.replace(QChar('&'), QString("&&")); diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index f04e5c86f8f2d..2369f6b631241 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -1008,4 +1008,13 @@ void ShowModalDialogAsynchronously(QDialog* dialog) dialog->show(); } +QString WalletDisplayName(const QString& name) +{ + return name.isEmpty() ? "[" + QObject::tr("default wallet") + "]" : name; +} + +QString WalletDisplayName(const std::string& name) +{ + return WalletDisplayName(QString::fromStdString(name)); +} } // namespace GUIUtil diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index 3e28e545574a4..452519879437e 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -436,6 +436,9 @@ namespace GUIUtil return false; } + QString WalletDisplayName(const std::string& name); + QString WalletDisplayName(const QString& name); + } // namespace GUIUtil #endif // BITCOIN_QT_GUIUTIL_H diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp index 7b3d920e56ef2..ca7c00da41497 100644 --- a/src/qt/walletcontroller.cpp +++ b/src/qt/walletcontroller.cpp @@ -343,7 +343,7 @@ void OpenWalletActivity::finish() void OpenWalletActivity::open(const std::string& path) { - QString name = path.empty() ? QString("["+tr("default wallet")+"]") : QString::fromStdString(path); + QString name = GUIUtil::WalletDisplayName(path); showProgressDialog( //: Title of window indicating the progress of opening of a wallet. diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index f8ce068e1251e..0a01c0a45b192 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -594,8 +594,7 @@ QString WalletModel::getWalletName() const QString WalletModel::getDisplayName() const { - const QString name = getWalletName(); - return name.isEmpty() ? "["+tr("default wallet")+"]" : name; + return GUIUtil::WalletDisplayName(getWalletName()); } bool WalletModel::isMultiwallet() const From c3918583dd5fcd9001136da2192e02e092128901 Mon Sep 17 00:00:00 2001 From: furszy Date: Sun, 11 Aug 2024 23:58:37 -0300 Subject: [PATCH 4/9] gui: don't remove wallet manually before migration --- src/qt/walletcontroller.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp index ca7c00da41497..6f7049e51b2eb 100644 --- a/src/qt/walletcontroller.cpp +++ b/src/qt/walletcontroller.cpp @@ -150,9 +150,10 @@ WalletModel* WalletController::getOrCreateWallet(std::unique_ptr(active_dialog) == nullptr) { connect(qApp, &QApplication::focusWindowChanged, wallet_model, [this, wallet_model]() { if (!QApplication::activeModalWidget()) { removeAndDeleteWallet(wallet_model); @@ -463,8 +464,6 @@ void MigrateWalletActivity::migrate(WalletModel* wallet_model) // GUI needs to remove the wallet so that it can actually be unloaded by migration const std::string name = wallet_model->wallet().getWalletName(); - m_wallet_controller->removeAndDeleteWallet(wallet_model); - showProgressDialog(tr("Migrate Wallet"), tr("Migrating Wallet %1…").arg(GUIUtil::HtmlEscape(name))); QTimer::singleShot(0, worker(), [this, name, passphrase] { From d56a450bf5172e2c3f4b9a2786e71268019e1277 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Mon, 10 Jun 2024 15:40:53 -0400 Subject: [PATCH 5/9] gui: Use wallet name for wallet migration rather than WalletModel To prepare for migrating wallets that are not loaded, when migration occurs in the GUI, it should not rely on a WalletModel existing. Co-authored-by: furszy --- src/interfaces/wallet.h | 3 +++ src/qt/askpassphrasedialog.cpp | 8 +++++++- src/qt/askpassphrasedialog.h | 1 + src/qt/bitcoingui.cpp | 2 +- src/qt/walletcontroller.cpp | 22 +++++++++------------- src/qt/walletcontroller.h | 4 +--- src/wallet/interfaces.cpp | 15 +++++++++++++++ src/wallet/walletdb.cpp | 11 +++++++++++ src/wallet/walletdb.h | 3 +++ 9 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/interfaces/wallet.h b/src/interfaces/wallet.h index fa82e67ab1854..df1ced48a7142 100644 --- a/src/interfaces/wallet.h +++ b/src/interfaces/wallet.h @@ -342,6 +342,9 @@ class WalletLoader : public ChainClient //! Migrate a wallet virtual util::Result migrateWallet(const std::string& name, const SecureString& passphrase) = 0; + //! Returns true if wallet stores encryption keys + virtual bool isEncrypted(const std::string& wallet_name) = 0; + //! Return available wallets in wallet directory. virtual std::vector> listWalletDir() = 0; diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index 70ed40b2a18d1..b0bc1f480651a 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -44,6 +44,7 @@ AskPassphraseDialog::AskPassphraseDialog(Mode _mode, QWidget *parent, SecureStri ui->passEdit1->hide(); setWindowTitle(tr("Encrypt wallet")); break; + case UnlockMigration: case Unlock: // Ask passphrase ui->warningLabel->setText(tr("This operation needs your wallet passphrase to unlock the wallet.")); ui->passLabel2->hide(); @@ -80,7 +81,7 @@ void AskPassphraseDialog::setModel(WalletModel *_model) void AskPassphraseDialog::accept() { SecureString oldpass, newpass1, newpass2; - if (!model && mode != Encrypt) + if (!model && mode != Encrypt && mode != UnlockMigration) return; oldpass.reserve(MAX_PASSPHRASE_SIZE); newpass1.reserve(MAX_PASSPHRASE_SIZE); @@ -181,6 +182,10 @@ void AskPassphraseDialog::accept() QMessageBox::critical(this, tr("Wallet unlock failed"), e.what()); } break; + case UnlockMigration: + Assume(m_passphrase_out)->assign(oldpass); + QDialog::accept(); + break; case ChangePass: if(newpass1 == newpass2) { @@ -224,6 +229,7 @@ void AskPassphraseDialog::textChanged() case Encrypt: // New passphrase x2 acceptable = !ui->passEdit2->text().isEmpty() && !ui->passEdit3->text().isEmpty(); break; + case UnlockMigration: case Unlock: // Old passphrase x1 acceptable = !ui->passEdit1->text().isEmpty(); break; diff --git a/src/qt/askpassphrasedialog.h b/src/qt/askpassphrasedialog.h index 370ea1de7ecdf..c567c2942888a 100644 --- a/src/qt/askpassphrasedialog.h +++ b/src/qt/askpassphrasedialog.h @@ -26,6 +26,7 @@ class AskPassphraseDialog : public QDialog Encrypt, /**< Ask passphrase twice and encrypt */ Unlock, /**< Ask passphrase and unlock */ ChangePass, /**< Ask old passphrase + new passphrase twice */ + UnlockMigration, /**< Ask passphrase for unlocking during migration */ }; explicit AskPassphraseDialog(Mode mode, QWidget *parent, SecureString* passphrase_out = nullptr); diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 189af77a0cdc1..6ea4b68a3dd73 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -458,7 +458,7 @@ void BitcoinGUI::createActions() connect(m_migrate_wallet_action, &QAction::triggered, [this] { auto activity = new MigrateWalletActivity(m_wallet_controller, this); connect(activity, &MigrateWalletActivity::migrated, this, &BitcoinGUI::setCurrentWallet); - activity->migrate(walletFrame->currentWalletModel()); + activity->migrate(walletFrame->currentWalletModel()->wallet().getWalletName()); }); connect(m_mask_values_action, &QAction::toggled, this, &BitcoinGUI::setPrivacy); connect(m_mask_values_action, &QAction::toggled, this, &BitcoinGUI::enableHistoryAction); diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp index 6f7049e51b2eb..512ea8a1dc116 100644 --- a/src/qt/walletcontroller.cpp +++ b/src/qt/walletcontroller.cpp @@ -437,12 +437,12 @@ void RestoreWalletActivity::finish() Q_EMIT finished(); } -void MigrateWalletActivity::migrate(WalletModel* wallet_model) +void MigrateWalletActivity::migrate(const std::string& name) { // Warn the user about migration QMessageBox box(m_parent_widget); box.setWindowTitle(tr("Migrate wallet")); - box.setText(tr("Are you sure you wish to migrate the wallet %1?").arg(GUIUtil::HtmlEscape(wallet_model->getDisplayName()))); + box.setText(tr("Are you sure you wish to migrate the wallet %1?").arg(GUIUtil::HtmlEscape(GUIUtil::WalletDisplayName(name)))); box.setInformativeText(tr("Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made.\n" "If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts.\n" "If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts.\n\n" @@ -453,29 +453,25 @@ void MigrateWalletActivity::migrate(WalletModel* wallet_model) box.setDefaultButton(QMessageBox::Yes); if (box.exec() != QMessageBox::Yes) return; - // Get the passphrase if it is encrypted regardless of it is locked or unlocked. We need the passphrase itself. SecureString passphrase; - WalletModel::EncryptionStatus enc_status = wallet_model->getEncryptionStatus(); - if (enc_status == WalletModel::EncryptionStatus::Locked || enc_status == WalletModel::EncryptionStatus::Unlocked) { - AskPassphraseDialog dlg(AskPassphraseDialog::Unlock, m_parent_widget, &passphrase); - dlg.setModel(wallet_model); - dlg.exec(); + if (node().walletLoader().isEncrypted(name)) { + // Get the passphrase for the wallet + AskPassphraseDialog dlg(AskPassphraseDialog::UnlockMigration, m_parent_widget, &passphrase); + if (dlg.exec() == QDialog::Rejected) return; } - // GUI needs to remove the wallet so that it can actually be unloaded by migration - const std::string name = wallet_model->wallet().getWalletName(); showProgressDialog(tr("Migrate Wallet"), tr("Migrating Wallet %1…").arg(GUIUtil::HtmlEscape(name))); QTimer::singleShot(0, worker(), [this, name, passphrase] { auto res{node().walletLoader().migrateWallet(name, passphrase)}; if (res) { - m_success_message = tr("The wallet '%1' was migrated successfully.").arg(GUIUtil::HtmlEscape(res->wallet->getWalletName())); + m_success_message = tr("The wallet '%1' was migrated successfully.").arg(GUIUtil::HtmlEscape(GUIUtil::WalletDisplayName(res->wallet->getWalletName()))); if (res->watchonly_wallet_name) { - m_success_message += QChar(' ') + tr("Watchonly scripts have been migrated to a new wallet named '%1'.").arg(GUIUtil::HtmlEscape(res->watchonly_wallet_name.value())); + m_success_message += QChar(' ') + tr("Watchonly scripts have been migrated to a new wallet named '%1'.").arg(GUIUtil::HtmlEscape(GUIUtil::WalletDisplayName(res->watchonly_wallet_name.value()))); } if (res->solvables_wallet_name) { - m_success_message += QChar(' ') + tr("Solvable but not watched scripts have been migrated to a new wallet named '%1'.").arg(GUIUtil::HtmlEscape(res->solvables_wallet_name.value())); + m_success_message += QChar(' ') + tr("Solvable but not watched scripts have been migrated to a new wallet named '%1'.").arg(GUIUtil::HtmlEscape(GUIUtil::WalletDisplayName(res->solvables_wallet_name.value()))); } m_wallet_model = m_wallet_controller->getOrCreateWallet(std::move(res->wallet)); } else { diff --git a/src/qt/walletcontroller.h b/src/qt/walletcontroller.h index bc98dc051b2c0..7902c3b23544a 100644 --- a/src/qt/walletcontroller.h +++ b/src/qt/walletcontroller.h @@ -66,8 +66,6 @@ class WalletController : public QObject void closeWallet(WalletModel* wallet_model, QWidget* parent = nullptr); void closeAllWallets(QWidget* parent = nullptr); - void migrateWallet(WalletModel* wallet_model, QWidget* parent = nullptr); - Q_SIGNALS: void walletAdded(WalletModel* wallet_model); void walletRemoved(WalletModel* wallet_model); @@ -186,7 +184,7 @@ class MigrateWalletActivity : public WalletControllerActivity public: MigrateWalletActivity(WalletController* wallet_controller, QWidget* parent) : WalletControllerActivity(wallet_controller, parent) {} - void migrate(WalletModel* wallet_model); + void migrate(const std::string& path); Q_SIGNALS: void migrated(WalletModel* wallet_model); diff --git a/src/wallet/interfaces.cpp b/src/wallet/interfaces.cpp index 14f05b687163b..21e8a0b3bd24c 100644 --- a/src/wallet/interfaces.cpp +++ b/src/wallet/interfaces.cpp @@ -652,6 +652,21 @@ class WalletLoaderImpl : public WalletLoader }; return out; } + bool isEncrypted(const std::string& wallet_name) override + { + auto wallets{GetWallets(m_context)}; + auto it = std::find_if(wallets.begin(), wallets.end(), [&](std::shared_ptr w){ return w->GetName() == wallet_name; }); + if (it != wallets.end()) return (*it)->IsCrypted(); + + // Unloaded wallet, read db + DatabaseOptions options; + options.require_existing = true; + DatabaseStatus status; + bilingual_str error; + auto db = MakeWalletDatabase(wallet_name, options, status, error); + if (!db) return false; + return WalletBatch(*db).IsEncrypted(); + } std::string getWalletDir() override { return fs::PathToString(GetWalletDir()); diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp index 61cc9dbc780ee..18d6e1407e908 100644 --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -187,6 +187,17 @@ bool WalletBatch::ReadBestBlock(CBlockLocator& locator) return m_batch->Read(DBKeys::BESTBLOCK_NOMERKLE, locator); } +bool WalletBatch::IsEncrypted() +{ + DataStream prefix; + prefix << DBKeys::MASTER_KEY; + if (auto cursor = m_batch->GetNewPrefixCursor(prefix)) { + DataStream k, v; + if (cursor->Next(k, v) == DatabaseCursor::Status::MORE) return true; + } + return false; +} + bool WalletBatch::WriteOrderPosNext(int64_t nOrderPosNext) { return WriteIC(DBKeys::ORDERPOSNEXT, nOrderPosNext); diff --git a/src/wallet/walletdb.h b/src/wallet/walletdb.h index 9474a59660fe5..bffcc87202aa6 100644 --- a/src/wallet/walletdb.h +++ b/src/wallet/walletdb.h @@ -247,6 +247,9 @@ class WalletBatch bool WriteBestBlock(const CBlockLocator& locator); bool ReadBestBlock(CBlockLocator& locator); + // Returns true if wallet stores encryption keys + bool IsEncrypted(); + bool WriteOrderPosNext(int64_t nOrderPosNext); bool ReadPool(int64_t nPool, CKeyPool& keypool); From 9b297555207b4ea54bc0051f09c7084797aa9def Mon Sep 17 00:00:00 2001 From: Martin Saposnic Date: Tue, 13 Aug 2024 14:00:33 -0300 Subject: [PATCH 6/9] Deduplicate list of chain strings in RPC help texts --- src/chainparamsbase.cpp | 2 +- src/chainparamsbase.h | 3 +++ src/rpc/blockchain.cpp | 3 ++- src/rpc/mining.cpp | 3 ++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/chainparamsbase.cpp b/src/chainparamsbase.cpp index 26d877fd9385b..aadd04e509f22 100644 --- a/src/chainparamsbase.cpp +++ b/src/chainparamsbase.cpp @@ -13,7 +13,7 @@ void SetupChainParamsBaseOptions(ArgsManager& argsman) { - argsman.AddArg("-chain=", "Use the chain (default: main). Allowed values: main, test, testnet4, signet, regtest", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); + argsman.AddArg("-chain=", "Use the chain (default: main). Allowed values: " LIST_CHAIN_NAMES, ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); argsman.AddArg("-regtest", "Enter regression test mode, which uses a special chain in which blocks can be solved instantly. " "This is intended for regression testing tools and app development. Equivalent to -chain=regtest.", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS); argsman.AddArg("-testactivationheight=name@height.", "Set the activation height of 'name' (segwit, bip34, dersig, cltv, csv). (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); diff --git a/src/chainparamsbase.h b/src/chainparamsbase.h index 72807501d9dc6..c75a70cb96b00 100644 --- a/src/chainparamsbase.h +++ b/src/chainparamsbase.h @@ -53,4 +53,7 @@ const CBaseChainParams& BaseParams(); /** Sets the params returned by Params() to those for the given chain. */ void SelectBaseParams(const ChainType chain); +/** List of possible chain / network names */ +#define LIST_CHAIN_NAMES "main, test, testnet4, signet, regtest" + #endif // BITCOIN_CHAINPARAMSBASE_H diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index d7284ae0181fe..b449444aff42c 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -1273,7 +1274,7 @@ RPCHelpMan getblockchaininfo() RPCResult{ RPCResult::Type::OBJ, "", "", { - {RPCResult::Type::STR, "chain", "current network name (main, test, testnet4, signet, regtest)"}, + {RPCResult::Type::STR, "chain", "current network name (" LIST_CHAIN_NAMES ")"}, {RPCResult::Type::NUM, "blocks", "the height of the most-work fully-validated chain. The genesis block has height 0"}, {RPCResult::Type::NUM, "headers", "the current number of headers we have validated"}, {RPCResult::Type::STR, "bestblockhash", "the hash of the currently best block"}, diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 37a22bcf108a1..3c41e136ecafd 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -422,7 +423,7 @@ static RPCHelpMan getmininginfo() {RPCResult::Type::NUM, "difficulty", "The current difficulty"}, {RPCResult::Type::NUM, "networkhashps", "The network hashes per second"}, {RPCResult::Type::NUM, "pooledtx", "The size of the mempool"}, - {RPCResult::Type::STR, "chain", "current network name (main, test, testnet4, signet, regtest)"}, + {RPCResult::Type::STR, "chain", "current network name (" LIST_CHAIN_NAMES ")"}, (IsDeprecatedRPCEnabled("warnings") ? RPCResult{RPCResult::Type::STR, "warnings", "any network and blockchain warnings (DEPRECATED)"} : RPCResult{RPCResult::Type::ARR, "warnings", "any network and blockchain warnings (run with `-deprecatedrpc=warnings` to return the latest warning as a single string)", From 8f2522d242961ceb9e79672aa43e856863a1a6dd Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Mon, 10 Jun 2024 15:14:04 -0400 Subject: [PATCH 7/9] gui: Use menu for wallet migration Once legacy wallets can no longer be loaded, we need to be able to migrate them without loading. Thus we should use a menu that lists the wallets in the wallet directory instead of an action which migrates the currently loaded wallet. --- src/qt/bitcoingui.cpp | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 6ea4b68a3dd73..6d66c7473bd05 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -360,6 +360,7 @@ void BitcoinGUI::createActions() m_migrate_wallet_action = new QAction(tr("Migrate Wallet"), this); m_migrate_wallet_action->setEnabled(false); m_migrate_wallet_action->setStatusTip(tr("Migrate a wallet")); + m_migrate_wallet_menu = new QMenu(this); showHelpMessageAction = new QAction(tr("&Command-line options"), this); showHelpMessageAction->setMenuRole(QAction::NoRole); @@ -455,10 +456,31 @@ void BitcoinGUI::createActions() connect(m_close_all_wallets_action, &QAction::triggered, [this] { m_wallet_controller->closeAllWallets(this); }); - connect(m_migrate_wallet_action, &QAction::triggered, [this] { - auto activity = new MigrateWalletActivity(m_wallet_controller, this); - connect(activity, &MigrateWalletActivity::migrated, this, &BitcoinGUI::setCurrentWallet); - activity->migrate(walletFrame->currentWalletModel()->wallet().getWalletName()); + connect(m_migrate_wallet_menu, &QMenu::aboutToShow, [this] { + m_migrate_wallet_menu->clear(); + for (const auto& [wallet_name, info] : m_wallet_controller->listWalletDir()) { + const auto& [loaded, format] = info; + + if (format != "bdb") { // Skip already migrated wallets + continue; + } + + QString name = GUIUtil::WalletDisplayName(wallet_name); + // An single ampersand in the menu item's text sets a shortcut for this item. + // Single & are shown when && is in the string. So replace & with &&. + name.replace(QChar('&'), QString("&&")); + QAction* action = m_migrate_wallet_menu->addAction(name); + + connect(action, &QAction::triggered, [this, wallet_name] { + auto activity = new MigrateWalletActivity(m_wallet_controller, this); + connect(activity, &MigrateWalletActivity::migrated, this, &BitcoinGUI::setCurrentWallet); + activity->migrate(wallet_name); + }); + } + if (m_migrate_wallet_menu->isEmpty()) { + QAction* action = m_migrate_wallet_menu->addAction(tr("No wallets available")); + action->setEnabled(false); + } }); connect(m_mask_values_action, &QAction::toggled, this, &BitcoinGUI::setPrivacy); connect(m_mask_values_action, &QAction::toggled, this, &BitcoinGUI::enableHistoryAction); @@ -691,6 +713,8 @@ void BitcoinGUI::setWalletController(WalletController* wallet_controller, bool s m_open_wallet_action->setEnabled(true); m_open_wallet_action->setMenu(m_open_wallet_menu); m_restore_wallet_action->setEnabled(true); + m_migrate_wallet_action->setEnabled(true); + m_migrate_wallet_action->setMenu(m_migrate_wallet_menu); GUIUtil::ExceptionSafeConnect(wallet_controller, &WalletController::walletAdded, this, &BitcoinGUI::addWallet); connect(wallet_controller, &WalletController::walletRemoved, this, &BitcoinGUI::removeWallet); @@ -771,7 +795,6 @@ void BitcoinGUI::setCurrentWallet(WalletModel* wallet_model) } } updateWindowTitle(); - m_migrate_wallet_action->setEnabled(wallet_model->wallet().isLegacy()); } void BitcoinGUI::setCurrentWalletBySelectorIndex(int index) @@ -805,7 +828,6 @@ void BitcoinGUI::setWalletActionsEnabled(bool enabled) openAction->setEnabled(enabled); m_close_wallet_action->setEnabled(enabled); m_close_all_wallets_action->setEnabled(enabled); - m_migrate_wallet_action->setEnabled(enabled); } void BitcoinGUI::createTrayIcon() From 770b0348c0abe2f63b56cc78c7b7a0e6b4057ce1 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:14:10 +0100 Subject: [PATCH 8/9] qt: Update translation source file for v28.0 string freeze The diff is produced by running `make -C src translate`. --- src/qt/bitcoinstrings.cpp | 3 - src/qt/locale/bitcoin_en.ts | 173 +- src/qt/locale/bitcoin_en.xlf | 3307 +++++++++++++++++----------------- 3 files changed, 1750 insertions(+), 1733 deletions(-) diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index 08a5a114b582e..13773831a09a8 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -30,9 +30,6 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for " "details and a full list."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"A forked headers-chain with more work than the chain with the snapshot base " -"block header exists. Please proceed to sync without AssumeUtxo."), -QT_TRANSLATE_NOOP("bitcoin-core", "" "Cannot downgrade wallet from version %i to version %i. Wallet version " "unchanged."), QT_TRANSLATE_NOOP("bitcoin-core", "" diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index 085ee25f26f2d..c8aacee4f3151 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -184,7 +184,7 @@ Signing is only possible with addresses of the type 'legacy'. - + This operation needs your wallet passphrase to unlock the wallet. @@ -216,17 +216,17 @@ Signing is only possible with addresses of the type 'legacy'. - + Wallet encrypted - + Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. - + Enter the old passphrase and new passphrase for the wallet. @@ -268,23 +268,23 @@ Signing is only possible with addresses of the type 'legacy'. - + Wallet encryption failed - + Wallet encryption failed due to an internal error. Your wallet was not encrypted. - + The supplied passphrases do not match. - + Wallet unlock failed @@ -292,17 +292,17 @@ Signing is only possible with addresses of the type 'legacy'. - + The passphrase entered for the wallet decryption was incorrect. - + The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - + Wallet passphrase was successfully changed. @@ -318,7 +318,7 @@ Signing is only possible with addresses of the type 'legacy'. - + Warning: The Caps Lock key is on! @@ -428,7 +428,7 @@ Signing is only possible with addresses of the type 'legacy'. - + &Minimize @@ -449,7 +449,7 @@ Signing is only possible with addresses of the type 'legacy'. - + Send coins to a Bitcoin address Send coins to a Bitcoin address @@ -544,7 +544,7 @@ Signing is only possible with addresses of the type 'legacy'. - + &File &File @@ -589,7 +589,7 @@ Signing is only possible with addresses of the type 'legacy'. - + Request payments (generates QR codes and bitcoin: URIs) @@ -604,12 +604,12 @@ Signing is only possible with addresses of the type 'legacy'. - + &Command-line options - + Processed %n block(s) of transaction history. Processed %n block of transaction history. @@ -657,7 +657,7 @@ Signing is only possible with addresses of the type 'legacy'. Up to date - + Ctrl+Q @@ -744,7 +744,7 @@ Signing is only possible with addresses of the type 'legacy'. - + Show the %1 help message to get a list with possible Bitcoin command-line options @@ -759,17 +759,13 @@ Signing is only possible with addresses of the type 'legacy'. - - default wallet - - - - + + No wallets available - + Wallet Data Name of the wallet data file format. @@ -793,7 +789,7 @@ Signing is only possible with addresses of the type 'legacy'. - + &Window &Window @@ -1105,7 +1101,7 @@ Signing is only possible with addresses of the type 'legacy'. - + (%1 locked) @@ -1134,7 +1130,7 @@ Signing is only possible with addresses of the type 'legacy'. CreateWalletActivity - + Create Wallet Title of window indicating the progress of creation of a new wallet. @@ -1532,7 +1528,7 @@ The migration process will create a backup of the wallet before migrating. This - + Migrate Wallet @@ -1670,7 +1666,7 @@ The migration process will create a backup of the wallet before migrating. This OpenWalletActivity - + Open wallet failed @@ -1680,12 +1676,7 @@ The migration process will create a backup of the wallet before migrating. This - - default wallet - - - - + Open Wallet Title of window indicating the progress of opening of a wallet. @@ -2556,12 +2547,12 @@ If you are receiving this error you should request the merchant provide a BIP21 Amount - + Enter a Bitcoin address (e.g. %1) - + Ctrl+W @@ -2748,7 +2739,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + %1 kB @@ -2764,6 +2755,11 @@ If you are receiving this error you should request the merchant provide a BIP21 %1 GB + + + default wallet + + Do you want to reset settings to default values, or to abort without making changes? @@ -2856,11 +2852,11 @@ If you are receiving this error you should request the merchant provide a BIP21 - + - + @@ -2893,7 +2889,7 @@ If you are receiving this error you should request the merchant provide a BIP21 N/A - + Client version Client version @@ -2934,12 +2930,12 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Network Network - + Name @@ -2949,7 +2945,17 @@ If you are receiving this error you should request the merchant provide a BIP21 Number of connections - + + Local Addresses + + + + + Network addresses that your Bitcoin node is currently using to communicate with other nodes. + + + + Block chain Block chain @@ -2985,18 +2991,18 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Received - - + + Sent - + &Peers @@ -3006,13 +3012,23 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Select a peer to view detailed information. - + + Hide Peers Detail + + + + + Ctrl+X + + + + The transport layer version: %1 @@ -3108,18 +3124,18 @@ If you are receiving this error you should request the merchant provide a BIP21 - - + + User Agent - + Node window - + Current block height @@ -3139,7 +3155,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Permissions @@ -3235,7 +3251,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Last block time Last block time @@ -3260,7 +3276,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + In: @@ -3310,7 +3326,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Inbound: initiated by peer Explanatory text for an inbound peer connection. @@ -3403,7 +3419,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + &Copy address Context menu action to copy the address of a peer. @@ -3450,12 +3466,17 @@ If you are receiving this error you should request the merchant provide a BIP21 - + + None + + + + Executing command without any wallet - + Ctrl+I @@ -3480,12 +3501,12 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Executing command using "%1" wallet - + Welcome to the %1 RPC console. Use up and down arrows to navigate history, and %2 to clear screen. Use %3 and %4 to increase or decrease the font size. @@ -3497,7 +3518,7 @@ For more information on using this console, type %6. - + Executing… A console message indicating an entered command is currently being executed. @@ -5180,7 +5201,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 WalletController - + Close wallet @@ -5339,11 +5360,6 @@ Go to File > Open Wallet to load a wallet. Can't display address - - - default wallet - - WalletView @@ -5417,7 +5433,7 @@ Go to File > Open Wallet to load a wallet. - + Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. @@ -5662,17 +5678,12 @@ Go to File > Open Wallet to load a wallet. - + %s is set very high! Fees this large could be paid on a single transaction. - - A forked headers-chain with more work than the chain with the snapshot base block header exists. Please proceed to sync without AssumeUtxo. - - - - + Cannot provide specific connections and have addrman find outgoing connections at the same time. diff --git a/src/qt/locale/bitcoin_en.xlf b/src/qt/locale/bitcoin_en.xlf index 9115a2df7d6af..eef3fd3cfedab 100644 --- a/src/qt/locale/bitcoin_en.xlf +++ b/src/qt/locale/bitcoin_en.xlf @@ -160,33 +160,33 @@ Signing is only possible with addresses of the type 'legacy'. This operation needs your wallet passphrase to unlock the wallet. - 48 + 49 Unlock wallet - 53 + 54 Change passphrase - 56 + 57 Confirm wallet encryption - 104 + 105 Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>! - 105 + 106 Are you sure you wish to encrypt your wallet? - 105 - 123 + 106 + 124 Wallet encrypted - 135 - 189 + 136 + 194 Enter the new passphrase for the wallet.<br/>Please use a passphrase of <b>ten or more random characters</b>, or <b>eight or more words</b>. @@ -194,83 +194,83 @@ Signing is only possible with addresses of the type 'legacy'. Enter the old passphrase and new passphrase for the wallet. - 57 + 58 Continue - 107 + 108 Back - 108 + 109 Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer. - 115 + 116 Wallet to be encrypted - 120 + 121 Your wallet is about to be encrypted. - 122 + 123 Your wallet is now encrypted. - 137 + 138 IMPORTANT: Any previous backups you have made of your wallet file should be replaced with the newly generated, encrypted wallet file. For security reasons, previous backups of the unencrypted wallet file will become useless as soon as you start using the new, encrypted wallet. - 139 + 140 Wallet encryption failed - 145 - 153 - 211 + 146 + 154 + 216 Wallet encryption failed due to an internal error. Your wallet was not encrypted. - 146 + 147 The supplied passphrases do not match. - 154 - 212 + 155 + 217 Wallet unlock failed - 163 - 166 - 181 + 164 + 167 + 182 The passphrase entered for the wallet decryption was incorrect. - 164 - 198 + 165 + 203 The passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. If this is successful, please set a new passphrase to avoid this issue in the future. - 167 + 168 Wallet passphrase was successfully changed. - 190 + 195 Passphrase change failed - 197 - 200 + 202 + 205 The old passphrase entered for the wallet decryption is incorrect. It contains a null character (ie - a zero byte). If the passphrase was set with a version of this software prior to 25.0, please try again with only the characters up to — but not including — the first null character. - 201 + 206 Warning: The Caps Lock key is on! - 246 - 279 + 252 + 285 @@ -382,20 +382,20 @@ Signing is only possible with addresses of the type 'legacy'. &Minimize - 511 + 533 Wallet: - 590 + 612 Network activity disabled. - 1008 + 1030 A substring of the tooltip. Proxy is <b>enabled</b>: %1 - 1459 + 1481 Send coins to a Bitcoin address @@ -475,39 +475,39 @@ Signing is only possible with addresses of the type 'legacy'. &File - 477 + 499 &Settings - 498 + 520 &Help - 559 + 581 Tabs toolbar - 570 + 592 Syncing Headers (%1%)… - 1052 + 1074 Synchronizing with network… - 1110 + 1132 Indexing blocks on disk… - 1115 + 1137 Processing blocks on disk… - 1117 + 1139 Connecting to peers… - 1124 + 1146 Request payments (generates QR codes and bitcoin: URIs) @@ -523,10 +523,10 @@ Signing is only possible with addresses of the type 'legacy'. &Command-line options - 364 + 365 - 1133 + 1155 Processed %n block(s) of transaction history. @@ -536,35 +536,35 @@ Signing is only possible with addresses of the type 'legacy'. %1 behind - 1156 + 1178 Catching up… - 1161 + 1183 Last received block was generated %1 ago. - 1180 + 1202 Transactions after this will not yet be visible. - 1182 + 1204 Error - 1222 + 1244 Warning - 1226 + 1248 Information - 1230 + 1252 Up to date - 1137 + 1159 Ctrl+Q @@ -638,255 +638,252 @@ Signing is only possible with addresses of the type 'legacy'. Show the %1 help message to get a list with possible Bitcoin command-line options - 366 + 367 &Mask values - 368 + 369 Mask the values in the Overview tab - 370 + 371 - default wallet - 401 - - No wallets available - 421 + 422 + 481 - + Wallet Data - 427 + 428 Name of the wallet data file format. - + Load Wallet Backup - 430 + 431 The title for Restore Wallet File Windows - + Restore Wallet - 438 + 439 Title of pop-up window shown when the user is attempting to restore a wallet. - + Wallet Name - 440 + 441 Label of the input field where the name of the wallet is entered. - + &Window - 509 + 531 - + Ctrl+M - 512 + 534 - + Zoom - 521 + 543 - + Main Window - 539 + 561 - + %1 client - 818 + 840 - + &Hide - 886 + 908 - + S&how - 887 + 909 - 1005 + 1027 A substring of the tooltip. - + %n active connection(s) to Bitcoin network. - + %n active connection(s) to Bitcoin network. - + Click for more actions. - 1015 + 1037 A substring of the tooltip. "More actions" are available via the context menu. - + Show Peers tab - 1032 + 1054 A context menu item. The "Peers tab" is an element of the "Node window". - + Disable network activity - 1040 + 1062 A context menu item. - + Enable network activity - 1042 + 1064 A context menu item. The network activity was disabled previously. - + Pre-syncing Headers (%1%)… - 1059 + 1081 - + Error creating wallet - 1198 + 1220 - + Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets) - 1198 + 1220 - + Error: %1 - 1223 + 1245 - + Warning: %1 - 1227 + 1249 - + Date: %1 - 1335 + 1357 - + Amount: %1 - 1336 + 1358 - + Wallet: %1 - 1338 + 1360 - + Type: %1 - 1340 + 1362 - + Label: %1 - 1342 + 1364 - + Address: %1 - 1344 + 1366 - + Sent transaction - 1345 + 1367 - + Incoming transaction - 1345 + 1367 - + HD key generation is <b>enabled</b> - 1397 + 1419 - + HD key generation is <b>disabled</b> - 1397 + 1419 - + Private key <b>disabled</b> - 1397 + 1419 - + Wallet is <b>encrypted</b> and currently <b>unlocked</b> - 1420 + 1442 - + Wallet is <b>encrypted</b> and currently <b>locked</b> - 1428 + 1450 - + Original message: - 1547 + 1569 - + Unit to show amounts in. Click to select another unit. - 1586 + 1608 - + Coin Selection 14 - + Quantity: 51 - + Bytes: 80 - + Amount: 125 - + Fee: 170 - + After Fee: 218 - + Change: 250 - + (un)select all 306 - + Tree mode 322 - + List mode 335 - + Amount 391 - + Received with label 396 - + Received with address 401 - + Date 406 - + Confirmations 411 - + Confirmed 414 @@ -894,233 +891,229 @@ Signing is only possible with addresses of the type 'legacy'. - + Copy amount 65 - + &Copy address 54 - + Copy &label 55 - + Copy &amount 56 - + Copy transaction &ID and output index 57 - + L&ock unspent 59 - + &Unlock unspent 60 - + Copy quantity 64 - + Copy fee 66 - + Copy after fee 67 - + Copy bytes 68 - + Copy change 69 - + (%1 locked) - 367 + 363 - + Can vary +/- %1 satoshi(s) per input. - 532 + 528 - + (no label) - 577 - 631 + 573 + 627 - + change from %1 (%2) - 624 + 620 - + (change) - 625 + 621 - + Create Wallet - 247 + 248 Title of window indicating the progress of creation of a new wallet. - + Creating Wallet <b>%1</b>… - 250 + 251 Descriptive text of the create wallet progress window which indicates to the user which wallet is currently being created. - + Create wallet failed - 282 + 283 - + Create wallet warning - 284 + 285 - + Can't list signers - 300 + 301 - + Too many external signers found - 303 + 304 - + Load Wallets - 377 + 378 Title of progress window which is displayed when wallets are being loaded. - + Loading wallets… - 380 + 381 Descriptive text of the load wallets progress window which indicates to the user that wallets are currently being loaded. - + Migrate wallet - 443 + 444 - + Are you sure you wish to migrate the wallet <i>%1</i>? - 444 + 445 - + Migrating the wallet will convert this wallet to one or more descriptor wallets. A new wallet backup will need to be made. If this wallet contains any watchonly scripts, a new wallet will be created which contains those watchonly scripts. If this wallet contains any solvable but not watched scripts, a different and new wallet will be created which contains those scripts. The migration process will create a backup of the wallet before migrating. This backup file will be named <wallet name>-<timestamp>.legacy.bak and can be found in the directory for this wallet. In the event of an incorrect migration, the backup can be restored with the "Restore Wallet" functionality. - 445 + 446 - + Migrate Wallet - 468 + 463 - + Migrating Wallet <b>%1</b>… - 468 + 463 - + The wallet '%1' was migrated successfully. - 474 + 469 - + Watchonly scripts have been migrated to a new wallet named '%1'. - 476 + 471 - + Solvable but not watched scripts have been migrated to a new wallet named '%1'. - 479 + 474 - + Migration failed - 493 + 488 - + Migration Successful - 495 + 490 - + Open wallet failed - 334 + 335 - + Open wallet warning - 336 - - - default wallet - 346 + 337 - + Open Wallet - 350 + 351 Title of window indicating the progress of opening of a wallet. - + Opening Wallet <b>%1</b>… - 353 + 354 Descriptive text of the open wallet progress window which indicates to the user which wallet is currently being opened. - + Restore Wallet - 403 + 404 Title of progress window which is displayed when wallets are being restored. - + Restoring Wallet <b>%1</b>… - 406 + 407 Descriptive text of the restore wallets progress window which indicates to the user that wallets are currently being restored. - + Restore wallet failed - 425 + 426 Title of message box which is displayed when the wallet could not be restored. - + Restore wallet warning - 428 + 429 Title of message box which is displayed when the wallet is restored with some warning. - + Restore wallet message - 431 + 432 Title of message box which is displayed when the wallet is successfully restored. - + Close wallet 85 - + Are you sure you wish to close the wallet <i>%1</i>? 86 - + Closing the wallet for too long can result in having to resync the entire chain if pruning is enabled. 87 - + Close all wallets 100 - + Are you sure you wish to close all wallets? 101 @@ -1128,59 +1121,59 @@ The migration process will create a backup of the wallet before migrating. This - + Create Wallet 14 - + You are one step away from creating your new wallet! 29 - + Please provide a name and, if desired, enable any advanced options 42 - + Wallet Name 67 - + Wallet 80 - + Encrypt the wallet. The wallet will be encrypted with a passphrase of your choice. 89 - + Encrypt Wallet 92 - + Advanced Options 118 - + Disable private keys for this wallet. Wallets with private keys disabled will have no private keys and cannot have an HD seed or imported private keys. This is ideal for watch-only wallets. 139 - + Disable Private Keys 142 - + Make a blank wallet. Blank wallets do not initially have private keys or scripts. Private keys and addresses can be imported, or an HD seed can be set, at a later time. 149 - + Make Blank Wallet 152 - + Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first. 159 - + External signer 162 @@ -1188,11 +1181,11 @@ The migration process will create a backup of the wallet before migrating. This - + Create 20 - + Compiled without external signing support (required for external signing) 88 "External signing" means using devices such as hardware wallets. @@ -1201,23 +1194,23 @@ The migration process will create a backup of the wallet before migrating. This - + Edit Address 14 - + &Label 25 - + The label associated with this address list entry 35 - + The address associated with this address list entry. This can only be modified for sending addresses. 52 - + &Address 42 @@ -1225,35 +1218,35 @@ The migration process will create a backup of the wallet before migrating. This - + New sending address 29 - + Edit receiving address 32 - + Edit sending address 36 - + The entered address "%1" is not a valid Bitcoin address. 113 - + Address "%1" already exists as a receiving address with label "%2" and so cannot be added as a sending address. 146 - + The entered address "%1" is already in the address book with label "%2". 151 - + Could not unlock wallet. 123 - + New key generation failed. 128 @@ -1261,94 +1254,94 @@ The migration process will create a backup of the wallet before migrating. This - + A new data directory will be created. 73 - + name 95 - + Directory already exists. Add %1 if you intend to create a new directory here. 97 - + Path already exists, and is not a directory. 100 - + Cannot create data directory here. 107 - + Bitcoin 137 301 - + %n GB of space available - + %n GB of space available 303 - + (of %n GB needed) - + (of %n GB needed) 306 - + (%n GB needed for full chain) - + (%n GB needed for full chain) - + Choose data directory 323 - + At least %1 GB of data will be stored in this directory, and it will grow over time. 378 - + Approximately %1 GB of data will be stored in this directory. 381 390 Explanatory text on the capability of the current prune target. - + (sufficient to restore backups %n day(s) old) - + (sufficient to restore backups %n day(s) old) - + %1 will download and store a copy of the Bitcoin block chain. 392 - + The wallet will also be stored in this directory. 394 - + Error: Specified data directory "%1" cannot be created. 250 - + Error 280 @@ -1356,25 +1349,25 @@ The migration process will create a backup of the wallet before migrating. This - + version 36 - + About %1 40 - + Command-line options 58 - + %1 is shutting down… 144 - + Do not shut down the computer until this window disappears. 145 @@ -1382,47 +1375,47 @@ The migration process will create a backup of the wallet before migrating. This - + Welcome 14 - + Welcome to %1. 23 - + As this is the first time the program is launched, you can choose where %1 will store its data. 49 - + Limit block chain storage to 238 - + Reverting this setting requires re-downloading the entire blockchain. It is faster to download the full chain first and prune it later. Disables some advanced features. 241 - + GB 248 - + This initial synchronisation is very demanding, and may expose hardware problems with your computer that had previously gone unnoticed. Each time you run %1, it will continue downloading where it left off. 216 - + When you click OK, %1 will begin to download and process the full %4 block chain (%2 GB) starting with the earliest transactions in %3 when %4 initially launched. 206 - + If you have chosen to limit block chain storage (pruning), the historical data must still be downloaded and processed, but will be deleted afterward to keep your disk usage low. 226 - + Use the default data directory 66 - + Use a custom data directory: 73 @@ -1430,54 +1423,54 @@ The migration process will create a backup of the wallet before migrating. This - + Form 14 - + Recent transactions may not yet be visible, and therefore your wallet's balance might be incorrect. This information will be correct once your wallet has finished synchronizing with the bitcoin network, as detailed below. 133 - + Attempting to spend bitcoins that are affected by not-yet-displayed transactions will not be accepted by the network. 152 - + Number of blocks left 215 - + Unknown… 222 248 ../modaloverlay.cpp160 - + calculating… 292 312 - + Last block time 235 - + Progress 261 - + Progress increase per hour 285 - + Estimated time left until synced 305 - + Hide 342 - + Esc 345 @@ -1485,21 +1478,21 @@ The migration process will create a backup of the wallet before migrating. This - + %1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain. 34 - + Unknown. Syncing Headers (%1, %2%)… 166 - + Unknown. Pre-syncing Headers (%1, %2%)… 171 - + unknown 131 @@ -1507,15 +1500,15 @@ The migration process will create a backup of the wallet before migrating. This - + Open bitcoin URI 14 - + URI: 22 - + Paste address from clipboard 36 Tooltip text for button that allows you to paste an address that is in your clipboard. @@ -1524,302 +1517,302 @@ The migration process will create a backup of the wallet before migrating. This - + Options 14 - + &Main 27 - + Automatically start %1 after logging in to the system. 33 - + &Start %1 on system login 36 - + Enabling pruning significantly reduces the disk space required to store transactions. All blocks are still fully validated. Reverting this setting requires re-downloading the entire blockchain. 58 - + Size of &database cache 111 - + Number of script &verification threads 157 - + Full path to a %1 compatible script (e.g. C:\Downloads\hwi.exe or /Users/you/Downloads/hwi.py). Beware: malware can steal your coins! 289 - + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) 388 575 - + Shows if the supplied default SOCKS5 proxy is used to reach peers via this network type. 457 480 503 - + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Exit in the menu. 672 - + Font in the Overview tab: 779 - + Options set in this dialog are overridden by the command line: 824 - + Open the %1 configuration file from the working directory. 869 - + Open Configuration File 872 - + Reset all client options to default. 882 - + &Reset Options 885 - + &Network 315 - + Prune &block storage to 61 - + GB 71 - + Reverting this setting requires re-downloading the entire blockchain. 96 - + Maximum database cache size. A larger cache can contribute to faster sync, after which the benefit is less pronounced for most use cases. Lowering the cache size will reduce memory usage. Unused mempool memory is shared for this cache. 108 Tooltip text for Options window setting that sets the size of the database cache. Explains the corresponding effects of increasing/decreasing this value. - + MiB 127 - + Set the number of script verification threads. Negative values correspond to the number of cores you want to leave free to the system. 154 Tooltip text for Options window setting that sets the number of script verification threads. Explains that negative values mean to leave these many cores free to the system. - + (0 = auto, <0 = leave that many cores free) 170 - + This allows you or a third party tool to communicate with the node through command-line and JSON-RPC commands. 192 Tooltip text for Options window setting that enables the RPC server. - + Enable R&PC server 195 An Options window setting to enable the RPC server. - + W&allet 216 - + Whether to set subtract fee from amount as default or not. 222 Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default. - + Subtract &fee from amount by default 225 An Options window setting to set subtracting the fee from a sending amount as default. - + Expert 232 - + Enable coin &control features 241 - + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. 248 - + &Spend unconfirmed change 251 - + Enable &PSBT controls 258 An options window setting to enable PSBT controls. - + Whether to show PSBT controls. 261 Tooltip text for options window setting that enables PSBT controls. - + External Signer (e.g. hardware wallet) 271 - + &External signer script path 279 - + Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled. 321 - + Map port using &UPnP 324 - + Automatically open the Bitcoin client port on the router. This only works when your router supports NAT-PMP and it is enabled. The external port could be random. 331 - + Map port using NA&T-PMP 334 - + Accept connections from outside. 341 - + Allow incomin&g connections 344 - + Connect to the Bitcoin network through a SOCKS5 proxy. 351 - + &Connect through SOCKS5 proxy (default proxy): 354 - + Proxy &IP: 363 550 - + &Port: 395 582 - + Port of the proxy (e.g. 9050) 420 607 - + Used for reaching peers via: 444 - + IPv4 467 - + IPv6 490 - + Tor 513 - + &Window 643 - + Show the icon in the system tray. 649 - + &Show tray icon 652 - + Show only a tray icon after minimizing the window. 662 - + &Minimize to the tray instead of the taskbar 665 - + M&inimize on close 675 - + &Display 696 - + User Interface &language: 704 - + The user interface language can be set here. This setting will take effect after restarting %1. 717 - + &Unit to show amounts in: 728 - + Choose the default subdivision unit to show in the interface and when sending coins. 741 - + Third-party URLs (e.g. a block explorer) that appear in the transactions tab as context menu items. %s in the URL is replaced by transaction hash. Multiple URLs are separated by vertical bar |. 752 765 - + &Third-party transaction URLs 755 - + Whether to show coin control features or not. 238 - + Connect to the Bitcoin network through a separate SOCKS5 proxy for Tor onion services. 538 - + Use separate SOCKS&5 proxy to reach peers via Tor onion services: 541 - + &OK 965 - + &Cancel 978 @@ -1827,85 +1820,85 @@ The migration process will create a backup of the wallet before migrating. This - + Compiled without external signing support (required for external signing) 153 "External signing" means using devices such as hardware wallets. - + default 165 - + none 239 - + Confirm options reset 348 Window title text of pop-up window shown when the user has chosen to reset options. - + Client restart required to activate changes. 339 420 Text explaining that the settings changed will not come into effect until the client is restarted. - + Current settings will be backed up at "%1". 343 Text explaining to the user that the client's current settings will be backed up at a specific location. %1 is a stand-in argument for the backup location's path. - + Client will be shut down. Do you want to proceed? 346 Text asking the user to confirm if they would like to proceed with a client shutdown. - + Configuration options 366 Window title text of pop-up box that allows opening up of configuration file. - + The configuration file is used to specify advanced user options which override GUI settings. Additionally, any command-line options will override this configuration file. 369 Explanatory text about the priority order of instructions considered by client. The order from high to low being: command-line, configuration file, GUI settings. - + Continue 372 - + Cancel 373 - + Error 382 - + The configuration file could not be opened. 382 - + This change would require a client restart. 424 - + The supplied proxy address is invalid. 452 - + Embedded "%1" 61 - + Default system font "%1" 62 - + Custom… 63 @@ -1913,7 +1906,7 @@ The migration process will create a backup of the wallet before migrating. This - + Could not read setting "%1", %2. 228 @@ -1921,76 +1914,76 @@ The migration process will create a backup of the wallet before migrating. This - + Form 14 - + The displayed information may be out of date. Your wallet automatically synchronizes with the Bitcoin network after a connection is established, but this process has not completed yet. 76 411 - + Watch-only: 284 - + Available: 294 - + Your current spendable balance 304 - + Pending: 339 - + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance 139 - + Immature: 239 - + Mined balance that has not yet matured 210 - + Balances 60 - + Total: 200 - + Your current total balance 249 - + Your current balance in watch-only addresses 323 - + Spendable: 346 - + Recent transactions 395 - + Unconfirmed transactions to watch-only addresses 120 - + Mined balance in watch-only addresses that has not yet matured 158 - + Current total balance in watch-only addresses 268 @@ -1998,7 +1991,7 @@ The migration process will create a backup of the wallet before migrating. This - + Privacy mode activated for the Overview tab. To unmask the values, uncheck Settings->Mask values. 184 @@ -2006,27 +1999,27 @@ The migration process will create a backup of the wallet before migrating. This - + PSBT Operations 14 - + Sign Tx 86 - + Broadcast Tx 102 - + Copy to Clipboard 122 - + Save… 129 - + Close 136 @@ -2034,112 +2027,112 @@ The migration process will create a backup of the wallet before migrating. This - + Failed to load transaction: %1 64 - + Failed to sign transaction: %1 89 - + Cannot sign inputs while wallet is locked. 97 - + Could not sign any more inputs. 99 - + Signed %1 inputs, but more signatures are still required. 101 - + Signed transaction successfully. Transaction is ready to broadcast. 104 - + Unknown error processing transaction. 116 - + Transaction broadcast successfully! Transaction ID: %1 126 - + Transaction broadcast failed: %1 129 - + PSBT copied to clipboard. 138 - + Save Transaction Data 161 - + Partially Signed Transaction (Binary) 163 Expanded name of the binary PSBT file format. See: BIP 174. - + PSBT saved to disk. 170 - + Sends %1 to %2 187 - + own address 191 - + Unable to calculate transaction fee or total transaction amount. 199 - + Pays transaction fee: 201 - + Total Amount 213 - + or 216 - + Transaction has %1 unsigned inputs. 222 - + Transaction is missing some information about inputs. 268 - + Transaction still needs signature(s). 272 - + (But no wallet is loaded.) 275 - + (But this wallet cannot sign transactions.) 278 - + (But this wallet does not have the right keys.) 281 - + Transaction is fully signed and ready for broadcast. 289 - + Transaction status is unknown. 293 @@ -2147,37 +2140,37 @@ The migration process will create a backup of the wallet before migrating. This - + Payment request error 145 - + Cannot start bitcoin: click-to-pay handler 146 - + URI handling 194 210 216 223 - + 'bitcoin://' is not a valid URI. Use 'bitcoin:' instead. 194 - + Cannot process payment request because BIP70 is not supported. Due to widespread security flaws in BIP70 it's strongly recommended that any merchant instructions to switch wallets be ignored. If you are receiving this error you should request the merchant provide a BIP21 compatible URI. 211 234 - + URI cannot be parsed! This can be caused by an invalid Bitcoin address or malformed URI parameters. 224 - + Payment request file handling 233 @@ -2185,52 +2178,52 @@ If you are receiving this error you should request the merchant provide a BIP21 - + User Agent 112 Title of Peers Table column which contains the peer's User Agent string. - + Ping 103 Title of Peers Table column which indicates the current latency of the connection with the peer. - + Peer 85 Title of Peers Table column which contains a unique number used to identify a connection. - + Age 88 Title of Peers Table column which indicates the duration (length of time) since the peer connection started. - + Direction 94 Title of Peers Table column which indicates the direction the peer connection was initiated from. - + Sent 106 Title of Peers Table column which indicates the total amount of network information we have sent to the peer. - + Received 109 Title of Peers Table column which indicates the total amount of network information we have received from the peer. - + Address 91 Title of Peers Table column which contains the IP/Onion/I2P address of the connected peer. - + Type 97 Title of Peers Table column which describes the type of peer connection. The "type" describes why the connection exists. - + Network 100 Title of Peers Table column which states the network the peer connected through. @@ -2239,12 +2232,12 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Inbound 77 An Inbound Connection from a Peer. - + Outbound 79 An Outbound Connection to a Peer. @@ -2253,7 +2246,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Amount 197 @@ -2261,223 +2254,227 @@ If you are receiving this error you should request the merchant provide a BIP21 - + Enter a Bitcoin address (e.g. %1) - 139 + 138 - + Ctrl+W - 427 + 433 - + Unroutable - 684 + 690 - + IPv4 - 686 + 692 network name Name of IPv4 network in peer info - + IPv6 - 688 + 694 network name Name of IPv6 network in peer info - + Onion - 690 + 696 network name Name of Tor network in peer info - + I2P - 692 + 698 network name Name of I2P network in peer info - + CJDNS - 694 + 700 network name Name of CJDNS network in peer info - + Inbound - 708 + 714 An inbound connection from a peer. An inbound connection is a connection initiated by a peer. - + Outbound - 711 + 717 An outbound connection to a peer. An outbound connection is a connection initiated by us. - + Full Relay - 716 + 722 Peer connection type that relays all network information. - + Block Relay - 719 + 725 Peer connection type that relays network information about blocks and not transactions or addresses. - + Manual - 721 + 727 Peer connection type established manually through one of several methods. - + Feeler - 723 + 729 Short-lived peer connection type that tests the aliveness of known addresses. - + Address Fetch - 725 + 731 Short-lived peer connection type that solicits known addresses from a peer. - + %1 d - 737 - 749 + 743 + 755 - + %1 h - 738 - 750 + 744 + 756 - + %1 m - 739 - 751 + 745 + 757 - + %1 s - 741 - 752 - 778 + 747 + 758 + 784 - + None - 766 + 772 - + N/A - 772 + 778 - + %1 ms - 773 + 779 - 791 - + 797 + %n second(s) - + %n second(s) - 795 - + 801 + %n minute(s) - + %n minute(s) - 799 - + 805 + %n hour(s) - + %n hour(s) - 803 - + 809 + %n day(s) - + %n day(s) - 807 813 - + 819 + %n week(s) - + %n week(s) - + %1 and %2 - 813 + 819 - 813 - + 819 + %n year(s) - + %n year(s) - + %1 B - 821 + 827 - + %1 kB - 823 - ../rpcconsole.cpp1008 + 829 + ../rpcconsole.cpp1021 - + %1 MB - 825 - ../rpcconsole.cpp1009 - ../rpcconsole.cpp1010 + 831 + ../rpcconsole.cpp1022 + ../rpcconsole.cpp1023 - + %1 GB - 827 + 833 + + + default wallet + 1013 - + &Save Image… 28 - + &Copy Image 29 - + Resulting URI too long, try to reduce the text for label / message. 40 - + Error encoding URI into QR Code. 47 - + QR code support not available. 88 - + Save QR Code 118 - + PNG Image 121 Expanded name of the PNG file format. See: https://en.wikipedia.org/wiki/Portable_Network_Graphics. @@ -2486,7 +2483,7 @@ If you are receiving this error you should request the merchant provide a BIP21 - + N/A 75 101 @@ -2495,500 +2492,520 @@ If you are receiving this error you should request the merchant provide a BIP21 182 218 241 - 277 - 300 - 336 - 359 - 1051 - 1077 - 1103 - 1129 - 1155 - 1178 - 1201 - 1224 - 1253 - 1279 - 1302 - 1325 - 1348 - 1371 - 1397 - 1423 - 1446 - 1469 - 1492 - 1515 - 1538 - 1564 - 1587 - 1610 - 1636 - 1662 - 1688 - 1714 + 312 + 335 + 371 + 394 + 1161 + 1187 + 1213 + 1239 + 1265 + 1288 + 1311 + 1334 + 1363 + 1389 + 1412 + 1435 + 1458 + 1481 + 1507 + 1533 + 1556 + 1579 + 1602 + 1625 + 1648 + 1674 + 1697 + 1720 + 1746 + 1772 + 1798 + 1824 ../rpcconsole.h145 - + Client version 65 - + &Information 43 - + General 58 - + Datadir 114 - + To specify a non-default location of the data directory use the '%1' option. 124 - + Blocksdir 143 - + To specify a non-default location of the blocks directory use the '%1' option. 153 - + Startup time 172 - + Network 201 - 1145 + 1255 - + Name 208 - + Number of connections 231 + + Local Addresses + 254 + - Block chain - 260 + Network addresses that your Bitcoin node is currently using to communicate with other nodes. + 282 - Memory Pool - 319 + Block chain + 295 - Current number of transactions - 326 + Memory Pool + 354 - Memory usage - 349 + Current number of transactions + 361 - Wallet: - 443 + Memory usage + 384 - (none) - 454 + Wallet: + 478 - &Reset - 665 + (none) + 489 - Received - 745 - 1505 + &Reset + 700 - Sent - 825 - 1482 + Received + 780 + 1615 - &Peers - 866 + Sent + 860 + 1592 - Banned peers - 942 + &Peers + 901 - Select a peer to view detailed information. - 1010 - ../rpcconsole.cpp1176 + Banned peers + 977 - The transport layer version: %1 - 1090 + Select a peer to view detailed information. + 1053 + ../rpcconsole.cpp1189 - Transport - 1093 + Hide Peers Detail + 1105 - Session ID - 1119 + Ctrl+X + 1126 - Version - 1168 + The transport layer version: %1 + 1200 - Whether we relay transactions to this peer. - 1240 + Transport + 1203 - Transaction Relay - 1243 + Session ID + 1229 - Starting Block - 1292 + Version + 1278 - Synced Headers - 1315 + Whether we relay transactions to this peer. + 1350 - Synced Blocks - 1338 + Transaction Relay + 1353 - Last Transaction - 1413 + Starting Block + 1402 - The mapped Autonomous System used for diversifying peer selection. - 1623 + Synced Headers + 1425 - Mapped AS - 1626 + Synced Blocks + 1448 + Last Transaction + 1523 + + + The mapped Autonomous System used for diversifying peer selection. + 1733 + + + Mapped AS + 1736 + + Whether we relay addresses to this peer. - 1649 + 1759 Tooltip text for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - + Address Relay - 1652 + 1762 Text title for the Address Relay field in the peer details area, which displays whether we relay addresses to this peer (Yes/No). - + The total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - 1675 + 1785 Tooltip text for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - + The total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - 1701 + 1811 Tooltip text for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - + Addresses Processed - 1678 + 1788 Text title for the Addresses Processed field in the peer details area, which displays the total number of addresses received from this peer that were processed (excludes addresses that were dropped due to rate-limiting). - + Addresses Rate-Limited - 1704 + 1814 Text title for the Addresses Rate-Limited field in the peer details area, which displays the total number of addresses received from this peer that were dropped (not processed) due to rate-limiting. - + User Agent 88 - 1191 + 1301 - + Node window 14 - + Current block height - 267 + 302 - + Open the %1 debug log file from the current data directory. This can take a few seconds for large log files. - 397 + 432 - + Decrease font size - 475 + 510 - + Increase font size - 495 + 530 - + Permissions - 1041 + 1151 - + The direction and type of peer connection: %1 - 1064 + 1174 - + Direction/Type - 1067 + 1177 - + The BIP324 session ID string in hex. - 1116 + 1226 - + The network protocol this peer is connected through: IPv4, IPv6, Onion, I2P, or CJDNS. - 1142 + 1252 - + Services - 1214 + 1324 - + High bandwidth BIP152 compact block relay: %1 - 1266 + 1376 - + High Bandwidth - 1269 + 1379 - + Connection Time - 1361 + 1471 - + Elapsed time since a novel block passing initial validity checks was received from this peer. - 1384 + 1494 - + Last Block - 1387 + 1497 - + Elapsed time since a novel transaction accepted into our mempool was received from this peer. - 1410 + 1520 Tooltip text for the Last Transaction field in the peer details area. - + Last Send - 1436 + 1546 - + Last Receive - 1459 + 1569 - + Ping Time - 1528 + 1638 - + The duration of a currently outstanding ping. - 1551 + 1661 - + Ping Wait - 1554 + 1664 - + Min Ping - 1577 + 1687 - + Time Offset - 1600 + 1710 - + Last block time - 290 + 325 - + &Open - 400 + 435 - + &Console - 426 + 461 - + &Network Traffic - 613 + 648 - + Totals - 681 + 716 - + Debug log file - 390 + 425 - + Clear console - 515 + 550 - + In: - 972 + 973 - + Out: - 973 + 974 - + Inbound: initiated by peer 497 Explanatory text for an inbound peer connection. - + Outbound Full Relay: default 501 Explanatory text for an outbound peer connection that relays all network information. This is the default behavior for outbound connections. - + Outbound Block Relay: does not relay transactions or addresses 504 Explanatory text for an outbound peer connection that relays network information about blocks and not transactions or addresses. - + Outbound Manual: added using RPC %1 or %2/%3 configuration options 509 Explanatory text for an outbound peer connection that was established manually through one of several methods. The numbered arguments are stand-ins for the methods available to establish manual connections. - + Outbound Feeler: short-lived, for testing addresses 515 Explanatory text for a short-lived outbound peer connection that is used to test the aliveness of known addresses. - + Outbound Address Fetch: short-lived, for soliciting addresses 518 Explanatory text for a short-lived outbound peer connection that is used to request addresses from a peer. - + detecting: peer could be v1 or v2 523 Explanatory text for "detecting" transport type. - + v1: unencrypted, plaintext transport protocol 525 Explanatory text for v1 transport type. - + v2: BIP324 encrypted transport protocol 527 Explanatory text for v2 transport type. - + we selected the peer for high bandwidth relay 531 - + the peer selected us for high bandwidth relay 532 - + no high bandwidth relay selected 533 - + Ctrl++ 546 Main shortcut to increase the RPC console font size. - + Ctrl+= 548 Secondary shortcut to increase the RPC console font size. - + Ctrl+- 552 Main shortcut to decrease the RPC console font size. - + Ctrl+_ 554 Secondary shortcut to decrease the RPC console font size. - + &Copy address - 707 + 708 Context menu action to copy the address of a peer. - + &Disconnect - 711 + 712 - + 1 &hour - 712 + 713 - + 1 d&ay - 713 + 714 - + 1 &week - 714 + 715 - + 1 &year - 715 + 716 - + &Copy IP/Netmask - 741 + 742 Context menu action to copy the IP/Netmask of a banned peer. IP/Netmask is the combination of a peer's IP address and its Netmask. For IP address, see: https://en.wikipedia.org/wiki/IP_address. - + &Unban - 745 + 746 - + Network activity disabled - 976 + 977 - + + None + 990 + + Executing command without any wallet - 1056 + 1069 - + Ctrl+I - 1381 + 1395 - + Ctrl+T - 1382 + 1396 - + Ctrl+N - 1383 + 1397 - + Ctrl+P - 1384 + 1398 - + Node window - [%1] - 1402 + 1416 - + Executing command using "%1" wallet - 1054 + 1067 - + Welcome to the %1 RPC console. Use up and down arrows to navigate history, and %2 to clear screen. Use %3 and %4 to increase or decrease the font size. @@ -2996,51 +3013,51 @@ Type %5 for an overview of available commands. For more information on using this console, type %6. %7WARNING: Scammers have been active, telling users to type commands here, stealing their wallet contents. Do not use this console without fully understanding the ramifications of a command.%8 - 905 + 906 RPC console welcome message. Placeholders %7 and %8 are style tags for the warning content, and they are not space separated from the rest of the text intentionally. - + Executing… - 1064 + 1077 A console message indicating an entered command is currently being executed. - + (peer: %1) - 1182 + 1195 - + via %1 - 1184 + 1197 - + Yes 144 - + No 144 - + To 144 - + From 144 - + Ban for 145 - + Never 187 - + Unknown 145 @@ -3048,72 +3065,72 @@ For more information on using this console, type %6. - + &Amount: 37 - + &Label: 83 - + &Message: 53 - + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Bitcoin network. 50 - + An optional label to associate with the new receiving address. 80 - + Use this form to request payments. All fields are <b>optional</b>. 73 - + An optional amount to request. Leave this empty or zero to not request a specific amount. 34 193 - + An optional label to associate with the new receiving address (used by you to identify an invoice). It is also attached to the payment request. 66 - + An optional message that is attached to the payment request and may be displayed to the sender. 96 - + &Create new receiving address 111 - + Clear all fields of the form. 134 - + Clear 137 - + Requested payments history 273 - + Show the selected request (does the same as double clicking an entry) 298 - + Show 301 - + Remove the selected entries from the list 318 - + Remove 321 @@ -3121,63 +3138,63 @@ For more information on using this console, type %6. - + Copy &URI 46 - + &Copy address 47 - + Copy &label 48 - + Copy &message 49 - + Copy &amount 50 - + Base58 (Legacy) 96 - + Not recommended due to higher fees and less protection against typos. 96 - + Base58 (P2SH-SegWit) 97 - + Generates an address compatible with older wallets. 97 - + Bech32 (SegWit) 98 - + Generates a native segwit address (BIP-173). Some old wallets don't support it. 98 - + Bech32m (Taproot) 100 - + Bech32m (BIP-350) is an upgrade to Bech32, wallet support is still limited. 100 - + Could not unlock wallet. 175 - + Could not generate new %1 address 180 @@ -3185,51 +3202,51 @@ For more information on using this console, type %6. - + Request payment to … 14 - + Address: 90 - + Amount: 119 - + Label: 148 - + Message: 180 - + Wallet: 212 - + Copy &URI 240 - + Copy &Address 250 - + &Verify 260 - + Verify this address on e.g. a hardware wallet screen 263 - + &Save Image… 273 - + Payment information 39 @@ -3237,7 +3254,7 @@ For more information on using this console, type %6. - + Request payment to %1 46 @@ -3245,31 +3262,31 @@ For more information on using this console, type %6. - + Date 34 - + Label 34 - + Message 34 - + (no label) 72 - + (no message) 81 - + (no amount requested) 89 - + Requested 132 @@ -3277,150 +3294,150 @@ For more information on using this console, type %6. - + Send Coins 14 ../sendcoinsdialog.cpp763 - + Coin Control Features 90 - + automatically selected 120 - + Insufficient funds! 139 - + Quantity: 231 - + Bytes: 266 - + Amount: 314 - + Fee: 365 - + After Fee: 419 - + Change: 451 - + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. 495 - + Custom change address 498 - + Transaction Fee: 704 - + Using the fallbackfee can result in sending a transaction that will take several hours or days (or never) to confirm. Consider choosing your fee manually or wait until you have validated the complete chain. 742 - + Warning: Fee estimation is currently not possible. 751 - + per kilobyte 833 - + Hide 780 - + Recommended: 892 - + Custom: 922 - + Send to multiple recipients at once 1137 - + Add &Recipient 1140 - + Clear all fields of the form. 1120 - + Inputs… 110 - + Choose… 718 - + Hide transaction fee settings 777 - + Specify a custom fee per kB (1,000 bytes) of the transaction's virtual size. Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 satoshis per kvB" for a transaction size of 500 virtual bytes (half of 1 kvB) would ultimately yield a fee of only 50 satoshis. 828 - + When there is less transaction volume than space in the blocks, miners as well as relaying nodes may enforce a minimum fee. Paying only this minimum fee is just fine, but be aware that this can result in a never confirming transaction once there is more demand for bitcoin transactions than the network can process. 863 - + A too low fee might result in a never confirming transaction (read the tooltip) 866 - + (Smart fee not initialized yet. This usually takes a few blocks…) 971 - + Confirmation time target: 997 - + Enable Replace-By-Fee 1055 - + With Replace-By-Fee (BIP-125) you can increase a transaction's fee after it is sent. Without this, a higher fee may be recommended to compensate for increased transaction delay risk. 1058 - + Clear &All 1123 - + Balance: 1178 - + Confirm the send action 1094 - + S&end 1097 @@ -3428,231 +3445,231 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Copy quantity 95 - + Copy amount 96 - + Copy fee 97 - + Copy after fee 98 - + Copy bytes 99 - + Copy change 100 - + %1 (%2 blocks) 172 - + Sign on device 202 "device" usually means a hardware wallet. - + Connect your hardware wallet first. 205 - + Set external signer script path in Options -> Wallet 209 "External signer" means using devices such as hardware wallets. - + Cr&eate Unsigned 212 - + Creates a Partially Signed Bitcoin Transaction (PSBT) for use with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. 213 - + %1 to '%2' 316 - + %1 to %2 321 - + To review recipient list click "Show Details…" 388 - + Sign failed 451 - + External signer not found 456 "External signer" means using devices such as hardware wallets. - + External signer failure 462 "External signer" means using devices such as hardware wallets. - + Save Transaction Data 426 - + Partially Signed Transaction (Binary) 428 Expanded name of the binary PSBT file format. See: BIP 174. - + PSBT saved 436 Popup message when a PSBT has been saved to a file - + External balance: 709 - + or 384 - + You can increase the fee later (signals Replace-By-Fee, BIP-125). 366 - + Please, review your transaction proposal. This will produce a Partially Signed Bitcoin Transaction (PSBT) which you can save or copy and then sign with e.g. an offline %1 wallet, or a PSBT-compatible hardware wallet. 335 Text to inform a user attempting to create a transaction of their current options. At this stage, a user can only create a PSBT. This string is displayed when private keys are disabled and an external signer is not available. - + %1 from wallet '%2' 305 - + Do you want to create this transaction? 329 Message displayed when attempting to create a transaction. Cautionary text to prompt the user to verify that the displayed transaction details represent the transaction the user intends to create. - + Please, review your transaction. You can create and send this transaction or create a Partially Signed Bitcoin Transaction (PSBT), which you can save or copy and then sign with, e.g., an offline %1 wallet, or a PSBT-compatible hardware wallet. 340 Text to inform a user attempting to create a transaction of their current options. At this stage, a user can send their transaction or create a PSBT. This string is displayed when both private keys and PSBT controls are enabled. - + Please, review your transaction. 343 Text to prompt a user to review the details of the transaction they are attempting to send. - + Transaction fee 351 - + %1 kvB 356 PSBT transaction creation When reviewing a newly created PSBT (via Send flow), the transaction fee is shown, with "virtual size" of the transaction displayed for context - + Not signalling Replace-By-Fee, BIP-125. 368 - + Total Amount 381 - + Unsigned Transaction 405 PSBT copied Caption of "PSBT has been copied" messagebox - + The PSBT has been copied to the clipboard. You can also save it. 406 - + PSBT saved to disk 436 - + Confirm send coins 485 - + Watch-only balance: 712 - + The recipient address is not valid. Please recheck. 736 - + The amount to pay must be larger than 0. 739 - + The amount exceeds your balance. 742 - + The total exceeds your balance when the %1 transaction fee is included. 745 - + Duplicate address found: addresses should only be used once each. 748 - + Transaction creation failed! 751 - + A fee higher than %1 is considered an absurdly high fee. 755 - + %1/kvB 834 869 883 - + Estimated to begin confirmation within %n block(s). - + Estimated to begin confirmation within %n block(s). - + Warning: Invalid Bitcoin address 978 - + Warning: Unknown change address 983 - + Confirm custom change address 986 - + The address you selected for change is not part of this wallet. Any or all funds in your wallet may be sent to this address. Are you sure? 986 - + (no label) 1007 @@ -3660,68 +3677,68 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + A&mount: 151 - + Pay &To: 35 - + &Label: 128 - + Choose previously used address 60 - + The Bitcoin address to send the payment to 53 - + Alt+A 76 - + Paste address from clipboard 83 - + Alt+P 99 - + Remove this entry 106 - + The amount to send in the selected unit 166 - + The fee will be deducted from the amount being sent. The recipient will receive less bitcoins than you enter in the amount field. If multiple recipients are selected, the fee is split equally. 173 - + S&ubtract fee from amount 176 - + Use available balance 183 - + Message: 192 - + Enter a label for this address to add it to the list of used addresses 141 144 - + A message that was attached to the bitcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Bitcoin network. 202 @@ -3729,11 +3746,11 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Send 146 - + Create Unsigned 148 @@ -3741,105 +3758,105 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Signatures - Sign / Verify a Message 14 - + &Sign Message 27 - + You can sign messages/agreements with your legacy (P2PKH) addresses to prove you can receive bitcoins sent to them. Be careful not to sign anything vague or random, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. 33 - + The Bitcoin address to sign the message with 51 - + Choose previously used address 58 274 - + Alt+A 68 284 - + Paste address from clipboard 78 - + Alt+P 88 - + Enter the message you want to sign here 100 103 - + Signature 110 - + Copy the current signature to the system clipboard 140 - + Sign the message to prove you own this Bitcoin address 161 - + Sign &Message 164 - + Reset all sign message fields 178 - + Clear &All 181 338 - + &Verify Message 240 - + Enter the receiver's address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Note that this only proves the signing party receives with the address, it cannot prove sendership of any transaction! 246 - + The Bitcoin address the message was signed with 267 - + The signed message to verify 296 299 - + The signature given when the message was signed 306 309 - + Verify the message to ensure it was signed with the specified Bitcoin address 318 - + Verify &Message 321 - + Reset all verify message fields 335 - + Click "Sign Message" to generate signature 125 @@ -3847,59 +3864,59 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + The entered address is invalid. 120 219 - + Please check the address and try again. 120 220 - + The entered address does not refer to a legacy (P2PKH) key. Message signing for SegWit and other non-P2PKH address types is not supported in this version of %1. Please check the address and try again. 127 225 - + Wallet unlock was cancelled. 135 - + No error 146 - + Private key for the entered address is not available. 149 - + Message signing failed. 152 - + Message signed. 164 - + The signature could not be decoded. 230 - + Please check the signature and try again. 231 238 - + The signature did not match the message digest. 237 - + Message verification failed. 243 - + Message verified. 214 @@ -3907,11 +3924,11 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + (press q to shutdown and continue later) 175 - + press q to shutdown 176 @@ -3919,7 +3936,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + kB/s 74 @@ -3927,84 +3944,84 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + conflicted with a transaction with %1 confirmations 40 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that conflicts with a confirmed transaction. - + 0/unconfirmed, in memory pool 47 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is in the memory pool. - + 0/unconfirmed, not in memory pool 52 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an unconfirmed transaction that is not in the memory pool. - + abandoned 58 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents an abandoned transaction. - + %1/unconfirmed 66 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in at least one block, but less than 6 blocks. - + %1 confirmations 71 Text explaining the current status of a transaction, shown in the status field of the details window for this transaction. This status represents a transaction confirmed in 6 or more blocks. - + Status 121 - + Date 124 - + Source 131 - + Generated 131 - + From 136 150 222 - + unknown 150 - + To 151 171 241 - + own address 153 248 - + watch-only 153 222 250 - + label 155 - + Credit 191 203 @@ -4014,98 +4031,98 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 193 - + matures in %n more block(s) - + matures in %n more block(s) - + not accepted 195 - + Debit 255 281 344 - + Total debit 265 - + Total credit 266 - + Transaction fee 271 - + Net amount 293 - + Message 299 311 - + Comment 301 - + Transaction ID 303 - + Transaction total size 304 - + Transaction virtual size 305 - + Output index 306 - + %1 (Certificate was not verified) 322 - + Merchant 325 - + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. 333 - + Debug information 341 - + Transaction 349 - + Inputs 352 - + Amount 371 - + true 372 373 - + false 372 373 @@ -4114,7 +4131,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + This pane shows a detailed description of the transaction 20 @@ -4122,7 +4139,7 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Details for %1 18 @@ -4130,95 +4147,95 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + Date 258 - + Type 258 - + Label 258 - + Unconfirmed 318 - + Abandoned 321 - + Confirming (%1 of %2 recommended confirmations) 324 - + Confirmed (%1 confirmations) 327 - + Conflicted 330 - + Immature (%1 confirmations, will be available after %2) 333 - + Generated but not accepted 336 - + Received with 375 - + Received from 377 - + Sent to 380 - + Mined 382 - + watch-only 410 - + (n/a) 424 - + (no label) 629 - + Transaction status. Hover over this field to show number of confirmations. 668 - + Date and time that the transaction was received. 670 - + Type of transaction. 672 - + Whether or not a watch-only address is involved in this transaction. 674 - + User-defined intent/purpose of the transaction. 676 - + Amount removed from or added to balance. 678 @@ -4226,162 +4243,162 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + All 73 89 - + Today 74 - + This week 75 - + This month 76 - + Last month 77 - + This year 78 - + Received with 90 - + Sent to 92 - + Mined 94 - + Other 95 - + Enter address, transaction id, or label to search 100 - + Min amount 104 - + Range… 79 - + &Copy address 168 - + Copy &label 169 - + Copy &amount 170 - + Copy transaction &ID 171 - + Copy &raw transaction 172 - + Copy full transaction &details 173 - + &Show transaction details 174 - + Increase transaction &fee 176 - + A&bandon transaction 179 - + &Edit address label 180 - + Show in %1 239 Transactions table context menu action to show the selected transaction in a third-party block explorer. %1 is a stand-in argument for the URL of the explorer. - + Export Transaction History 358 - + Comma separated file 361 Expanded name of the CSV file format. See: https://en.wikipedia.org/wiki/Comma-separated_values. - + Confirmed 370 - + Watch-only 372 - + Date 373 - + Type 374 - + Label 375 - + Address 376 - + ID 378 - + Exporting Failed 381 - + There was an error trying to save the transaction history to %1. 381 - + Exporting Successful 385 - + The transaction history was successfully saved to %1. 385 - + Range: 558 - + to 566 @@ -4389,39 +4406,39 @@ Note: Since the fee is calculated on a per-byte basis, a fee rate of "100 - + No wallet has been loaded. Go to File > Open Wallet to load a wallet. - OR - 45 - + Create a new wallet 50 - + Error 201 211 229 - + Unable to decode PSBT from clipboard (invalid base64) 201 - + Load Transaction Data 207 - + Partially Signed Transaction (*.psbt) 208 - + PSBT file must be smaller than 100 MiB 211 - + Unable to decode PSBT 229 @@ -4429,117 +4446,113 @@ Go to File > Open Wallet to load a wallet. - + Send Coins 224 237 - + Fee bump error 491 540 560 565 - + Increasing transaction fee failed 491 - + Do you want to increase the fee? 498 Asks a user if they would like to manually increase the fee of a transaction that has already been created. - + Current fee: 502 - + Increase: 506 - + New fee: 510 - + Warning: This may pay the additional fee by reducing change outputs or adding inputs, when necessary. It may add a new change output if one does not already exist. These changes may potentially leak privacy. 518 - + Confirm fee bump 523 - + Can't draft transaction. 540 - + PSBT copied 547 - + Fee-bump PSBT copied to clipboard 547 - + Can't sign transaction. 560 - + Could not commit transaction 565 - + Signer error 578 - + Can't display address 581 - - default wallet - 598 - - + &Export 50 - + Export the data in the current tab to a file 51 - + Backup Wallet 214 - + Wallet Data 216 Name of the wallet data file format. - + Backup Failed 222 - + There was an error trying to save the wallet data to %1. 222 - + Backup Successful 226 - + The wallet data was successfully saved to %1. 226 - + Cancel 263 @@ -4547,1015 +4560,1011 @@ Go to File > Open Wallet to load a wallet. - + The %s developers 12 - + %s corrupt. Try using the wallet tool bitcoin-wallet to salvage or restoring a backup. 13 - + %s failed to validate the -assumeutxo snapshot state. This indicates a hardware problem, or a bug in the software, or a bad software modification that allowed an invalid snapshot to be loaded. As a result of this, the node will shut down and stop using any state that was built on the snapshot, resetting the chain height from %d to %d. On the next restart, the node will resume syncing from %d without using any snapshot data. Please report this incident to %s, including how you obtained the snapshot. The invalid snapshot chainstate will be left on disk in case it is helpful in diagnosing the issue that caused this error. 16 - + %s request to listen on port %u. This port is considered "bad" and thus it is unlikely that any peer will connect to it. See doc/p2p-bad-ports.md for details and a full list. 28 - + Cannot downgrade wallet from version %i to version %i. Wallet version unchanged. - 35 + 32 - + Cannot obtain a lock on data directory %s. %s is probably already running. - 38 + 35 - + Cannot upgrade a non HD split wallet from version %i to version %i without upgrading to support pre-split keypool. Please use version %i or no version specified. - 43 + 40 - + Disk space for %s may not accommodate the block files. Approximately %u GB of data will be stored in this directory. - 47 + 44 - + Distributed under the MIT software license, see the accompanying file %s or %s - 50 + 47 - + Error loading wallet. Wallet requires blocks to be downloaded, and software does not currently support loading wallets while blocks are being downloaded out of order when using assumeutxo snapshots. Wallet should be able to load successfully after node sync reaches height %s - 56 + 53 - + Error reading %s! Transaction data may be missing or incorrect. Rescanning wallet. - 64 + 61 - + Error: Dumpfile format record is incorrect. Got "%s", expected "format". - 70 + 67 - + Error: Dumpfile identifier record is incorrect. Got "%s", expected "%s". - 72 + 69 - + Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s - 74 + 71 - + Error: Legacy wallets only support the "legacy", "p2sh-segwit", and "bech32" address types - 80 + 77 - + Error: Unable to produce descriptors for this legacy wallet. Make sure to provide the wallet's passphrase if it is encrypted. - 86 + 83 - + File %s already exists. If you are sure this is what you want, move it out of the way first. - 101 + 98 - + Invalid or corrupt peers.dat (%s). If you believe this is a bug, please report it to %s. As a workaround, you can move the file (%s) out of the way (rename, move, or delete) to have a new one created on the next start. - 115 + 112 - + More than one onion bind address is provided. Using %s for the automatically created Tor onion service. - 123 + 120 - + No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided. - 126 + 123 - + No dump file provided. To use dump, -dumpfile=<filename> must be provided. - 129 + 126 - + No wallet file format provided. To use createfromdump, -format=<format> must be provided. - 131 + 128 - + Please contribute if you find %s useful. Visit %s for further information about the software. - 147 + 144 - + Prune configured below the minimum of %d MiB. Please use a higher number. - 150 + 147 - + Prune mode is incompatible with -reindex-chainstate. Use full -reindex instead. - 152 + 149 - + Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) - 155 + 152 - + Rename of '%s' -> '%s' failed. You should resolve this by manually moving or deleting the invalid snapshot directory %s, otherwise you will encounter the same error again on the next startup. - 161 + 158 - + SQLiteDatabase: Unknown sqlite wallet schema version %d. Only version %d is supported - 165 + 162 - + The block database contains a block which appears to be from the future. This may be due to your computer's date and time being set incorrectly. Only rebuild the block database if you are sure that your computer's date and time are correct - 168 + 165 - + The transaction amount is too small to send after the fee has been deducted - 184 + 181 - + This error could occur if this wallet was not shutdown cleanly and was last loaded using a build with a newer version of Berkeley DB. If so, please use the software that last loaded this wallet - 186 + 183 - + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - 190 + 187 - + This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection. - 193 + 190 - + This is the transaction fee you may discard if change is smaller than dust at this level - 196 + 193 - + This is the transaction fee you may pay when fee estimates are not available. - 199 + 196 - + Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments. - 201 + 198 - + Unable to replay blocks. You will need to rebuild the database using -reindex-chainstate. - 210 + 207 - + Unknown wallet file format "%s" provided. Please provide one of "bdb" or "sqlite". - 220 + 217 - + Unsupported category-specific logging level %1$s=%2$s. Expected %1$s=<category>:<loglevel>. Valid categories: %3$s. Valid loglevels: %4$s. - 228 + 225 - + Unsupported chainstate database format found. Please restart with -reindex-chainstate. This will rebuild the chainstate database. - 231 + 228 - + Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. - 234 + 231 - + Wallet loaded successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future. Legacy wallets can be migrated to a descriptor wallet with migratewallet. - 238 + 235 - + Warning: Dumpfile wallet format "%s" does not match command line specified format "%s". - 243 + 240 - + Warning: Private keys detected in wallet {%s} with disabled private keys - 246 + 243 - + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - 248 + 245 - + Witness data for blocks after height %d requires validation. Please restart with -reindex. - 251 + 248 - + You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain - 254 + 251 - + %s is set very high! - 273 + 270 - + -maxmempool must be at least %d MB - 274 + 271 - + Cannot resolve -%s address: '%s' - 278 + 275 - + Cannot set -forcednsseed to true when setting -dnsseed to false. - 279 + 276 - + Cannot set -peerblockfilters without -blockfilterindex. - 280 + 277 - + Cannot write to data directory '%s'; check permissions. - 281 + 278 - + %s is set very high! Fees this large could be paid on a single transaction. 26 - - A forked headers-chain with more work than the chain with the snapshot base block header exists. Please proceed to sync without AssumeUtxo. - 32 - - + Cannot provide specific connections and have addrman find outgoing connections at the same time. - 40 + 37 - + Error loading %s: External signer wallet being loaded without external signer support compiled - 53 + 50 - + Error reading %s! All keys read correctly, but transaction data or address metadata may be missing or incorrect. - 61 + 58 - + Error: Address book data in wallet cannot be identified to belong to migrated wallets - 67 + 64 - + Error: Duplicate descriptors created during migration. Your wallet may be corrupted. - 77 + 74 - + Error: Transaction %s in wallet cannot be identified to belong to migrated wallets - 83 + 80 - + Failed to calculate bump fees, because unconfirmed UTXOs depend on enormous cluster of unconfirmed transactions. - 89 + 86 - + Failed to remove snapshot chainstate dir (%s). Manually remove it before restarting. - 92 + 89 - + Failed to rename invalid peers.dat file. Please move or delete it and try again. - 95 + 92 - + Fee estimation failed. Fallbackfee is disabled. Wait a few blocks or enable %s. - 98 + 95 - + Flushing block file to disk failed. This is likely the result of an I/O error. - 104 + 101 - + Flushing undo file to disk failed. This is likely the result of an I/O error. - 107 + 104 - + Incompatible options: -dnsseed=1 was explicitly specified, but -onlynet forbids connections to IPv4/IPv6 - 109 + 106 - + Invalid amount for %s=<amount>: '%s' (must be at least the minrelay fee of %s to prevent stuck transactions) - 112 + 109 - + Maximum transaction weight is less than transaction weight without inputs - 119 + 116 - + Maximum transaction weight is too low, can not accommodate change output - 121 + 118 - + Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided - 134 + 131 - + Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is explicitly forbidden: -onion=0 - 137 + 134 - + Outbound connections restricted to Tor (-onlynet=onion) but the proxy for reaching the Tor network is not provided: none of -proxy, -onion or -listenonion is given - 140 + 137 - + Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided - 144 + 141 - + Rename of '%s' -> '%s' failed. Cannot clean up the background chainstate leveldb directory. - 158 + 155 - + The combination of the pre-selected inputs and the wallet automatic inputs selection exceeds the transaction maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - 173 + 170 - + The inputs size exceeds the maximum weight. Please try sending a smaller amount or manually consolidating your wallet's UTXOs - 177 + 174 - + The preselected coins total amount does not cover the transaction target. Please allow other inputs to be automatically selected or include more coins manually - 180 + 177 - + Transaction requires one destination of non-0 value, a non-0 feerate, or a pre-selected input - 204 + 201 - + UTXO snapshot failed to validate. Restart to resume normal initial block download, or try loading a different snapshot. - 207 + 204 - + Unconfirmed UTXOs are available, but spending them creates a chain of transactions that will be rejected by the mempool - 213 + 210 - + Unexpected legacy entry in descriptor wallet found. Loading wallet %s The wallet might have been tampered with or created with malicious intent. - 216 + 213 - + Unrecognized descriptor found. Loading wallet %s The wallet might had been created on a newer version. Please try running the latest software version. - 223 + 220 - + Your computer's date and time appear to be more than %d minutes out of sync with the network, this may lead to consensus failure. After you've confirmed your computer's clock, this message should no longer appear when you restart your node. Without a restart, it should stop showing automatically after you've connected to a sufficient number of new outbound peers, which may take some time. You can inspect the `timeoffset` field of the `getpeerinfo` and `getnetworkinfo` RPC methods to get more info. - 257 + 254 - + Unable to cleanup failed migration - 265 + 262 - + Unable to restore backup of wallet. - 268 + 265 - + whitebind may only be used for incoming connections ("out" was passed) - 271 + 268 - + A fatal internal error occurred, see debug.log for details: - 275 + 272 - + Assumeutxo data not found for the given blockhash '%s'. - 276 + 273 - + Block verification was interrupted - 277 + 274 - + Config setting for %s only applied on %s network when in [%s] section. - 282 + 279 - + Copyright (C) %i-%i - 283 + 280 - + Corrupt block found indicating potential hardware failure. - 284 + 281 - + Corrupted block database detected - 285 + 282 - + Could not find asmap file %s - 286 + 283 - + Could not parse asmap file %s - 287 + 284 - + Disk space is too low! - 288 + 285 - + Do you want to rebuild the block database now? - 289 + 286 - + Done loading - 290 + 287 - + Dump file %s does not exist. - 291 + 288 - + Elliptic curve cryptography sanity check failure. %s is shutting down. - 292 + 289 - + Error committing db txn for wallet transactions removal - 293 + 290 - + Error creating %s - 294 + 291 - + Error initializing block database - 295 + 292 - + Error initializing wallet database environment %s! - 296 + 293 - + Error loading %s - 297 + 294 - + Error loading %s: Private keys can only be disabled during creation - 298 + 295 - + Error loading %s: Wallet corrupted - 299 + 296 - + Error loading %s: Wallet requires newer version of %s - 300 + 297 - + Error loading block database - 301 + 298 - + Error opening block database - 302 + 299 - + Error reading configuration file: %s - 303 + 300 - + Error reading from database, shutting down. - 304 + 301 - + Error reading next record from wallet database - 305 + 302 - + Error starting db txn for wallet transactions removal - 306 + 303 - + Error: Cannot extract destination from the generated scriptpubkey - 307 + 304 - + Error: Couldn't create cursor into database - 310 + 307 - + Error: Disk space is low for %s - 311 + 308 - + Error: Dumpfile checksum does not match. Computed %s, expected %s - 312 + 309 - + Error: Failed to create new watchonly wallet - 313 + 310 - + Error: Got key that was not hex: %s - 314 + 311 - + Error: Got value that was not hex: %s - 315 + 312 - + Error: Keypool ran out, please call keypoolrefill first - 316 + 313 - + Error: Missing checksum - 317 + 314 - + Error: No %s addresses available. - 318 + 315 - + Error: This wallet already uses SQLite - 319 + 316 - + Error: This wallet is already a descriptor wallet - 320 + 317 - + Error: Unable to begin reading all records in the database - 321 + 318 - + Error: Unable to make a backup of your wallet - 322 + 319 - + Error: Unable to parse version %u as a uint32_t - 323 + 320 - + Error: Unable to read all records in the database - 324 + 321 - + Error: Unable to read wallet's best block locator record - 325 + 322 - + Error: Unable to remove watchonly address book data - 326 + 323 - + Error: Unable to write record to new wallet - 327 + 324 - + Error: Unable to write solvable wallet best block locator record - 328 + 325 - + Error: Unable to write watchonly wallet best block locator record - 329 + 326 - + Error: address book copy failed for wallet %s - 330 + 327 - + Error: database transaction cannot be executed for wallet %s - 331 + 328 - + Failed to connect best block (%s). - 332 + 329 - + Failed to disconnect block. - 333 + 330 - + Failed to listen on any port. Use -listen=0 if you want this. - 334 + 331 - + Failed to read block. - 335 + 332 - + Failed to rescan the wallet during initialization - 336 + 333 - + Failed to start indexes, shutting down.. - 337 + 334 - + Failed to verify database - 338 + 335 - + Failed to write block. - 339 + 336 - + Failed to write to block index database. - 340 + 337 - + Failed to write to coin database. - 341 + 338 - + Failed to write undo data. - 342 + 339 - + Failure removing transaction: %s - 343 + 340 - + Fee rate (%s) is lower than the minimum fee rate setting (%s) - 344 + 341 - + Ignoring duplicate -wallet %s. - 345 + 342 - + Importing… - 346 + 343 - + Incorrect or no genesis block found. Wrong datadir for network? - 347 + 344 - + Initialization sanity check failed. %s is shutting down. - 348 + 345 - + Input not found or already spent - 349 + 346 - + Insufficient dbcache for block verification - 350 + 347 - + Insufficient funds - 351 + 348 - + Invalid -i2psam address or hostname: '%s' - 352 + 349 - + Invalid -onion address or hostname: '%s' - 353 + 350 - + Invalid -proxy address or hostname: '%s' - 354 + 351 - + Invalid P2P permission: '%s' - 355 + 352 - + Invalid amount for %s=<amount>: '%s' (must be at least %s) - 356 + 353 - + Invalid amount for %s=<amount>: '%s' - 357 + 354 - + Invalid amount for -%s=<amount>: '%s' - 358 + 355 - + Invalid netmask specified in -whitelist: '%s' - 359 + 356 - + Invalid port specified in %s: '%s' - 360 + 357 - + Invalid pre-selected input %s - 361 + 358 - + Listening for incoming connections failed (listen returned error %s) - 362 + 359 - + Loading P2P addresses… - 363 + 360 - + Loading banlist… - 364 + 361 - + Loading block index… - 365 + 362 - + Loading wallet… - 366 + 363 - + Maximum transaction weight must be between %d and %d - 367 + 364 - + Missing amount - 368 + 365 - + Missing solving data for estimating transaction size - 369 + 366 - + Need to specify a port with -whitebind: '%s' - 370 + 367 - + No addresses available - 371 + 368 - + Not enough file descriptors available. - 372 + 369 - + Not found pre-selected input %s - 373 + 370 - + Not solvable pre-selected input %s - 374 + 371 - + Only direction was set, no permissions: '%s' - 375 + 372 - + Prune cannot be configured with a negative value. - 376 + 373 - + Prune mode is incompatible with -txindex. - 377 + 374 - + Pruning blockstore… - 378 + 375 - + Reducing -maxconnections from %d to %d, because of system limitations. - 379 + 376 - + Replaying blocks… - 380 + 377 - + Rescanning… - 381 + 378 - + SQLiteDatabase: Failed to execute statement to verify database: %s - 382 + 379 - + SQLiteDatabase: Failed to prepare statement to verify database: %s - 383 + 380 - + SQLiteDatabase: Failed to read database verification error: %s - 384 + 381 - + SQLiteDatabase: Unexpected application id. Expected %u, got %u - 385 + 382 - + Section [%s] is not recognized. - 386 + 383 - + Signer did not echo address - 389 + 386 - + Signer echoed unexpected address %s - 390 + 387 - + Signer returned error: %s - 391 + 388 - + Signing transaction failed - 392 + 389 - + Specified -walletdir "%s" does not exist - 393 + 390 - + Specified -walletdir "%s" is a relative path - 394 + 391 - + Specified -walletdir "%s" is not a directory - 395 + 392 - + Specified blocks directory "%s" does not exist. - 396 + 393 - + Specified data directory "%s" does not exist. - 397 + 394 - + Starting network threads… - 398 + 395 - + System error while flushing: %s - 399 + 396 - + System error while loading external block file: %s - 400 + 397 - + System error while saving block to disk: %s - 401 + 398 - + The source code is available from %s. - 402 + 399 - + The specified config file %s does not exist - 403 + 400 - + The transaction amount is too small to pay the fee - 404 + 401 - + The wallet will avoid paying less than the minimum relay fee. - 405 + 402 - + There is no ScriptPubKeyManager for this address - 406 + 403 - + This is experimental software. - 407 + 404 - + This is the minimum transaction fee you pay on every transaction. - 408 + 405 - + This is the transaction fee you will pay if you send a transaction. - 409 + 406 - + Transaction %s does not belong to this wallet - 410 + 407 - + Transaction amount too small - 411 + 408 - + Transaction amounts must not be negative - 412 + 409 - + Transaction change output index out of range - 413 + 410 - + Transaction must have at least one recipient - 414 + 411 - + Transaction needs a change address, but we can't generate it. - 415 + 412 - + Transaction too large - 416 + 413 - + Unable to bind to %s on this computer (bind returned error %s) - 417 + 414 - + Unable to bind to %s on this computer. %s is probably already running. - 418 + 415 - + Unable to create the PID file '%s': %s - 419 + 416 - + Unable to find UTXO for external input - 420 + 417 - + Unable to generate initial keys - 421 + 418 - + Unable to generate keys - 422 + 419 - + Unable to open %s for writing - 423 + 420 - + Unable to parse -maxuploadtarget: '%s' - 424 + 421 - + Unable to start HTTP server. See debug log for details. - 425 + 422 - + Unable to unload the wallet before migrating - 426 + 423 - + Unknown -blockfilterindex value %s. - 427 + 424 - + Unknown address type '%s' - 428 + 425 - + Unknown change type '%s' - 429 + 426 - + Unknown network specified in -onlynet: '%s' - 430 + 427 - + Unknown new rules activated (versionbit %i) - 431 + 428 - + Unrecognised option "%s" provided in -test=<option>. - 432 + 429 - + Unsupported global logging level %s=%s. Valid values: %s. - 433 + 430 - + Wallet file creation failed: %s - 438 + 435 - + acceptstalefeeestimates is not supported on %s chain. - 440 + 437 - + Unsupported logging category %s=%s. - 434 + 431 - + Error: Could not add watchonly tx %s to watchonly wallet - 308 + 305 - + Error: Could not delete watchonly transactions. - 309 + 306 - + User Agent comment (%s) contains unsafe characters. - 435 + 432 - + Verifying blocks… - 436 + 433 - + Verifying wallet(s)… - 437 + 434 - + Wallet needed to be rewritten: restart %s to complete - 439 + 436 - + Settings file could not be read - 387 + 384 - + Settings file could not be written - 388 + 385 From 99eeb51bf65fa00ee863f32d70f478bb9db0e351 Mon Sep 17 00:00:00 2001 From: glozow Date: Wed, 14 Aug 2024 15:56:28 +0100 Subject: [PATCH 9/9] [doc] mention bip94 support --- doc/bips.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/bips.md b/doc/bips.md index 87258fce93106..51ffe00a76758 100644 --- a/doc/bips.md +++ b/doc/bips.md @@ -30,6 +30,7 @@ BIPs that are implemented by Bitcoin Core: * [`BIP 84`](https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki): The experimental descriptor wallets introduced in **v0.21.0** by default use the Hierarchical Deterministic Wallet derivation proposed by BIP 84. ([PR #16528](https://github.com/bitcoin/bitcoin/pull/16528)) * [`BIP 86`](https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki): Descriptor wallets by default use the Hierarchical Deterministic Wallet derivation proposed by BIP 86 since **v23.0** ([PR #22364](https://github.com/bitcoin/bitcoin/pull/22364)). * [`BIP 90`](https://github.com/bitcoin/bips/blob/master/bip-0090.mediawiki): Trigger mechanism for activation of BIPs 34, 65, and 66 has been simplified to block height checks since **v0.14.0** ([PR #8391](https://github.com/bitcoin/bitcoin/pull/8391)). +* [`BIP 94`](https://github.com/bitcoin/bips/blob/master/bip-0094.mediawiki): Testnet 4 (`-testnet4`) supported as of **v28.0** ([PR #29775](https://github.com/bitcoin/bitcoin/pull/29775)). * [`BIP 111`](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki): `NODE_BLOOM` service bit added, and enforced for all peer versions as of **v0.13.0** ([PR #6579](https://github.com/bitcoin/bitcoin/pull/6579) and [PR #6641](https://github.com/bitcoin/bitcoin/pull/6641)). * [`BIP 112`](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki): The CHECKSEQUENCEVERIFY opcode has been implemented since **v0.12.1** ([PR #7524](https://github.com/bitcoin/bitcoin/pull/7524)), and has been *buried* since **v0.19.0** ([PR #16060](https://github.com/bitcoin/bitcoin/pull/16060)). * [`BIP 113`](https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki): Median time past lock-time calculations have been implemented since **v0.12.1** ([PR #6566](https://github.com/bitcoin/bitcoin/pull/6566)), and has been *buried* since **v0.19.0** ([PR #16060](https://github.com/bitcoin/bitcoin/pull/16060)).