diff --git a/src/rpc/Errors.cpp b/src/rpc/Errors.cpp index b59496cb..0c7a8811 100644 --- a/src/rpc/Errors.cpp +++ b/src/rpc/Errors.cpp @@ -55,6 +55,10 @@ getErrorInfo(ClioError code) {ClioError::rpcMALFORMED_CURRENCY, "malformedCurrency", "Malformed currency."}, + {ClioError::rpcMALFORMED_REQUEST, + "malformedRequest", + "Malformed request."}, + {ClioError::rpcMALFORMED_OWNER, "malformedOwner", "Malformed owner."}, }; auto matchByCode = [code](auto const& info) { return info.code == code; }; diff --git a/src/rpc/Errors.h b/src/rpc/Errors.h index 949f04c0..c49d409c 100644 --- a/src/rpc/Errors.h +++ b/src/rpc/Errors.h @@ -17,6 +17,8 @@ namespace RPC { */ enum class ClioError { rpcMALFORMED_CURRENCY = 5000, + rpcMALFORMED_REQUEST = 5001, + rpcMALFORMED_OWNER = 5002, }; /** diff --git a/src/rpc/handlers/LedgerEntry.cpp b/src/rpc/handlers/LedgerEntry.cpp index 647788a7..dfd5f22f 100644 --- a/src/rpc/handlers/LedgerEntry.cpp +++ b/src/rpc/handlers/LedgerEntry.cpp @@ -29,6 +29,9 @@ doLedgerEntry(Context const& context) auto lgrInfo = std::get(v); ripple::uint256 key; + + // Note: according to docs, only 1 of the below should be specified at any + // time. see https://xrpl.org/ledger_entry.html#ledger_entry if (request.contains(JS(index))) { if (!request.at(JS(index)).is_string()) @@ -325,24 +328,24 @@ doLedgerEntry(Context const& context) { if (!request.at(JS(ticket)).is_string()) return Status{ - RippledError::rpcINVALID_PARAMS, "ticketNotString"}; + ClioError::rpcMALFORMED_REQUEST, "ticketNotString"}; if (!key.parseHex(request.at(JS(ticket)).as_string().c_str())) return Status{ - RippledError::rpcINVALID_PARAMS, "malformedTicket"}; + ClioError::rpcMALFORMED_REQUEST, "malformedTicket"}; } else if ( !request.at(JS(ticket)).as_object().contains(JS(owner)) || !request.at(JS(ticket)).as_object().at(JS(owner)).is_string()) { - return Status{RippledError::rpcINVALID_PARAMS, "malformedOwner"}; + return Status{ClioError::rpcMALFORMED_REQUEST}; } else if ( !request.at(JS(ticket)).as_object().contains(JS(ticket_seq)) || !request.at(JS(ticket)).as_object().at(JS(ticket_seq)).is_int64()) { return Status{ - RippledError::rpcINVALID_PARAMS, "malformedTicketSeq"}; + ClioError::rpcMALFORMED_REQUEST, "malformedTicketSeq"}; } else { @@ -354,8 +357,7 @@ doLedgerEntry(Context const& context) .c_str()); if (!id) - return Status{ - RippledError::rpcINVALID_PARAMS, "malformedOwner"}; + return Status{ClioError::rpcMALFORMED_OWNER}; else { std::uint32_t seq = request.at(JS(offer))