20 #include <ripple/app/main/Application.h>
21 #include <ripple/app/misc/NetworkOPs.h>
22 #include <ripple/basics/Log.h>
23 #include <ripple/ledger/ReadView.h>
24 #include <ripple/net/RPCErr.h>
25 #include <ripple/protocol/ErrorCodes.h>
26 #include <ripple/protocol/jss.h>
27 #include <ripple/protocol/UintTypes.h>
28 #include <ripple/resource/Fees.h>
29 #include <ripple/rpc/Context.h>
30 #include <ripple/rpc/impl/RPCHelpers.h>
63 if (!taker_pays.
isMember (jss::currency))
66 if (! taker_pays [jss::currency].isString ())
69 if (! taker_gets.
isMember (jss::currency))
72 if (! taker_gets [jss::currency].isString ())
77 if (!
to_currency (pay_currency, taker_pays [jss::currency].asString ()))
79 JLOG (context.
j.
info()) <<
"Bad taker_pays currency.";
81 "Invalid field 'taker_pays.currency', bad currency.");
86 if (!
to_currency (get_currency, taker_gets [jss::currency].asString ()))
88 JLOG (context.
j.
info()) <<
"Bad taker_gets currency.";
90 "Invalid field 'taker_gets.currency', bad currency.");
95 if (taker_pays.
isMember (jss::issuer))
97 if (! taker_pays [jss::issuer].isString())
101 pay_issuer, taker_pays [jss::issuer].asString ()))
103 "Invalid field 'taker_pays.issuer', bad issuer.");
107 "Invalid field 'taker_pays.issuer', bad issuer account one.");
114 if (
isXRP (pay_currency) && !
isXRP (pay_issuer))
117 "XRP currency specification.");
119 if (!
isXRP (pay_currency) &&
isXRP (pay_issuer))
121 "Invalid field 'taker_pays.issuer', expected non-XRP issuer.");
125 if (taker_gets.
isMember (jss::issuer))
127 if (! taker_gets [jss::issuer].isString())
131 get_issuer, taker_gets [jss::issuer].asString ()))
133 "Invalid field 'taker_gets.issuer', bad issuer.");
137 "Invalid field 'taker_gets.issuer', bad issuer account one.");
145 if (
isXRP (get_currency) && !
isXRP (get_issuer))
147 "Unneeded field 'taker_gets.issuer' for "
148 "XRP currency specification.");
150 if (!
isXRP (get_currency) &&
isXRP (get_issuer))
152 "Invalid field 'taker_gets.issuer', expected non-XRP issuer.");
154 boost::optional<AccountID> takerID;
160 takerID = parseBase58<AccountID>(
166 if (pay_currency == get_currency && pay_issuer == get_issuer)
168 JLOG (context.
j.
info()) <<
"taker_gets same as taker_pays.";
179 ? context.
params[jss::marker]
184 {{pay_currency, pay_issuer}, {get_currency, get_issuer}},
185 takerID ? *takerID : beast::zero, bProof, limit, jvMarker, jvResult);
bool to_currency(Currency ¤cy, std::string const &code)
Tries to convert a string to a Currency, returns true on success.
const Charge feeMediumBurdenRPC
Resource::Charge & loadType
static constexpr LimitRange bookOffers
Limits for the book_offers command.
Status lookupLedger(std::shared_ptr< ReadView const > &ledger, JsonContext &context, Json::Value &result)
Look up a ledger from a request and fill a Json::Result with the data representing a ledger.
Json::Value object_field_error(std::string const &name)
Json::Value expected_field_error(std::string const &name, std::string const &type)
Json::Value missing_field_error(std::string const &name)
virtual void getBookPage(std::shared_ptr< ReadView const > &lpLedger, Book const &book, AccountID const &uTakerID, bool const bProof, unsigned int iLimit, Json::Value const &jvMarker, Json::Value &jvResult)=0
virtual JobQueue & getJobQueue()=0
AccountID const & xrpAccount()
Compute AccountID from public key.
bool isXRP(AccountID const &c)
bool isMember(const char *key) const
Return true if the object has a member named key.
Json::Value doBookOffers(RPC::JsonContext &context)
Json::Value rpcError(int iError, Json::Value jvResult)
int getJobCountGE(JobType t) const
All waiting jobs at or greater than this priority.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Json::Value invalid_field_error(std::string const &name)
bool isObjectOrNull() const
AccountID const & noAccount()
A placeholder for empty accounts.
Json::Value make_error(error_code_i code)
Returns a new json object that reflects the error code.
bool to_issuer(AccountID &, std::string const &)
Convert hex or base58 string to AccountID.
std::string asString() const
Returns the unquoted string value.