20#include <test/jtx/AMM.h>
21#include <test/jtx/AMMTest.h>
22#include <test/jtx/Env.h>
23#include <test/jtx/pay.h>
25#include <xrpld/rpc/RPCHandler.h>
26#include <xrpld/rpc/detail/RPCHelpers.h>
28#include <xrpl/protocol/STParsedJSON.h>
29#include <xrpl/resource/Fees.h>
43 fund(env, gw, accounts,
XRP(30000), amts, how);
54 for (
auto const& account : accounts)
58 env.
fund(xrp, account);
62 for (
auto const& account : accounts)
64 for (
auto const& amt : amts)
66 env.
trust(amt + amt, account);
67 env(
pay(amt.issue().account, account, amt));
85 fund(env, accounts, xrp, amts, how);
111 for (
auto const& features : vfeatures)
113 Env env{*
this, features};
115 auto const [asset1, asset2] =
120 auto const defXRP =
XRP(30000);
123 return a +
XRP(1000);
130 auto const toFund1 = tofund(asset1);
131 auto const toFund2 = tofund(asset2);
132 BEAST_EXPECT(asset1 <= toFund1 && asset2 <= toFund2);
134 if (!asset1.native() && !asset2.native())
136 else if (asset1.native())
138 else if (asset2.native())
148 ammAlice.expectBalances(asset1, asset2, ammAlice.tokens())))
156 return env.
current()->fees().accountReserve(count);
162 return env.
current()->fees().increment;
172 cfg->PATH_SEARCH_OLD = 7;
173 cfg->PATH_SEARCH = 7;
174 cfg->PATH_SEARCH_MAX = 10;
190 auto& app = env.
app();
199 app.getLedgerMaster(),
209 params[jss::command] =
"ripple_path_find";
210 params[jss::source_account] =
toBase58(src);
211 params[jss::destination_account] =
toBase58(dst);
225 app.getJobQueue().postCoro(
jtCLIENT,
"RPC-Client", [&](
auto const& coro) {
226 context.params = std::move(params);
232 using namespace std::chrono_literals;
234 BEAST_EXPECT(!result.
isMember(jss::error));
248 env, src, dst, saDstAmount, saSendMax, saSrcCurrency);
249 BEAST_EXPECT(!result.
isMember(jss::error));
252 if (result.
isMember(jss::destination_amount))
257 if (result.
isMember(jss::alternatives))
259 auto const& alts = result[jss::alternatives];
262 auto const&
path = alts[0u];
264 if (
path.isMember(jss::source_amount))
267 if (
path.isMember(jss::destination_amount))
270 if (
path.isMember(jss::paths_computed))
273 p[
"Paths"] =
path[jss::paths_computed];
bool isMember(char const *key) const
Return true if the object has a member named key.
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={supported_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)