20#include <test/jtx/AMM.h>
21#include <test/jtx/AMMTest.h>
22#include <test/jtx/CaptureLogs.h>
23#include <test/jtx/Env.h>
24#include <test/jtx/pay.h>
26#include <xrpld/rpc/RPCHandler.h>
27#include <xrpld/rpc/detail/RPCHelpers.h>
29#include <xrpl/protocol/STParsedJSON.h>
30#include <xrpl/resource/Fees.h>
44 fund(env, gw, accounts,
XRP(30000), amts, how);
55 for (
auto const& account : accounts)
59 env.
fund(xrp, account);
63 for (
auto const& account : accounts)
65 for (
auto const& amt : amts)
67 env.
trust(amt + amt, account);
68 env(
pay(amt.issue().account, account, amt));
86 fund(env, accounts, xrp, amts, how);
113 .
pool = pool, .tfee = tfee, .ter =
ter, .features = vfeatures});
125 for (
auto const& features :
arg.features)
132 auto const [asset1, asset2] =
137 auto const defXRP =
XRP(30000);
140 return a +
XRP(1000);
147 auto const toFund1 = tofund(asset1);
148 auto const toFund2 = tofund(asset2);
149 BEAST_EXPECT(asset1 <= toFund1 && asset2 <= toFund2);
151 if (!asset1.native() && !asset2.native())
153 else if (asset1.native())
155 else if (asset2.native())
165 ammAlice.expectBalances(asset1, asset2, ammAlice.tokens())))
173 return env.
current()->fees().accountReserve(count);
179 return env.
current()->fees().increment;
189 cfg->PATH_SEARCH_OLD = 7;
190 cfg->PATH_SEARCH = 7;
191 cfg->PATH_SEARCH_MAX = 10;
207 auto& app = env.
app();
216 app.getLedgerMaster(),
226 params[jss::command] =
"ripple_path_find";
227 params[jss::source_account] =
toBase58(src);
228 params[jss::destination_account] =
toBase58(dst);
242 app.getJobQueue().postCoro(
jtCLIENT,
"RPC-Client", [&](
auto const& coro) {
243 context.params = std::move(params);
249 using namespace std::chrono_literals;
251 BEAST_EXPECT(!result.
isMember(jss::error));
265 env, src, dst, saDstAmount, saSendMax, saSrcCurrency);
266 BEAST_EXPECT(!result.
isMember(jss::error));
269 if (result.
isMember(jss::destination_amount))
274 if (result.
isMember(jss::alternatives))
276 auto const& alts = result[jss::alternatives];
279 auto const&
path = alts[0u];
281 if (
path.isMember(jss::source_amount))
284 if (
path.isMember(jss::destination_amount))
287 if (
path.isMember(jss::paths_computed))
290 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