Skip to content

Commit 92263cc

Browse files
committed
Add upgradewallet RPC
1 parent 1e48796 commit 92263cc

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/rpc/client.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
153153
{ "logging", 0, "include" },
154154
{ "logging", 1, "exclude" },
155155
{ "disconnectnode", 1, "nodeid" },
156+
{ "upgradewallet", 0, "version" },
156157
// Echo with conversion (For testing only)
157158
{ "echojson", 0, "arg0" },
158159
{ "echojson", 1, "arg1" },

src/wallet/rpcwallet.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4245,6 +4245,45 @@ UniValue walletcreatefundedpsbt(const JSONRPCRequest& request)
42454245
return result;
42464246
}
42474247

4248+
static UniValue upgradewallet(const JSONRPCRequest& request)
4249+
{
4250+
std::shared_ptr<CWallet> const wallet = GetWalletForJSONRPCRequest(request);
4251+
CWallet* const pwallet = wallet.get();
4252+
4253+
if (!EnsureWalletIsAvailable(pwallet, request.fHelp)) {
4254+
return NullUniValue;
4255+
}
4256+
4257+
RPCHelpMan{"upgradewallet",
4258+
"\nUpgrade the wallet. Upgrades to the latest version if no version number is specified\n"
4259+
"New keys may be generated and a new wallet backup will need to be made.",
4260+
{
4261+
{"version", RPCArg::Type::NUM, /* default */ strprintf("%d", FEATURE_LATEST), "The version number to upgrade to. Default is the latest wallet version"}
4262+
},
4263+
RPCResults{},
4264+
RPCExamples{
4265+
HelpExampleCli("upgradewallet", "169900")
4266+
+ HelpExampleRpc("upgradewallet", "169900")
4267+
}
4268+
}.Check(request);
4269+
4270+
RPCTypeCheck(request.params, {UniValue::VNUM}, true);
4271+
4272+
EnsureWalletIsUnlocked(pwallet);
4273+
4274+
int version = 0;
4275+
if (!request.params[0].isNull()) {
4276+
version = request.params[0].get_int();
4277+
}
4278+
4279+
std::string error;
4280+
std::vector<std::string> warnings;
4281+
if (!pwallet->UpgradeWallet(version, error, warnings)) {
4282+
throw JSONRPCError(RPC_WALLET_ERROR, error);
4283+
}
4284+
return error;
4285+
}
4286+
42484287
UniValue abortrescan(const JSONRPCRequest& request); // in rpcdump.cpp
42494288
UniValue dumpprivkey(const JSONRPCRequest& request); // in rpcdump.cpp
42504289
UniValue importprivkey(const JSONRPCRequest& request);
@@ -4313,6 +4352,7 @@ static const CRPCCommand commands[] =
43134352
{ "wallet", "signmessage", &signmessage, {"address","message"} },
43144353
{ "wallet", "signrawtransactionwithwallet", &signrawtransactionwithwallet, {"hexstring","prevtxs","sighashtype"} },
43154354
{ "wallet", "unloadwallet", &unloadwallet, {"wallet_name"} },
4355+
{ "wallet", "upgradewallet", &upgradewallet, {"version"} },
43164356
{ "wallet", "walletcreatefundedpsbt", &walletcreatefundedpsbt, {"inputs","outputs","locktime","options","bip32derivs"} },
43174357
{ "wallet", "walletlock", &walletlock, {} },
43184358
{ "wallet", "walletpassphrase", &walletpassphrase, {"passphrase","timeout"} },

0 commit comments

Comments
 (0)