mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
Merge bitcoin/bitcoin#26990: cli: Improve error message on multiwallet cli-side commands
54227e681a
rpc, cli: improve error message on multiwallet mode (pablomartin4btc) Pull request description: Running a CLI command when multiple wallets are loaded and `-rpcwallet` is not specified, should return a clearer error. Currently in `master`: ``` $ bitcoin-cli -regtest -generate 1 error code: -19 error message: Wallet file not specified (must request wallet RPC through /wallet/<filename> uri-path). Try adding "-rpcwallet=<filename>" option to bitcoin-cli command line. ``` With this change: ``` $ bitcoin-cli -regtest -generate 1 error code: -19 error message: Multiple wallets are loaded. Please select which wallet to use by requesting the RPC through the /wallet/<walletname> URI path. Or for the CLI, specify the "-rpcwallet=<walletname>" option before the command (run "bitcoin-cli -h" for help or "bitcoin-cli listwallets" to see which wallets are currently loaded). ``` ACKs for top commit: maflcko: review ACK54227e681a
achow101: ACK54227e681a
furszy: utACK54227e681a
mzumsande: Code Review ACK54227e681a
jonatack: ACK54227e681a
Tree-SHA512: 51ff24f64858aa6be6adf6f20105c9f076ebea743780bf2a4399f7fe8b5239cbb1ea06d32b2ef5e850da2369abb0ef7a52c50c2b8f31f4ca90d3a486abc9b77e
This commit is contained in:
commit
c985a34b9c
4 changed files with 15 additions and 5 deletions
|
@ -950,7 +950,8 @@ static void ParseError(const UniValue& error, std::string& strPrint, int& nRet)
|
||||||
strPrint += ("error message:\n" + err_msg.get_str());
|
strPrint += ("error message:\n" + err_msg.get_str());
|
||||||
}
|
}
|
||||||
if (err_code.isNum() && err_code.getInt<int>() == RPC_WALLET_NOT_SPECIFIED) {
|
if (err_code.isNum() && err_code.getInt<int>() == RPC_WALLET_NOT_SPECIFIED) {
|
||||||
strPrint += "\nTry adding \"-rpcwallet=<filename>\" option to bitcoin-cli command line.";
|
strPrint += " Or for the CLI, specify the \"-rpcwallet=<walletname>\" option before the command";
|
||||||
|
strPrint += " (run \"bitcoin-cli -h\" for help or \"bitcoin-cli listwallets\" to see which wallets are currently loaded).";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
strPrint = "error: " + error.write();
|
strPrint = "error: " + error.write();
|
||||||
|
|
|
@ -91,7 +91,7 @@ std::shared_ptr<CWallet> GetWalletForJSONRPCRequest(const JSONRPCRequest& reques
|
||||||
RPC_WALLET_NOT_FOUND, "No wallet is loaded. Load a wallet using loadwallet or create a new one with createwallet. (Note: A default wallet is no longer automatically created)");
|
RPC_WALLET_NOT_FOUND, "No wallet is loaded. Load a wallet using loadwallet or create a new one with createwallet. (Note: A default wallet is no longer automatically created)");
|
||||||
}
|
}
|
||||||
throw JSONRPCError(RPC_WALLET_NOT_SPECIFIED,
|
throw JSONRPCError(RPC_WALLET_NOT_SPECIFIED,
|
||||||
"Wallet file not specified (must request wallet RPC through /wallet/<filename> uri-path).");
|
"Multiple wallets are loaded. Please select which wallet to use by requesting the RPC through the /wallet/<walletname> URI path.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnsureWalletIsUnlocked(const CWallet& wallet)
|
void EnsureWalletIsUnlocked(const CWallet& wallet)
|
||||||
|
|
|
@ -30,7 +30,12 @@ JSON_PARSING_ERROR = 'error: Error parsing JSON: foo'
|
||||||
BLOCKS_VALUE_OF_ZERO = 'error: the first argument (number of blocks to generate, default: 1) must be an integer value greater than zero'
|
BLOCKS_VALUE_OF_ZERO = 'error: the first argument (number of blocks to generate, default: 1) must be an integer value greater than zero'
|
||||||
TOO_MANY_ARGS = 'error: too many arguments (maximum 2 for nblocks and maxtries)'
|
TOO_MANY_ARGS = 'error: too many arguments (maximum 2 for nblocks and maxtries)'
|
||||||
WALLET_NOT_LOADED = 'Requested wallet does not exist or is not loaded'
|
WALLET_NOT_LOADED = 'Requested wallet does not exist or is not loaded'
|
||||||
WALLET_NOT_SPECIFIED = 'Wallet file not specified'
|
WALLET_NOT_SPECIFIED = (
|
||||||
|
"Multiple wallets are loaded. Please select which wallet to use by requesting the RPC "
|
||||||
|
"through the /wallet/<walletname> URI path. Or for the CLI, specify the \"-rpcwallet=<walletname>\" "
|
||||||
|
"option before the command (run \"bitcoin-cli -h\" for help or \"bitcoin-cli listwallets\" to see "
|
||||||
|
"which wallets are currently loaded)."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def cli_get_info_string_to_dict(cli_get_info_string):
|
def cli_get_info_string_to_dict(cli_get_info_string):
|
||||||
|
@ -331,6 +336,10 @@ class TestBitcoinCli(BitcoinTestFramework):
|
||||||
n4 = 10
|
n4 = 10
|
||||||
blocks = self.nodes[0].getblockcount()
|
blocks = self.nodes[0].getblockcount()
|
||||||
|
|
||||||
|
self.log.info('Test -generate -rpcwallet=<filename> raise RPC error')
|
||||||
|
wallet2_path = f'-rpcwallet={self.nodes[0].wallets_path / wallets[2] / self.wallet_data_filename}'
|
||||||
|
assert_raises_rpc_error(-18, WALLET_NOT_LOADED, self.nodes[0].cli(wallet2_path, '-generate').echo)
|
||||||
|
|
||||||
self.log.info('Test -generate -rpcwallet with no args')
|
self.log.info('Test -generate -rpcwallet with no args')
|
||||||
generate = self.nodes[0].cli(rpcwallet2, '-generate').send_cli()
|
generate = self.nodes[0].cli(rpcwallet2, '-generate').send_cli()
|
||||||
assert_equal(set(generate.keys()), {'address', 'blocks'})
|
assert_equal(set(generate.keys()), {'address', 'blocks'})
|
||||||
|
|
|
@ -229,7 +229,7 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||||
assert_raises_rpc_error(-18, "Requested wallet does not exist or is not loaded", wallet_bad.getwalletinfo)
|
assert_raises_rpc_error(-18, "Requested wallet does not exist or is not loaded", wallet_bad.getwalletinfo)
|
||||||
|
|
||||||
# accessing wallet RPC without using wallet endpoint fails
|
# accessing wallet RPC without using wallet endpoint fails
|
||||||
assert_raises_rpc_error(-19, "Wallet file not specified", node.getwalletinfo)
|
assert_raises_rpc_error(-19, "Multiple wallets are loaded. Please select which wallet", node.getwalletinfo)
|
||||||
|
|
||||||
w1, w2, w3, w4, *_ = wallets
|
w1, w2, w3, w4, *_ = wallets
|
||||||
self.generatetoaddress(node, nblocks=COINBASE_MATURITY + 1, address=w1.getnewaddress(), sync_fun=self.no_op)
|
self.generatetoaddress(node, nblocks=COINBASE_MATURITY + 1, address=w1.getnewaddress(), sync_fun=self.no_op)
|
||||||
|
@ -275,7 +275,7 @@ class MultiWalletTest(BitcoinTestFramework):
|
||||||
loadwallet_name = node.loadwallet(wallet_names[1])
|
loadwallet_name = node.loadwallet(wallet_names[1])
|
||||||
assert_equal(loadwallet_name['name'], wallet_names[1])
|
assert_equal(loadwallet_name['name'], wallet_names[1])
|
||||||
assert_equal(node.listwallets(), wallet_names[0:2])
|
assert_equal(node.listwallets(), wallet_names[0:2])
|
||||||
assert_raises_rpc_error(-19, "Wallet file not specified", node.getwalletinfo)
|
assert_raises_rpc_error(-19, "Multiple wallets are loaded. Please select which wallet", node.getwalletinfo)
|
||||||
w2 = node.get_wallet_rpc(wallet_names[1])
|
w2 = node.get_wallet_rpc(wallet_names[1])
|
||||||
w2.getwalletinfo()
|
w2.getwalletinfo()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue