41 auto const alice =
Account(
"alice");
42 auto const bob =
Account(
"bob");
43 auto const carol =
Account(
"carol");
44 auto const dan =
Account(
"dan");
45 auto const erin =
Account(
"erin");
46 auto const USDA = alice[
"USD"];
47 auto const USDB = bob[
"USD"];
48 auto const USDC = carol[
"USD"];
49 auto const USDD = dan[
"USD"];
51 auto const USD = gw[
"USD"];
54 Env env(*
this, features);
56 env.
fund(
XRP(10000), alice, bob, gw);
58 env.
trust(USD(1000), alice, bob);
59 env(
pay(gw, alice, USD(100)));
60 env(
pay(alice, bob, USD(10)),
paths(USD));
65 Env env(*
this, features);
67 env.
fund(
XRP(10000), alice, bob);
69 env(
pay(alice, bob,
XRP(100)));
75 Env env(*
this, features);
77 env.
fund(
XRP(10000), alice, bob, gw);
79 env.
trust(USD(1000), alice, bob);
80 env(
pay(gw, alice, USD(100)));
83 env(
pay(alice, bob, USD(110)),
90 Env env(*
this, features);
92 env.
fund(
XRP(10000), alice, bob, carol, dan);
94 env.
trust(USDA(10), bob);
95 env.
trust(USDB(10), carol);
96 env.
trust(USDC(10), dan);
97 env(
pay(alice, dan, USDC(10)),
paths(USDA));
106 Env env(*
this, features);
108 env.
fund(
XRP(10000), alice, bob, carol, dan);
110 env.
trust(USDA(10), bob);
111 env.
trust(USDB(10), alice, carol);
112 env.
trust(USDC(10), dan);
116 env(
pay(bob, alice, USDB(6)));
117 env(
pay(alice, dan, USDC(5)),
127 Env env(*
this, features);
129 env.
fund(
XRP(10000), alice, bob, carol, dan);
131 env.
trust(USDA(10), bob);
132 env.
trust(USDB(10), alice, carol);
133 env.
trust(USDC(10), dan);
136 env(
pay(alice, dan, USDC(5)),
146 Env env(*
this, features);
148 env.
fund(
XRP(10000), alice, bob, carol, dan, erin);
150 env.
trust(USDA(10), bob, carol);
151 env.
trust(USDB(10), dan);
152 env.
trust(USDC(10), alice, dan);
153 env.
trust(USDD(20), erin);
155 env(
rate(carol, 1.1));
158 env(
pay(carol, alice, USDC(10)));
159 env(
pay(alice, erin, USDD(5)),
170 Env env(*
this, features);
172 env.
fund(
XRP(10000), alice, bob, carol);
174 env.
trust(USDA(10), bob);
175 env.
trust(USDB(10), carol);
177 env(
pay(alice, carol, USDB(5)),
183 env(
pay(alice, carol, USDB(5)),
196 auto const alice =
Account(
"alice");
197 auto const bob =
Account(
"bob");
198 auto const carol =
Account(
"carol");
199 auto const dan =
Account(
"dan");
200 auto const USDA = alice[
"USD"];
201 auto const USDB = bob[
"USD"];
202 auto const USDC = carol[
"USD"];
203 auto const USDD = dan[
"USD"];
206 for (
auto bobDanQIn : {80, 100, 120})
207 for (
auto bobAliceQOut : {80, 100, 120})
209 Env env(*
this, features);
210 env.
fund(
XRP(10000), alice, bob, carol, dan);
214 env(
trust(carol, USDA(100)));
216 env(
pay(alice, bob, USDA(100)));
218 env(
pay(dan, carol, USDA(10)),
223 if (bobAliceQOut > bobDanQIn)
226 USDD(10.0 *
double(bobAliceQOut) /
double(bobDanQIn))));
233 for (
auto carolAliceQIn : {80, 100, 120})
235 Env env(*
this, features);
236 env.
fund(
XRP(10000), alice, bob, carol);
239 env(
trust(bob, USDA(10)));
242 env(
pay(alice, bob, USDA(10)));
244 env(
pay(bob, carol, USDA(5)),
sendmax(USDA(10)));
245 auto const effectiveQ =
246 carolAliceQIn > 100 ? 1.0 : carolAliceQIn / 100.0;
251 for (
auto bobAliceQOut : {80, 100, 120})
253 Env env(*
this, features);
254 env.
fund(
XRP(10000), alice, bob, carol);
257 env(
trust(carol, USDA(10)));
259 env(
pay(alice, bob, USDA(10)));
261 env(
pay(bob, carol, USDA(5)),
sendmax(USDA(5)));
274 auto const gw =
Account(
"gateway");
275 auto const USD = gw[
"USD"];
276 auto const BTC = gw[
"BTC"];
277 auto const EUR = gw[
"EUR"];
284 Env env(*
this, features);
286 env.
fund(
XRP(10000), alice, bob, carol, gw);
288 env.
trust(USD(1000), alice, bob, carol);
289 env.
trust(BTC(1000), alice, bob, carol);
291 env(
pay(gw, alice, BTC(50)));
292 env(
pay(gw, bob, USD(50)));
294 env(
offer(bob, BTC(50), USD(50)));
302 BEAST_EXPECT(!
isOffer(env, bob, BTC(50), USD(50)));
306 Env env(*
this, features);
308 env.
fund(
XRP(10000), alice, bob, carol, gw);
310 env.
trust(USD(1000), alice, bob, carol);
311 env.
trust(BTC(1000), alice, bob, carol);
313 env(
pay(gw, alice, BTC(50)));
314 env(
pay(gw, bob, USD(50)));
325 BEAST_EXPECT(!
isOffer(env, bob,
XRP(50), USD(50)));
326 BEAST_EXPECT(!
isOffer(env, bob, BTC(50),
XRP(50)));
330 Env env(*
this, features);
332 env.
fund(
XRP(10000), alice, bob, carol, gw);
334 env.
trust(USD(1000), alice, bob, carol);
335 env.
trust(BTC(1000), alice, bob, carol);
337 env(
pay(gw, bob, USD(50)));
347 BEAST_EXPECT(!
isOffer(env, bob,
XRP(50), USD(50)));
351 Env env(*
this, features);
353 env.
fund(
XRP(10000), alice, bob, carol, gw);
355 env.
trust(USD(1000), alice, bob, carol);
356 env.
trust(BTC(1000), alice, bob, carol);
358 env(
pay(gw, alice, USD(50)));
368 BEAST_EXPECT(!
isOffer(env, bob, USD(50),
XRP(50)));
372 Env env(*
this, features);
374 env.
fund(
XRP(10000), alice, bob, carol, gw);
376 env.
trust(USD(1000), alice, bob, carol);
377 env.
trust(BTC(1000), alice, bob, carol);
378 env.
trust(EUR(1000), alice, bob, carol);
380 env(
pay(gw, alice, BTC(60)));
381 env(
pay(gw, bob, USD(50)));
382 env(
pay(gw, bob, EUR(50)));
384 env(
offer(bob, BTC(50), USD(50)));
385 env(
offer(bob, BTC(40), EUR(50)));
386 env(
offer(bob, EUR(50), USD(50)));
389 env(
pay(bob, gw, EUR(50)));
390 BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
391 BEAST_EXPECT(
isOffer(env, bob, BTC(40), EUR(50)));
392 BEAST_EXPECT(
isOffer(env, bob, EUR(50), USD(50)));
394 env(
pay(alice, carol, USD(50)),
405 BEAST_EXPECT(!
isOffer(env, bob, BTC(50), USD(50)));
407 BEAST_EXPECT(!
isOffer(env, bob, BTC(40), EUR(50)));
409 BEAST_EXPECT(
isOffer(env, bob, EUR(50), USD(50)));
420 Env env(*
this, features);
422 env.
fund(
XRP(10000), alice, bob, carol, gw);
424 env.
trust(USD(1000), alice, bob, carol);
425 env.
trust(BTC(1000), alice, bob, carol);
426 env.
trust(EUR(1000), alice, bob, carol);
428 env(
pay(gw, alice, BTC(60)));
429 env(
pay(gw, bob, USD(60)));
430 env(
pay(gw, bob, EUR(50)));
431 env(
pay(gw, carol, EUR(1)));
433 env(
offer(bob, BTC(50), USD(50)));
434 env(
offer(bob, BTC(60), EUR(50)));
435 env(
offer(carol, BTC(1000), EUR(1)));
436 env(
offer(bob, EUR(50), USD(50)));
439 env(
pay(bob, gw, EUR(50)));
440 BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
441 BEAST_EXPECT(
isOffer(env, bob, BTC(60), EUR(50)));
442 BEAST_EXPECT(
isOffer(env, carol, BTC(1000), EUR(1)));
445 auto const flowResult = [&] {
482 BEAST_EXPECT(flowResult.removableOffers.size() == 1);
485 if (flowResult.removableOffers.empty())
488 for (
auto const& o : flowResult.removableOffers)
496 BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
497 BEAST_EXPECT(
isOffer(env, carol, BTC(1000), EUR(1)));
499 BEAST_EXPECT(!
isOffer(env, bob, BTC(60), EUR(50)));
509 Env env(*
this, features);
510 env.
fund(
XRP(10000), alice, bob, carol, gw);
513 env.
trust(USD(1000), alice, bob, carol);
514 env.
trust(EUR(1000), alice, bob, carol);
516 env(
pay(gw, alice, USD(1000)));
517 env(
pay(gw, bob, EUR(1000)));
523 bool const reducedOffersV2 = features[fixReducedOffersV2];
529 TER const expectedTER =
531 env(
pay(alice, carol, EUR(1)),
537 if (!reducedOffersV2)
545 if (BEAST_EXPECT(usdOffer))
551 to_string(usdOffer->at(sfBookDirectory));
552 bookDirStr.
erase(0, 48);
556 usdOffer->at(sfTakerGets), usdOffer->at(sfTakerPays));
562 BEAST_EXPECT(actualRate > bookRate);