20#include <xrpld/app/main/Application.h> 
   21#include <xrpld/app/misc/NetworkOPs.h> 
   22#include <xrpld/rpc/BookChanges.h> 
   23#include <xrpld/rpc/Context.h> 
   24#include <xrpld/rpc/detail/RPCHelpers.h> 
   26#include <xrpl/basics/Log.h> 
   27#include <xrpl/ledger/ReadView.h> 
   28#include <xrpl/protocol/ErrorCodes.h> 
   29#include <xrpl/protocol/RPCErr.h> 
   30#include <xrpl/protocol/UintTypes.h> 
   31#include <xrpl/protocol/jss.h> 
   32#include <xrpl/resource/Fees.h> 
   66    if (!taker_pays.
isMember(jss::currency))
 
   69    if (!taker_pays[jss::currency].isString())
 
   72    if (!taker_gets.
isMember(jss::currency))
 
   75    if (!taker_gets[jss::currency].isString())
 
   80    if (!
to_currency(pay_currency, taker_pays[jss::currency].asString()))
 
   82        JLOG(context.
j.
info()) << 
"Bad taker_pays currency.";
 
   85            "Invalid field 'taker_pays.currency', bad currency.");
 
   90    if (!
to_currency(get_currency, taker_gets[jss::currency].asString()))
 
   92        JLOG(context.
j.
info()) << 
"Bad taker_gets currency.";
 
   95            "Invalid field 'taker_gets.currency', bad currency.");
 
  100    if (taker_pays.
isMember(jss::issuer))
 
  102        if (!taker_pays[jss::issuer].isString())
 
  105        if (!
to_issuer(pay_issuer, taker_pays[jss::issuer].asString()))
 
  108                "Invalid field 'taker_pays.issuer', bad issuer.");
 
  113                "Invalid field 'taker_pays.issuer', bad issuer account one.");
 
  120    if (
isXRP(pay_currency) && !
isXRP(pay_issuer))
 
  123            "Unneeded field 'taker_pays.issuer' for " 
  124            "XRP currency specification.");
 
  126    if (!
isXRP(pay_currency) && 
isXRP(pay_issuer))
 
  129            "Invalid field 'taker_pays.issuer', expected non-XRP issuer.");
 
  133    if (taker_gets.
isMember(jss::issuer))
 
  135        if (!taker_gets[jss::issuer].isString())
 
  138        if (!
to_issuer(get_issuer, taker_gets[jss::issuer].asString()))
 
  141                "Invalid field 'taker_gets.issuer', bad issuer.");
 
  146                "Invalid field 'taker_gets.issuer', bad issuer account one.");
 
  153    if (
isXRP(get_currency) && !
isXRP(get_issuer))
 
  156            "Unneeded field 'taker_gets.issuer' for " 
  157            "XRP currency specification.");
 
  159    if (!
isXRP(get_currency) && 
isXRP(get_issuer))
 
  162            "Invalid field 'taker_gets.issuer', expected non-XRP issuer.");
 
  170        takerID = parseBase58<AccountID>(context.
params[jss::taker].
asString());
 
  191    if (pay_currency == get_currency && pay_issuer == get_issuer)
 
  193        JLOG(context.
j.
info()) << 
"taker_gets same as taker_pays.";
 
  209        {{pay_currency, pay_issuer}, {get_currency, get_issuer}, domain},
 
  210        takerID ? *takerID : beast::zero,
 
 
  227    if (ledger == 
nullptr)
 
 
bool isObjectOrNull() const
 
std::string asString() const
Returns the unquoted string value.
 
bool isMember(char const *key) const
Return true if the object has a member named key.
 
virtual JobQueue & getJobQueue()=0
 
int getJobCountGE(JobType t) const
All waiting jobs at or greater than this priority.
 
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
 
constexpr bool parseHex(std::string_view sv)
Parse a hex string into a base_uint.
 
static LimitRange constexpr bookOffers
Limits for the book_offers command.
 
Json::Value make_error(error_code_i code)
Returns a new json object that reflects the error code.
 
Json::Value computeBookChanges(std::shared_ptr< L const > const &lpAccepted)
 
Json::Value invalid_field_error(std::string const &name)
 
Json::Value object_field_error(std::string const &name)
 
Json::Value expected_field_error(std::string const &name, std::string const &type)
 
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 missing_field_error(std::string const &name)
 
Charge const feeMediumBurdenRPC
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
AccountID const & noAccount()
A placeholder for empty accounts.
 
bool isXRP(AccountID const &c)
 
AccountID const & xrpAccount()
Compute AccountID from public key.
 
bool to_issuer(AccountID &, std::string const &)
Convert hex or base58 string to AccountID.
 
Json::Value doBookChanges(RPC::JsonContext &context)
 
Json::Value rpcError(int iError)
 
Json::Value doBookOffers(RPC::JsonContext &context)
 
bool to_currency(Currency &, std::string const &)
Tries to convert a string to a Currency, returns true on success.
 
Resource::Charge & loadType