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);
101 for (
auto const& features :
arg.features)
110 features - featureSingleAssetVault - featureLendingProtocol,
117 auto const defXRP =
XRP(30000);
120 return a +
XRP(1000);
127 auto const toFund1 = toFund(asset1);
128 auto const toFund2 = toFund(asset2);
129 BEAST_EXPECT(asset1 <= toFund1 && asset2 <= toFund2);
131 if (!asset1.native() && !asset2.native())
133 else if (asset1.native())
135 else if (asset2.native())
139 if (BEAST_EXPECT(ammAlice.expectBalances(asset1, asset2, ammAlice.tokens())))
147 return env.
current()->fees().accountReserve(count);
153 return env.
current()->fees().increment;
163 cfg->PATH_SEARCH_OLD = 7;
164 cfg->PATH_SEARCH = 7;
165 cfg->PATH_SEARCH_MAX = 10;
181 auto& app = env.
app();
190 app.getLedgerMaster(),
200 params[jss::command] =
"ripple_path_find";
201 params[jss::source_account] =
toBase58(src);
202 params[jss::destination_account] =
toBase58(dst);
216 app.getJobQueue().postCoro(
jtCLIENT,
"RPC-Client", [&](
auto const& coro) {
217 context.params = std::move(params);
223 using namespace std::chrono_literals;
225 BEAST_EXPECT(!result.
isMember(jss::error));
239 BEAST_EXPECT(!result.
isMember(jss::error));
242 if (result.
isMember(jss::destination_amount))
247 if (result.
isMember(jss::alternatives))
249 auto const& alts = result[jss::alternatives];
252 auto const&
path = alts[0u];
254 if (
path.isMember(jss::source_amount))
257 if (
path.isMember(jss::destination_amount))
260 if (
path.isMember(jss::paths_computed))
263 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.
Sets the new scale and restores the old scale when it leaves scope.
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)
XRPAmount ammCrtFee(jtx::Env &env) 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)
XRPAmount reserve(jtx::Env &env, std::uint32_t count) const
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)
Convenience class to test AMM functionality.
Immutable cryptographic account descriptor.
A transaction testing environment.
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
void trust(STAmount const &amount, Account const &account)
Establish trust lines.
beast::Journal const journal
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
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
void fund(jtx::Env &env, jtx::Account const &gw, std::vector< jtx::Account > const &accounts, std::vector< STAmount > const &amts, Fund how)
XRP_t const XRP
Converts to XRP Issue or STAmount.
Json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
std::unique_ptr< Config > envconfig()
creates and initializes a default configuration for jtx::Env
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
STAmount amountFromJson(SField const &name, Json::Value const &v)
std::string to_string(base_uint< Bits, Tag > const &a)
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...
std::optional< std::pair< STAmount, STAmount > > pool