36 auto const alice =
Account(
"alice");
37 auto const bob =
Account(
"bob");
38 auto const carol =
Account(
"carol");
39 auto const dan =
Account(
"dan");
40 auto const erin =
Account(
"erin");
41 auto const USDA = alice[
"USD"];
42 auto const USDB = bob[
"USD"];
43 auto const USDC = carol[
"USD"];
44 auto const USDD = dan[
"USD"];
46 auto const USD = gw[
"USD"];
49 Env env(*
this, features);
51 env.
fund(
XRP(10000), alice, bob, gw);
53 env.
trust(USD(1000), alice, bob);
54 env(
pay(gw, alice, USD(100)));
55 env(
pay(alice, bob, USD(10)),
paths(USD));
60 Env env(*
this, features);
62 env.
fund(
XRP(10000), alice, bob);
64 env(
pay(alice, bob,
XRP(100)));
70 Env env(*
this, features);
72 env.
fund(
XRP(10000), alice, bob, gw);
74 env.
trust(USD(1000), alice, bob);
75 env(
pay(gw, alice, USD(100)));
83 Env env(*
this, features);
85 env.
fund(
XRP(10000), alice, bob, carol, dan);
87 env.
trust(USDA(10), bob);
88 env.
trust(USDB(10), carol);
89 env.
trust(USDC(10), dan);
90 env(
pay(alice, dan, USDC(10)),
paths(USDA));
96 Env env(*
this, features);
98 env.
fund(
XRP(10000), alice, bob, carol, dan);
100 env.
trust(USDA(10), bob);
101 env.
trust(USDB(10), alice, carol);
102 env.
trust(USDC(10), dan);
106 env(
pay(bob, alice, USDB(6)));
114 Env env(*
this, features);
116 env.
fund(
XRP(10000), alice, bob, carol, dan);
118 env.
trust(USDA(10), bob);
119 env.
trust(USDB(10), alice, carol);
120 env.
trust(USDC(10), dan);
130 Env env(*
this, features);
132 env.
fund(
XRP(10000), alice, bob, carol, dan, erin);
134 env.
trust(USDA(10), bob, carol);
135 env.
trust(USDB(10), dan);
136 env.
trust(USDC(10), alice, dan);
137 env.
trust(USDD(20), erin);
139 env(
rate(carol, 1.1));
142 env(
pay(carol, alice, USDC(10)));
151 Env env(*
this, features);
153 env.
fund(
XRP(10000), alice, bob, carol);
155 env.
trust(USDA(10), bob);
156 env.
trust(USDB(10), carol);
158 env(
pay(alice, carol, USDB(5)),
175 auto const alice =
Account(
"alice");
176 auto const bob =
Account(
"bob");
177 auto const carol =
Account(
"carol");
178 auto const dan =
Account(
"dan");
179 auto const USDA = alice[
"USD"];
180 auto const USDB = bob[
"USD"];
181 auto const USDC = carol[
"USD"];
182 auto const USDD = dan[
"USD"];
185 for (
auto bobDanQIn : {80, 100, 120})
186 for (
auto bobAliceQOut : {80, 100, 120})
188 Env env(*
this, features);
189 env.
fund(
XRP(10000), alice, bob, carol, dan);
193 env(
trust(carol, USDA(100)));
195 env(
pay(alice, bob, USDA(100)));
199 if (bobAliceQOut > bobDanQIn)
200 env.
require(
balance(bob, USDD(10.0 *
double(bobAliceQOut) /
double(bobDanQIn))));
207 for (
auto carolAliceQIn : {80, 100, 120})
209 Env env(*
this, features);
210 env.
fund(
XRP(10000), alice, bob, carol);
213 env(
trust(bob, USDA(10)));
216 env(
pay(alice, bob, USDA(10)));
218 env(
pay(bob, carol, USDA(5)),
sendmax(USDA(10)));
219 auto const effectiveQ = carolAliceQIn > 100 ? 1.0 : carolAliceQIn / 100.0;
224 for (
auto bobAliceQOut : {80, 100, 120})
226 Env env(*
this, features);
227 env.
fund(
XRP(10000), alice, bob, carol);
230 env(
trust(carol, USDA(10)));
232 env(
pay(alice, bob, USDA(10)));
234 env(
pay(bob, carol, USDA(5)),
sendmax(USDA(5)));
247 auto const gw =
Account(
"gateway");
248 auto const USD = gw[
"USD"];
249 auto const BTC = gw[
"BTC"];
250 auto const EUR = gw[
"EUR"];
257 Env env(*
this, features);
259 env.
fund(
XRP(10000), alice, bob, carol, gw);
261 env.
trust(USD(1000), alice, bob, carol);
262 env.
trust(BTC(1000), alice, bob, carol);
264 env(
pay(gw, alice, BTC(50)));
265 env(
pay(gw, bob, USD(50)));
267 env(
offer(bob, BTC(50), USD(50)));
275 BEAST_EXPECT(!
isOffer(env, bob, BTC(50), USD(50)));
279 Env env(*
this, features);
281 env.
fund(
XRP(10000), alice, bob, carol, gw);
283 env.
trust(USD(1000), alice, bob, carol);
284 env.
trust(BTC(1000), alice, bob, carol);
286 env(
pay(gw, alice, BTC(50)));
287 env(
pay(gw, bob, USD(50)));
298 BEAST_EXPECT(!
isOffer(env, bob,
XRP(50), USD(50)));
299 BEAST_EXPECT(!
isOffer(env, bob, BTC(50),
XRP(50)));
303 Env env(*
this, features);
305 env.
fund(
XRP(10000), alice, bob, carol, gw);
307 env.
trust(USD(1000), alice, bob, carol);
308 env.
trust(BTC(1000), alice, bob, carol);
310 env(
pay(gw, bob, USD(50)));
320 BEAST_EXPECT(!
isOffer(env, bob,
XRP(50), USD(50)));
324 Env env(*
this, features);
326 env.
fund(
XRP(10000), alice, bob, carol, gw);
328 env.
trust(USD(1000), alice, bob, carol);
329 env.
trust(BTC(1000), alice, bob, carol);
331 env(
pay(gw, alice, USD(50)));
341 BEAST_EXPECT(!
isOffer(env, bob, USD(50),
XRP(50)));
345 Env env(*
this, features);
347 env.
fund(
XRP(10000), alice, bob, carol, gw);
349 env.
trust(USD(1000), alice, bob, carol);
350 env.
trust(BTC(1000), alice, bob, carol);
351 env.
trust(EUR(1000), alice, bob, carol);
353 env(
pay(gw, alice, BTC(60)));
354 env(
pay(gw, bob, USD(50)));
355 env(
pay(gw, bob, EUR(50)));
357 env(
offer(bob, BTC(50), USD(50)));
358 env(
offer(bob, BTC(40), EUR(50)));
359 env(
offer(bob, EUR(50), USD(50)));
362 env(
pay(bob, gw, EUR(50)));
363 BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
364 BEAST_EXPECT(
isOffer(env, bob, BTC(40), EUR(50)));
365 BEAST_EXPECT(
isOffer(env, bob, EUR(50), USD(50)));
375 BEAST_EXPECT(!
isOffer(env, bob, BTC(50), USD(50)));
377 BEAST_EXPECT(!
isOffer(env, bob, BTC(40), EUR(50)));
379 BEAST_EXPECT(
isOffer(env, bob, EUR(50), USD(50)));
390 Env env(*
this, features);
392 env.
fund(
XRP(10000), alice, bob, carol, gw);
394 env.
trust(USD(1000), alice, bob, carol);
395 env.
trust(BTC(1000), alice, bob, carol);
396 env.
trust(EUR(1000), alice, bob, carol);
398 env(
pay(gw, alice, BTC(60)));
399 env(
pay(gw, bob, USD(60)));
400 env(
pay(gw, bob, EUR(50)));
401 env(
pay(gw, carol, EUR(1)));
403 env(
offer(bob, BTC(50), USD(50)));
404 env(
offer(bob, BTC(60), EUR(50)));
405 env(
offer(carol, BTC(1000), EUR(1)));
406 env(
offer(bob, EUR(50), USD(50)));
409 env(
pay(bob, gw, EUR(50)));
410 BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
411 BEAST_EXPECT(
isOffer(env, bob, BTC(60), EUR(50)));
412 BEAST_EXPECT(
isOffer(env, carol, BTC(1000), EUR(1)));
415 auto const flowResult = [&] {
452 BEAST_EXPECT(flowResult.removableOffers.size() == 1);
454 if (flowResult.removableOffers.empty())
457 for (
auto const& o : flowResult.removableOffers)
465 BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
466 BEAST_EXPECT(
isOffer(env, carol, BTC(1000), EUR(1)));
468 BEAST_EXPECT(!
isOffer(env, bob, BTC(60), EUR(50)));
478 Env env(*
this, features);
479 env.
fund(
XRP(10000), alice, bob, carol, gw);
482 env.
trust(USD(1000), alice, bob, carol);
483 env.
trust(EUR(1000), alice, bob, carol);
485 env(
pay(gw, alice, USD(1000)));
486 env(
pay(gw, bob, EUR(1000)));
492 bool const reducedOffersV2 = features[fixReducedOffersV2];
499 env(
pay(alice, carol, EUR(1)),
505 if (!reducedOffersV2)
513 if (BEAST_EXPECT(usdOffer))
519 bookDirStr.
erase(0, 48);
528 BEAST_EXPECT(actualRate > bookRate);