mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-05-13 03:30:42 +02:00
Merge wallet_undeprecate_legacy-26
This commit is contained in:
commit
dd9a275a37
@ -1308,11 +1308,6 @@ void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVer
|
|||||||
void BitcoinGUI::createWallet()
|
void BitcoinGUI::createWallet()
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_WALLET
|
#ifdef ENABLE_WALLET
|
||||||
#ifndef USE_SQLITE
|
|
||||||
// Compiled without sqlite support (required for descriptor wallets)
|
|
||||||
message(tr("Error creating wallet"), tr("Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets)"), CClientUIInterface::MSG_ERROR);
|
|
||||||
return;
|
|
||||||
#endif // USE_SQLITE
|
|
||||||
auto activity = new CreateWalletActivity(getWalletController(), this);
|
auto activity = new CreateWalletActivity(getWalletController(), this);
|
||||||
connect(activity, &CreateWalletActivity::created, this, &BitcoinGUI::setCurrentWallet);
|
connect(activity, &CreateWalletActivity::created, this, &BitcoinGUI::setCurrentWallet);
|
||||||
connect(activity, &CreateWalletActivity::created, rpcConsole, &RPCConsole::setCurrentWallet);
|
connect(activity, &CreateWalletActivity::created, rpcConsole, &RPCConsole::setCurrentWallet);
|
||||||
|
@ -48,10 +48,12 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
|
|||||||
ui->encrypt_wallet_checkbox->setEnabled(!checked);
|
ui->encrypt_wallet_checkbox->setEnabled(!checked);
|
||||||
ui->blank_wallet_checkbox->setEnabled(!checked);
|
ui->blank_wallet_checkbox->setEnabled(!checked);
|
||||||
ui->disable_privkeys_checkbox->setEnabled(!checked);
|
ui->disable_privkeys_checkbox->setEnabled(!checked);
|
||||||
|
ui->descriptor_checkbox->setEnabled(!checked);
|
||||||
|
|
||||||
// The external signer checkbox is only enabled when a device is detected.
|
// The external signer checkbox is only enabled when a device is detected.
|
||||||
// In that case it is checked by default. Toggling it restores the other
|
// In that case it is checked by default. Toggling it restores the other
|
||||||
// options to their default.
|
// options to their default.
|
||||||
|
ui->descriptor_checkbox->setChecked(checked);
|
||||||
ui->encrypt_wallet_checkbox->setChecked(false);
|
ui->encrypt_wallet_checkbox->setChecked(false);
|
||||||
ui->disable_privkeys_checkbox->setChecked(checked);
|
ui->disable_privkeys_checkbox->setChecked(checked);
|
||||||
ui->blank_wallet_checkbox->setChecked(false);
|
ui->blank_wallet_checkbox->setChecked(false);
|
||||||
@ -83,6 +85,19 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#ifndef USE_SQLITE
|
||||||
|
ui->descriptor_checkbox->setToolTip(tr("Compiled without sqlite support (required for descriptor wallets)"));
|
||||||
|
ui->descriptor_checkbox->setEnabled(false);
|
||||||
|
ui->descriptor_checkbox->setChecked(false);
|
||||||
|
ui->external_signer_checkbox->setEnabled(false);
|
||||||
|
ui->external_signer_checkbox->setChecked(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef USE_BDB
|
||||||
|
ui->descriptor_checkbox->setEnabled(false);
|
||||||
|
ui->descriptor_checkbox->setChecked(true);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef ENABLE_EXTERNAL_SIGNER
|
#ifndef ENABLE_EXTERNAL_SIGNER
|
||||||
//: "External signing" means using devices such as hardware wallets.
|
//: "External signing" means using devices such as hardware wallets.
|
||||||
ui->external_signer_checkbox->setToolTip(tr("Compiled without external signing support (required for external signing)"));
|
ui->external_signer_checkbox->setToolTip(tr("Compiled without external signing support (required for external signing)"));
|
||||||
@ -138,6 +153,11 @@ bool CreateWalletDialog::isMakeBlankWalletChecked() const
|
|||||||
return ui->blank_wallet_checkbox->isChecked();
|
return ui->blank_wallet_checkbox->isChecked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CreateWalletDialog::isDescriptorWalletChecked() const
|
||||||
|
{
|
||||||
|
return ui->descriptor_checkbox->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
bool CreateWalletDialog::isExternalSignerChecked() const
|
bool CreateWalletDialog::isExternalSignerChecked() const
|
||||||
{
|
{
|
||||||
return ui->external_signer_checkbox->isChecked();
|
return ui->external_signer_checkbox->isChecked();
|
||||||
|
@ -35,6 +35,7 @@ public:
|
|||||||
bool isEncryptWalletChecked() const;
|
bool isEncryptWalletChecked() const;
|
||||||
bool isDisablePrivateKeysChecked() const;
|
bool isDisablePrivateKeysChecked() const;
|
||||||
bool isMakeBlankWalletChecked() const;
|
bool isMakeBlankWalletChecked() const;
|
||||||
|
bool isDescriptorWalletChecked() const;
|
||||||
bool isExternalSignerChecked() const;
|
bool isExternalSignerChecked() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -153,6 +153,19 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="descriptor_checkbox">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Use descriptors for scriptPubKey management</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Descriptor Wallet</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="external_signer_checkbox">
|
<widget class="QCheckBox" name="external_signer_checkbox">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
@ -196,6 +209,7 @@
|
|||||||
<tabstop>encrypt_wallet_checkbox</tabstop>
|
<tabstop>encrypt_wallet_checkbox</tabstop>
|
||||||
<tabstop>disable_privkeys_checkbox</tabstop>
|
<tabstop>disable_privkeys_checkbox</tabstop>
|
||||||
<tabstop>blank_wallet_checkbox</tabstop>
|
<tabstop>blank_wallet_checkbox</tabstop>
|
||||||
|
<tabstop>descriptor_checkbox</tabstop>
|
||||||
<tabstop>external_signer_checkbox</tabstop>
|
<tabstop>external_signer_checkbox</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
@ -254,14 +254,15 @@ void CreateWalletActivity::createWallet()
|
|||||||
|
|
||||||
std::string name = m_create_wallet_dialog->walletName().toStdString();
|
std::string name = m_create_wallet_dialog->walletName().toStdString();
|
||||||
uint64_t flags = 0;
|
uint64_t flags = 0;
|
||||||
// Enable descriptors by default.
|
|
||||||
flags |= WALLET_FLAG_DESCRIPTORS;
|
|
||||||
if (m_create_wallet_dialog->isDisablePrivateKeysChecked()) {
|
if (m_create_wallet_dialog->isDisablePrivateKeysChecked()) {
|
||||||
flags |= WALLET_FLAG_DISABLE_PRIVATE_KEYS;
|
flags |= WALLET_FLAG_DISABLE_PRIVATE_KEYS;
|
||||||
}
|
}
|
||||||
if (m_create_wallet_dialog->isMakeBlankWalletChecked()) {
|
if (m_create_wallet_dialog->isMakeBlankWalletChecked()) {
|
||||||
flags |= WALLET_FLAG_BLANK_WALLET;
|
flags |= WALLET_FLAG_BLANK_WALLET;
|
||||||
}
|
}
|
||||||
|
if (m_create_wallet_dialog->isDescriptorWalletChecked()) {
|
||||||
|
flags |= WALLET_FLAG_DESCRIPTORS;
|
||||||
|
}
|
||||||
if (m_create_wallet_dialog->isExternalSignerChecked()) {
|
if (m_create_wallet_dialog->isExternalSignerChecked()) {
|
||||||
flags |= WALLET_FLAG_EXTERNAL_SIGNER;
|
flags |= WALLET_FLAG_EXTERNAL_SIGNER;
|
||||||
}
|
}
|
||||||
|
@ -370,8 +370,7 @@ static RPCHelpMan createwallet()
|
|||||||
{"passphrase", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "Encrypt the wallet with this passphrase."},
|
{"passphrase", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "Encrypt the wallet with this passphrase."},
|
||||||
{"avoid_reuse", RPCArg::Type::BOOL, RPCArg::Default{false}, "Keep track of coin reuse, and treat dirty and clean coins differently with privacy considerations in mind."},
|
{"avoid_reuse", RPCArg::Type::BOOL, RPCArg::Default{false}, "Keep track of coin reuse, and treat dirty and clean coins differently with privacy considerations in mind."},
|
||||||
{"descriptors", RPCArg::Type::BOOL, RPCArg::Default{true}, "Create a native descriptor wallet. The wallet will use descriptors internally to handle address creation."
|
{"descriptors", RPCArg::Type::BOOL, RPCArg::Default{true}, "Create a native descriptor wallet. The wallet will use descriptors internally to handle address creation."
|
||||||
" Setting to \"false\" will create a legacy wallet; This is only possible with the -deprecatedrpc=create_bdb setting because, the legacy wallet type is being deprecated and"
|
" Setting to \"false\" will create a legacy wallet"},
|
||||||
" support for creating and opening legacy wallets will be removed in the future."},
|
|
||||||
{"load_on_startup", RPCArg::Type::BOOL, RPCArg::Optional::OMITTED, "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."},
|
{"load_on_startup", RPCArg::Type::BOOL, RPCArg::Optional::OMITTED, "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."},
|
||||||
{"external_signer", RPCArg::Type::BOOL, RPCArg::Default{false}, "Use an external signer such as a hardware wallet. Requires -signer to be configured. Wallet creation will fail if keys cannot be fetched. Requires disable_private_keys and descriptors set to true."},
|
{"external_signer", RPCArg::Type::BOOL, RPCArg::Default{false}, "Use an external signer such as a hardware wallet. Requires -signer to be configured. Wallet creation will fail if keys cannot be fetched. Requires disable_private_keys and descriptors set to true."},
|
||||||
},
|
},
|
||||||
@ -429,11 +428,6 @@ static RPCHelpMan createwallet()
|
|||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Compiled without sqlite support (required for descriptor wallets)");
|
throw JSONRPCError(RPC_WALLET_ERROR, "Compiled without sqlite support (required for descriptor wallets)");
|
||||||
#endif
|
#endif
|
||||||
flags |= WALLET_FLAG_DESCRIPTORS;
|
flags |= WALLET_FLAG_DESCRIPTORS;
|
||||||
} else {
|
|
||||||
if (!context.chain->rpcEnableDeprecated("create_bdb")) {
|
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "BDB wallet creation is deprecated and will be removed in a future release."
|
|
||||||
" In this release it can be re-enabled temporarily with the -deprecatedrpc=create_bdb setting.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!request.params[7].isNull() && request.params[7].get_bool()) {
|
if (!request.params[7].isNull() && request.params[7].get_bool()) {
|
||||||
#ifdef ENABLE_EXTERNAL_SIGNER
|
#ifdef ENABLE_EXTERNAL_SIGNER
|
||||||
|
@ -293,11 +293,6 @@ std::shared_ptr<CWallet> LoadWalletInternal(WalletContext& context, const std::s
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Legacy wallets are being deprecated, warn if the loaded wallet is legacy
|
|
||||||
if (!wallet->IsWalletFlagSet(WALLET_FLAG_DESCRIPTORS)) {
|
|
||||||
warnings.push_back(_("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."));
|
|
||||||
}
|
|
||||||
|
|
||||||
NotifyWalletLoaded(context, wallet);
|
NotifyWalletLoaded(context, wallet);
|
||||||
AddWallet(context, wallet);
|
AddWallet(context, wallet);
|
||||||
wallet->postInitProcess();
|
wallet->postInitProcess();
|
||||||
@ -486,11 +481,6 @@ std::shared_ptr<CWallet> CreateWallet(WalletContext& context, const std::string&
|
|||||||
// Write the wallet settings
|
// Write the wallet settings
|
||||||
UpdateWalletSetting(*context.chain, name, load_on_start, warnings);
|
UpdateWalletSetting(*context.chain, name, load_on_start, warnings);
|
||||||
|
|
||||||
// Legacy wallets are being deprecated, warn if a newly created wallet is legacy
|
|
||||||
if (!(wallet_creation_flags & WALLET_FLAG_DESCRIPTORS)) {
|
|
||||||
warnings.push_back(_("Wallet created successfully. The legacy wallet type is being deprecated and support for creating and opening legacy wallets will be removed in the future."));
|
|
||||||
}
|
|
||||||
|
|
||||||
status = DatabaseStatus::SUCCESS;
|
status = DatabaseStatus::SUCCESS;
|
||||||
return wallet;
|
return wallet;
|
||||||
}
|
}
|
||||||
|
@ -339,10 +339,9 @@ class BackwardsCompatibilityTest(BitcoinTestFramework):
|
|||||||
# Restore the wallet to master
|
# Restore the wallet to master
|
||||||
load_res = node_master.restorewallet(wallet_name, backup_path)
|
load_res = node_master.restorewallet(wallet_name, backup_path)
|
||||||
|
|
||||||
# Make sure this wallet opens with only the migration warning. See https://github.com/bitcoin/bitcoin/pull/19054
|
# Make sure this wallet opens without warnings
|
||||||
if not self.options.descriptors:
|
if not self.options.descriptors:
|
||||||
# Legacy wallets will have only a deprecation warning
|
assert "warnings" not in load_res
|
||||||
assert_equal(load_res["warnings"], ["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."])
|
|
||||||
else:
|
else:
|
||||||
assert "warnings" not in load_res
|
assert "warnings" not in load_res
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ class CreateWalletTest(BitcoinTestFramework):
|
|||||||
assert_equal(walletinfo['keypoolsize_hd_internal'], keys)
|
assert_equal(walletinfo['keypoolsize_hd_internal'], keys)
|
||||||
# Allow empty passphrase, but there should be a warning
|
# Allow empty passphrase, but there should be a warning
|
||||||
resp = self.nodes[0].createwallet(wallet_name='w7', disable_private_keys=False, blank=False, passphrase='')
|
resp = self.nodes[0].createwallet(wallet_name='w7', disable_private_keys=False, blank=False, passphrase='')
|
||||||
assert_equal(resp["warnings"], [EMPTY_PASSPHRASE_MSG] if self.options.descriptors else [EMPTY_PASSPHRASE_MSG, LEGACY_WALLET_MSG])
|
assert_equal(resp["warnings"], [EMPTY_PASSPHRASE_MSG])
|
||||||
|
|
||||||
w7 = node.get_wallet_rpc('w7')
|
w7 = node.get_wallet_rpc('w7')
|
||||||
assert_raises_rpc_error(-15, 'Error: running with an unencrypted wallet, but walletpassphrase was called.', w7.walletpassphrase, '', 60)
|
assert_raises_rpc_error(-15, 'Error: running with an unencrypted wallet, but walletpassphrase was called.', w7.walletpassphrase, '', 60)
|
||||||
@ -175,7 +175,7 @@ class CreateWalletTest(BitcoinTestFramework):
|
|||||||
self.log.info('Using a passphrase with private keys disabled returns error')
|
self.log.info('Using a passphrase with private keys disabled returns error')
|
||||||
assert_raises_rpc_error(-4, 'Passphrase provided but private keys are disabled. A passphrase is only used to encrypt private keys, so cannot be used for wallets with private keys disabled.', self.nodes[0].createwallet, wallet_name='w9', disable_private_keys=True, passphrase='thisisapassphrase')
|
assert_raises_rpc_error(-4, 'Passphrase provided but private keys are disabled. A passphrase is only used to encrypt private keys, so cannot be used for wallets with private keys disabled.', self.nodes[0].createwallet, wallet_name='w9', disable_private_keys=True, passphrase='thisisapassphrase')
|
||||||
|
|
||||||
if self.is_bdb_compiled():
|
if False:
|
||||||
self.log.info("Test legacy wallet deprecation")
|
self.log.info("Test legacy wallet deprecation")
|
||||||
result = self.nodes[0].createwallet(wallet_name="legacy_w0", descriptors=False, passphrase=None)
|
result = self.nodes[0].createwallet(wallet_name="legacy_w0", descriptors=False, passphrase=None)
|
||||||
assert_equal(result, {
|
assert_equal(result, {
|
||||||
|
Loading…
Reference in New Issue
Block a user