20 #include <ripple/ledger/ApplyViewImpl.h>
21 #include <ripple/ledger/PaymentSandbox.h>
22 #include <test/jtx/PathSet.h>
23 #include <ripple/ledger/View.h>
24 #include <ripple/protocol/AmountConversions.h>
25 #include <ripple/protocol/Feature.h>
59 testcase (
"selfFunding");
62 Env env (*
this, features);
68 env.
fund (
XRP (10000), snd, rcv, gw1, gw2);
70 auto const USD_gw1 = gw1[
"USD"];
71 auto const USD_gw2 = gw2[
"USD"];
73 env.
trust (USD_gw1 (10), snd);
74 env.
trust (USD_gw2 (10), snd);
75 env.
trust (USD_gw1 (100), rcv);
76 env.
trust (USD_gw2 (100), rcv);
78 env (
pay (gw1, snd, USD_gw1 (2)));
79 env (
pay (gw2, snd, USD_gw2 (4)));
81 env (
offer (snd, USD_gw1 (2), USD_gw2 (2)),
83 env (
offer (snd, USD_gw2 (2), USD_gw1 (2)),
87 Path (gw1, USD_gw2, gw2),
88 Path (gw2, USD_gw1, gw1));
90 env (
pay (snd, rcv,
any (USD_gw1 (4))),
100 testcase (
"subtractCredits");
103 Env env (*
this, features);
108 env.
fund (
XRP (10000), alice, gw1, gw2);
112 auto const USD_gw1 = gw1[
"USD"];
113 auto const USD_gw2 = gw2[
"USD"];
115 env.
trust (USD_gw1 (100), alice);
116 env.
trust (USD_gw2 (100), alice);
118 env (
pay (gw1, alice, USD_gw1 (50)));
119 env (
pay (gw2, alice, USD_gw2 (50)));
121 STAmount const toCredit (USD_gw1 (30));
122 STAmount const toDebit (USD_gw1 (20));
127 auto const iss = USD_gw1.issue ();
131 auto r =
accountSend (av, gw1, alice, toCredit, j);
134 BEAST_EXPECT(
accountHolds (av, alice, iss.currency, iss.account,
136 startingAmount + toCredit);
141 BEAST_EXPECT(
accountHolds (av, alice, iss.currency, iss.account,
143 startingAmount + toCredit - toDebit);
150 auto const iss = USD_gw1.issue ();
155 BEAST_EXPECT(
accountHolds (av, alice, iss.currency, iss.account,
157 startingAmount + toCredit);
160 BEAST_EXPECT(
accountHolds (av, alice, iss.currency, iss.account,
162 startingAmount + toCredit - toDebit);
170 auto const iss = USD_gw1.issue ();
175 auto r =
accountSend (pv, gw1, alice, toCredit, j);
178 BEAST_EXPECT(
accountHolds (pv, alice, iss.currency, iss.account,
186 BEAST_EXPECT(
accountHolds (pv, alice, iss.currency, iss.account,
188 startingAmount - toDebit);
196 auto const iss = USD_gw1.issue ();
201 BEAST_EXPECT(
accountHolds (pv, alice, iss.currency, iss.account,
211 auto const iss = USD_gw1.issue ();
216 BEAST_EXPECT(
accountHolds (pv, alice, iss.currency, iss.account,
218 startingAmount - toDebit);
226 auto const iss = USD_gw1.issue ();
231 BEAST_EXPECT(
accountHolds (pv, alice, iss.currency, iss.account,
241 auto const iss = USD_gw1.issue ();
246 auto r =
accountSend (pv, gw1, alice, toCredit, j);
249 BEAST_EXPECT(
accountHolds (pv, alice, iss.currency, iss.account,
255 BEAST_EXPECT(
accountHolds (pv2, alice, iss.currency, iss.account,
259 auto r =
accountSend (pv2, gw1, alice, toCredit, j);
262 BEAST_EXPECT(
accountHolds (pv2, alice, iss.currency, iss.account,
271 BEAST_EXPECT(
accountHolds (pv, alice, iss.currency, iss.account,
273 startingAmount - toDebit);
279 testcase (
"Tiny balance");
287 Env env (*
this, features);
291 auto const USD = gw[
"USD"];
293 auto const issue = USD.issue ();
302 BEAST_EXPECT(pv.
balanceHook (alice, gw, hugeAmt) == tinyAmt);
307 testcase (
"Reserve");
310 auto accountFundsXRP = [](
ReadView const& view,
319 return env.
current ()->fees ().accountReserve (count);
322 Env env (*
this, features);
344 accountFundsXRP (sb, alice, env.
journal) == beast::zero);
352 testcase (
"balanceHook");
355 Env env (*
this, features);
358 auto const USD = gw[
"USD"];
367 tlIssue.
currency = USD.issue().currency;
375 BEAST_EXPECT (
balance.getIssuer() == USD.issue().account);