Improve error messages in the case of taddr decoding failure.

This commit is contained in:
Kris Nuttycombe 2021-12-29 17:07:17 -07:00
parent 9702b47e2a
commit 864cd8622f
1 changed files with 12 additions and 10 deletions

View File

@ -278,9 +278,10 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp)
LOCK2(cs_main, pwalletMain->cs_wallet);
KeyIO keyIO(Params());
CTxDestination dest = keyIO.DecodeDestination(params[0].get_str());
auto destStr = params[0].get_str();
CTxDestination dest = keyIO.DecodeDestination(destStr);
if (!IsValidDestination(dest)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address");
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Zcash transparent address: ") + destStr);
}
// Amount
@ -675,7 +676,7 @@ UniValue signmessage(const UniValue& params, bool fHelp)
KeyIO keyIO(Params());
CTxDestination dest = keyIO.DecodeDestination(strAddress);
if (!IsValidDestination(dest)) {
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid address");
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Zcash transparent address: ") + strAddress);
}
const CKeyID *keyID = std::get_if<CKeyID>(&dest);
@ -729,9 +730,10 @@ UniValue getreceivedbyaddress(const UniValue& params, bool fHelp)
KeyIO keyIO(Params());
// Bitcoin address
CTxDestination dest = keyIO.DecodeDestination(params[0].get_str());
auto destStr = params[0].get_str();
CTxDestination dest = keyIO.DecodeDestination(destStr);
if (!IsValidDestination(dest)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Zcash address");
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Zcash transparent address: ") + destStr);
}
CScript scriptPubKey = GetScriptForDestination(dest);
if (!IsMine(*pwalletMain, scriptPubKey)) {
@ -899,7 +901,7 @@ UniValue sendmany(const UniValue& params, bool fHelp)
for (const std::string& name_ : keys) {
CTxDestination dest = keyIO.DecodeDestination(name_);
if (!IsValidDestination(dest)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Zcash address: ") + name_);
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Zcash transparent address: ") + name_);
}
if (destinations.count(dest)) {
@ -2123,13 +2125,13 @@ UniValue listunspent(const UniValue& params, bool fHelp)
if (params.size() > 2) {
UniValue inputs = params[2].get_array();
for (size_t idx = 0; idx < inputs.size(); idx++) {
const UniValue& input = inputs[idx];
CTxDestination dest = keyIO.DecodeDestination(input.get_str());
auto destStr = inputs[idx].get_str();
CTxDestination dest = keyIO.DecodeDestination(destStr);
if (!IsValidDestination(dest)) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Zcash address: ") + input.get_str());
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Zcash transparent address: ") + destStr);
}
if (!destinations.insert(dest).second) {
throw JSONRPCError(RPC_INVALID_PARAMETER, std::string("Invalid parameter, duplicated address: ") + input.get_str());
throw JSONRPCError(RPC_INVALID_PARAMETER, std::string("Invalid parameter, duplicated address: ") + destStr);
}
}
}