Skip to content

Commit 645d7f7

Browse files
committed
rpc: deprecate "warning" field in {create,load,unload,restore}wallet
This string field has been replaced in these four RPCs by a "warnings" field returning a JSON array of strings.
1 parent 2f4a926 commit 645d7f7

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

src/wallet/rpc/backup.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1903,7 +1903,7 @@ RPCHelpMan restorewallet()
19031903
RPCResult::Type::OBJ, "", "",
19041904
{
19051905
{RPCResult::Type::STR, "name", "The wallet name if restored successfully."},
1906-
{RPCResult::Type::STR, "warning", "Warning messages, if any, related to restoring the wallet. Multiple messages will be delimited by newlines."},
1906+
{RPCResult::Type::STR, "warning", /*optional=*/true, "Warning messages, if any, related to restoring the wallet. Multiple messages will be delimited by newlines. (DEPRECATED, returned only if config option -deprecatedrpc=walletwarningfield is passed.)"},
19071907
{RPCResult::Type::ARR, "warnings", /*optional=*/true, "Warning messages, if any, related to restoring the wallet.",
19081908
{
19091909
{RPCResult::Type::STR, "", ""},
@@ -1937,7 +1937,9 @@ RPCHelpMan restorewallet()
19371937

19381938
UniValue obj(UniValue::VOBJ);
19391939
obj.pushKV("name", wallet->GetName());
1940-
obj.pushKV("warning", Join(warnings, Untranslated("\n")).original);
1940+
if (wallet->chain().rpcEnableDeprecated("walletwarningfield")) {
1941+
obj.pushKV("warning", Join(warnings, Untranslated("\n")).original);
1942+
}
19411943
PushWarnings(warnings, obj);
19421944

19431945
return obj;

src/wallet/rpc/wallet.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ static RPCHelpMan loadwallet()
207207
RPCResult::Type::OBJ, "", "",
208208
{
209209
{RPCResult::Type::STR, "name", "The wallet name if loaded successfully."},
210-
{RPCResult::Type::STR, "warning", "Warning messages, if any, related to loading the wallet. Multiple messages will be delimited by newlines."},
210+
{RPCResult::Type::STR, "warning", /*optional=*/true, "Warning messages, if any, related to loading the wallet. Multiple messages will be delimited by newlines. (DEPRECATED, returned only if config option -deprecatedrpc=walletwarningfield is passed.)"},
211211
{RPCResult::Type::ARR, "warnings", /*optional=*/true, "Warning messages, if any, related to loading the wallet.",
212212
{
213213
{RPCResult::Type::STR, "", ""},
@@ -244,7 +244,9 @@ static RPCHelpMan loadwallet()
244244

245245
UniValue obj(UniValue::VOBJ);
246246
obj.pushKV("name", wallet->GetName());
247-
obj.pushKV("warning", Join(warnings, Untranslated("\n")).original);
247+
if (wallet->chain().rpcEnableDeprecated("walletwarningfield")) {
248+
obj.pushKV("warning", Join(warnings, Untranslated("\n")).original);
249+
}
248250
PushWarnings(warnings, obj);
249251

250252
return obj;
@@ -340,7 +342,7 @@ static RPCHelpMan createwallet()
340342
RPCResult::Type::OBJ, "", "",
341343
{
342344
{RPCResult::Type::STR, "name", "The wallet name if created successfully. If the wallet was created using a full path, the wallet_name will be the full path."},
343-
{RPCResult::Type::STR, "warning", "Warning messages, if any, related to creating the wallet. Multiple messages will be delimited by newlines."},
345+
{RPCResult::Type::STR, "warning", /*optional=*/true, "Warning messages, if any, related to creating the wallet. Multiple messages will be delimited by newlines. (DEPRECATED, returned only if config option -deprecatedrpc=walletwarningfield is passed.)"},
344346
{RPCResult::Type::ARR, "warnings", /*optional=*/true, "Warning messages, if any, related to creating the wallet.",
345347
{
346348
{RPCResult::Type::STR, "", ""},
@@ -414,7 +416,9 @@ static RPCHelpMan createwallet()
414416

415417
UniValue obj(UniValue::VOBJ);
416418
obj.pushKV("name", wallet->GetName());
417-
obj.pushKV("warning", Join(warnings, Untranslated("\n")).original);
419+
if (wallet->chain().rpcEnableDeprecated("walletwarningfield")) {
420+
obj.pushKV("warning", Join(warnings, Untranslated("\n")).original);
421+
}
418422
PushWarnings(warnings, obj);
419423

420424
return obj;
@@ -432,7 +436,7 @@ static RPCHelpMan unloadwallet()
432436
{"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."},
433437
},
434438
RPCResult{RPCResult::Type::OBJ, "", "", {
435-
{RPCResult::Type::STR, "warning", "Warning messages, if any, related to unloading the wallet. Multiple messages will be delimited by newlines."},
439+
{RPCResult::Type::STR, "warning", /*optional=*/true, "Warning messages, if any, related to unloading the wallet. Multiple messages will be delimited by newlines. (DEPRECATED, returned only if config option -deprecatedrpc=walletwarningfield is passed.)"},
436440
{RPCResult::Type::ARR, "warnings", /*optional=*/true, "Warning messages, if any, related to unloading the wallet.",
437441
{
438442
{RPCResult::Type::STR, "", ""},
@@ -474,13 +478,13 @@ static RPCHelpMan unloadwallet()
474478
throw JSONRPCError(RPC_MISC_ERROR, "Requested wallet already unloaded");
475479
}
476480
}
477-
478-
UnloadWallet(std::move(wallet));
479-
480481
UniValue result(UniValue::VOBJ);
481-
result.pushKV("warning", Join(warnings, Untranslated("\n")).original);
482+
if (wallet->chain().rpcEnableDeprecated("walletwarningfield")) {
483+
result.pushKV("warning", Join(warnings, Untranslated("\n")).original);
484+
}
482485
PushWarnings(warnings, result);
483486

487+
UnloadWallet(std::move(wallet));
484488
return result;
485489
},
486490
};

test/functional/wallet_backwards_compatibility.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,12 @@ def run_test(self):
265265
)
266266
load_res = node_master.loadwallet("u1_v16")
267267
# Make sure this wallet opens without warnings. See https://github.com/bitcoin/bitcoin/pull/19054
268-
assert_equal(load_res['warning'], '')
268+
if int(node_master.getnetworkinfo()["version"]) >= 249900:
269+
# loadwallet#warnings (added in v25) -- only present if there is a warning
270+
assert "warnings" not in load_res
271+
else:
272+
# loadwallet#warning (deprecated in v25) -- always present, but empty string if no warning
273+
assert_equal(load_res["warning"], '')
269274
wallet = node_master.get_wallet_rpc("u1_v16")
270275
info = wallet.getaddressinfo(v16_addr)
271276
descriptor = f"wpkh([{info['hdmasterfingerprint']}{hdkeypath[1:]}]{v16_pubkey})"

test/functional/wallet_createwallet.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def add_options(self, parser):
2525

2626
def set_test_params(self):
2727
self.num_nodes = 1
28+
self.extra_args = [["-deprecatedrpc=walletwarningfield"]]
2829

2930
def skip_test_if_missing_module(self):
3031
self.skip_if_no_wallet()

0 commit comments

Comments
 (0)