3#include <xrpl/beast/unit_test.h>
4#include <xrpl/protocol/Feature.h>
18 Env env(*
this, features);
20 auto const gw =
Account(
"gateway");
21 auto const USD = gw[
"USD"];
23 env.
fund(
XRP(100000000), gw,
"alice",
"bob",
"carol",
"dan");
24 env.
trust(USD(1),
"bob");
25 env(
pay(gw,
"bob", USD(1)));
26 env.
trust(USD(1),
"dan");
27 env(
pay(gw,
"dan", USD(1)));
33 env(
offer(
"alice", USD(1000),
XRP(1000)));
43 env(
offer(
"carol", USD(1000),
XRP(1000)));
58 Env env(*
this, features);
60 auto const gw =
Account(
"gateway");
61 auto const USD = gw[
"USD"];
64 int const maxConsumed = 1000;
66 env.
fund(
XRP(100000000), gw,
"alice",
"bob",
"carol");
67 int const bobOfferCount = maxConsumed + 150;
68 env.
trust(USD(bobOfferCount),
"bob");
69 env(
pay(gw,
"bob", USD(bobOfferCount)));
71 n_offers(env, bobOfferCount,
"bob",
XRP(1), USD(1));
75 env(
offer(
"alice", USD(bobOfferCount),
XRP(bobOfferCount)));
83 env(
offer(
"carol", USD(1000),
XRP(1000)));
96 Env env(*
this, features);
98 auto const gw =
Account(
"gateway");
99 auto const USD = gw[
"USD"];
101 env.
fund(
XRP(100000000), gw,
"alice",
"bob",
"carol",
"dan",
"evita");
104 int const maxConsumed = 1000;
106 int const evitaOfferCount{maxConsumed + 49};
107 env.
trust(USD(1000),
"alice");
108 env(
pay(gw,
"alice", USD(1000)));
109 env.
trust(USD(1000),
"carol");
110 env(
pay(gw,
"carol", USD(1)));
111 env.
trust(USD(evitaOfferCount + 1),
"evita");
112 env(
pay(gw,
"evita", USD(evitaOfferCount + 1)));
115 int const carolsOfferCount{700};
117 n_offers(env, carolsOfferCount,
"carol",
XRP(1), USD(1));
118 n_offers(env, evitaOfferCount,
"evita",
XRP(1), USD(1));
123 env(
offer(
"bob", USD(1000),
XRP(1000)));
135 env(
offer(
"dan", USD(maxConsumed + 50),
XRP(maxConsumed + 50)));
149 testcase(
"Auto Bridged Limits Taker");
152 Env env(*
this, features);
154 auto const gw =
Account(
"gateway");
155 auto const USD = gw[
"USD"];
156 auto const EUR = gw[
"EUR"];
158 env.
fund(
XRP(100000000), gw,
"alice",
"bob",
"carol",
"dan",
"evita");
160 env.
trust(USD(2000),
"alice");
161 env(
pay(gw,
"alice", USD(2000)));
162 env.
trust(USD(1000),
"carol");
163 env(
pay(gw,
"carol", USD(3)));
164 env.
trust(USD(1000),
"evita");
165 env(
pay(gw,
"evita", USD(1000)));
170 n_offers(env, 1001,
"evita", EUR(1), USD(1));
188 env.
trust(EUR(10000),
"bob");
190 env(
pay(gw,
"bob", EUR(1000)));
192 env(
offer(
"bob", USD(2000), EUR(2000)));
217 env.
trust(EUR(10000),
"dan");
219 env(
pay(gw,
"dan", EUR(1000)));
222 env(
offer(
"dan", USD(900), EUR(900)));
253 auto const gw =
Account(
"gateway");
254 auto const alice =
Account(
"alice");
255 auto const bob =
Account(
"bob");
256 auto const carol =
Account(
"carol");
258 auto const USD = gw[
"USD"];
259 auto const EUR = gw[
"EUR"];
273 Env env(*
this, features);
275 env.
fund(
XRP(100000000), gw, alice, bob, carol);
277 env.
trust(USD(4000), alice);
278 env(
pay(gw, alice, USD(4000)));
279 env.
trust(USD(1000), carol);
280 env(
pay(gw, carol, USD(3)));
289 n_offers(env, 1, alice, EUR(500), USD(500));
329 env.
trust(EUR(10000), bob);
331 env(
pay(gw, bob, EUR(2000)));
333 env(
offer(bob, USD(4000), EUR(4000)));
343 auto const numAOffers = 2000 + 100 + 1000 + 1 - (2 * 100 + 2 * 199 + 1 + 1);
350 Env env(*
this, features);
352 env.
fund(
XRP(100000000), gw, alice, bob, carol);
354 env.
trust(USD(4000), alice);
355 env(
pay(gw, alice, USD(4000)));
356 env.
trust(USD(1000), carol);
357 env(
pay(gw, carol, USD(3)));
361 n_offers(env, 1, alice, EUR(1), USD(10));
367 n_offers(env, 1, alice, EUR(499), USD(499));
400 env.
trust(EUR(10000), bob);
402 env(
pay(gw, bob, EUR(2000)));
404 env(
offer(bob, USD(4000), EUR(4000)));
414 auto const numAOffers = 1 + 2000 + 100 + 1000 + 1 - (1 + 2 * 100 + 2 * 199 + 1 + 1);
429 auto const gw =
Account(
"gateway");
430 auto const alice =
Account(
"alice");
431 auto const bob =
Account(
"bob");
433 auto const USD = gw[
"USD"];
435 Env env(*
this, features);
437 env.
fund(
XRP(100000000), gw, alice, bob);
439 env.
trust(USD(8000), alice);
440 env.
trust(USD(8000), bob);
443 env(
pay(gw, alice, USD(8000)));
487 testAll(sa - featurePermissionedDEX);
491BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(CrossingLimits, app,
xrpl, 10);
testcase_t testcase
Memberspace for declaring test cases.
void run() override
Runs the suite.
void testAutoBridgedLimitsTaker(FeatureBitset features)
void testStepAndCrossingLimit(FeatureBitset features)
void testOfferOverflow(FeatureBitset features)
void testAutoBridgedLimits(FeatureBitset features)
void testStepLimit(FeatureBitset features)
void testCrossingLimit(FeatureBitset features)
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.
void require(Args const &... args)
Check a set of requirements.
Match the number of items in the account's owner directory.
Set the expected result code for a JTx The test will fail if the code doesn't match.
XRP_t const XRP
Converts to XRP Issue or STAmount.
Json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
FeatureBitset testable_amendments()
owner_count< ltOFFER > offers
Match the number of offers in the account's owner directory.
void n_offers(Env &env, std::size_t n, Account const &account, STAmount const &in, STAmount const &out)
Json::Value offer(Account const &account, STAmount const &takerPays, STAmount const &takerGets, std::uint32_t flags)
Create an offer.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.