1#include <test/jtx/AMM.h> 
    2#include <test/jtx/AMMTest.h> 
    3#include <test/jtx/CaptureLogs.h> 
    4#include <test/jtx/Env.h> 
    5#include <test/jtx/pay.h> 
    7#include <xrpld/rpc/RPCHandler.h> 
    9#include <xrpl/protocol/ApiVersion.h> 
   10#include <xrpl/protocol/STParsedJSON.h> 
   11#include <xrpl/resource/Fees.h> 
   25    fund(env, gw, accounts, 
XRP(30000), amts, how);
 
 
   36    for (
auto const& account : accounts)
 
   40            env.
fund(xrp, account);
 
   44    for (
auto const& account : accounts)
 
   46        for (
auto const& amt : amts)
 
   48            env.
trust(amt + amt, account);
 
   49            env(
pay(amt.issue().account, account, amt));
 
 
   67    fund(env, accounts, xrp, amts, how);
 
 
   94            .
pool = pool, .tfee = tfee, .ter = 
ter, .features = vfeatures});
 
 
  106    for (
auto const& features : 
arg.features)
 
  113        auto const [asset1, asset2] =
 
  118                auto const defXRP = 
XRP(30000);
 
  121                return a + 
XRP(1000);
 
  128        auto const toFund1 = tofund(asset1);
 
  129        auto const toFund2 = tofund(asset2);
 
  130        BEAST_EXPECT(asset1 <= toFund1 && asset2 <= toFund2);
 
  132        if (!asset1.native() && !asset2.native())
 
  134        else if (asset1.native())
 
  136        else if (asset2.native())
 
  146                ammAlice.expectBalances(asset1, asset2, ammAlice.tokens())))
 
 
  154    return env.
current()->fees().accountReserve(count);
 
 
  160    return env.
current()->fees().increment;
 
 
  170        cfg->PATH_SEARCH_OLD = 7;
 
  171        cfg->PATH_SEARCH = 7;
 
  172        cfg->PATH_SEARCH_MAX = 10;
 
 
  188    auto& app = env.
app();
 
  197         app.getLedgerMaster(),
 
  207    params[jss::command] = 
"ripple_path_find";
 
  208    params[jss::source_account] = 
toBase58(src);
 
  209    params[jss::destination_account] = 
toBase58(dst);
 
  223    app.getJobQueue().postCoro(
jtCLIENT, 
"RPC-Client", [&](
auto const& coro) {
 
  224        context.params = std::move(params);
 
  230    using namespace std::chrono_literals;
 
  232    BEAST_EXPECT(!result.
isMember(jss::error));
 
 
  246        env, src, dst, saDstAmount, saSendMax, saSrcCurrency);
 
  247    BEAST_EXPECT(!result.
isMember(jss::error));
 
  250    if (result.
isMember(jss::destination_amount))
 
  255    if (result.
isMember(jss::alternatives))
 
  257        auto const& alts = result[jss::alternatives];
 
  260            auto const& 
path = alts[0u];
 
  262            if (
path.isMember(jss::source_amount))
 
  265            if (
path.isMember(jss::destination_amount))
 
  268            if (
path.isMember(jss::paths_computed))
 
  271                p[
"Paths"] = 
path[jss::paths_computed];
 
 
bool isMember(char const *key) const
Return true if the object has a member named key.
 
std::string const & arg() const
Return the argument associated with the runner.
 
An endpoint that consumes resources.
 
Json::Value getJson(JsonOptions=JsonOptions::none) const override
 
Issue const & issue() const
 
Holds the serialized result of parsing an input JSON object.
 
std::optional< STObject > object
The STObject if the parse was successful.
 
void testAMM(std::function< void(jtx::AMM &, jtx::Env &)> &&cb, std::optional< std::pair< STAmount, STAmount > > const &pool=std::nullopt, std::uint16_t tfee=0, std::optional< jtx::ter > const &ter=std::nullopt, std::vector< FeatureBitset > const &features={testable_amendments()})
testAMM() funds 30,000XRP and 30,000IOU for each non-XRP asset to Alice and Carol
 
bool wait_for(std::chrono::duration< Rep, Period > const &rel_time)
 
std::tuple< STPathSet, STAmount, STAmount > find_paths(jtx::Env &env, jtx::Account const &src, jtx::Account const &dst, STAmount const &saDstAmount, std::optional< STAmount > const &saSendMax=std::nullopt, std::optional< Currency > const &saSrcCurrency=std::nullopt)
 
XRPAmount ammCrtFee(jtx::Env &env) const
 
XRPAmount reserve(jtx::Env &env, std::uint32_t count) const
 
Json::Value find_paths_request(jtx::Env &env, jtx::Account const &src, jtx::Account const &dst, STAmount const &saDstAmount, std::optional< STAmount > const &saSendMax=std::nullopt, std::optional< Currency > const &saSrcCurrency=std::nullopt)
 
Convenience class to test AMM functionality.
 
Immutable cryptographic account descriptor.
 
A transaction testing environment.
 
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
 
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
 
void trust(STAmount const &amount, Account const &account)
Establish trust lines.
 
beast::Journal const journal
 
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
 
Converts to IOU Issue or STAmount.
 
Set Paths, SendMax on a JTx.
 
Set the expected result code for a JTx The test will fail if the code doesn't match.
 
@ arrayValue
array value (ordered list)
 
@ objectValue
object value (collection of name/value pairs).
 
Status doCommand(RPC::JsonContext &context, Json::Value &result)
Execute an RPC command and store the results in a Json::Value.
 
static constexpr auto apiVersionIfUnspecified
 
Charge const feeReferenceRPC
 
Json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
 
void fund(jtx::Env &env, jtx::Account const &gw, std::vector< jtx::Account > const &accounts, std::vector< STAmount > const &amts, Fund how)
 
std::unique_ptr< Config > envconfig()
creates and initializes a default configuration for jtx::Env
 
XRP_t const XRP
Converts to XRP Issue or STAmount.
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
 
Currency const & badCurrency()
We deliberately disallow the currency that looks like "XRP" because too many people were using it ins...
 
STAmount amountFromJson(SField const &name, Json::Value const &v)
 
std::string to_string(base_uint< Bits, Tag > const &a)
 
std::optional< std::pair< STAmount, STAmount > > pool