20 #include <ripple/protocol/AccountID.h>
21 #include <ripple/protocol/Feature.h>
22 #include <ripple/protocol/jss.h>
23 #include <ripple/protocol/SField.h>
24 #include <ripple/protocol/TxFlags.h>
35 jq[jss::account] = account.human();
36 return env.
rpc(
"json",
"account_lines",
to_string(jq))[jss::result];
46 jq[jss::account] = account.human();
47 jq[jss::ledger_index] =
current ?
"current" :
"validated";
48 return env.
rpc(
"json",
"account_offers",
to_string(jq))[jss::result];
58 testcase(
"RippleState Freeze");
60 using namespace test::jtx;
61 Env env(*
this, features);
64 Account alice {
"alice"};
67 env.fund(XRP(1000), G1, alice, bob);
70 env.trust(G1[
"USD"](100), bob);
71 env.trust(G1[
"USD"](100), alice);
74 env(pay(G1, bob, G1[
"USD"](10)));
75 env(pay(G1, alice, G1[
"USD"](100)));
78 env(offer(alice, XRP(500), G1[
"USD"](100)));
85 BEAST_EXPECT(lines[jss::lines][0u][jss::account] == G1.human());
86 BEAST_EXPECT(lines[jss::lines][0u][jss::limit] ==
"100");
87 BEAST_EXPECT(lines[jss::lines][0u][jss::balance] ==
"10");
94 BEAST_EXPECT(lines[jss::lines][0u][jss::account] == G1.human());
95 BEAST_EXPECT(lines[jss::lines][0u][jss::limit] ==
"100");
96 BEAST_EXPECT(lines[jss::lines][0u][jss::balance] ==
"100");
102 env(pay(alice, bob, G1[
"USD"](1)));
105 env(pay(bob, alice, G1[
"USD"](1)));
113 auto affected = env.meta()->
130 env(offer(bob, G1[
"USD"](5), XRP(25)));
131 auto affected = env.meta()->
149 env(offer(bob, XRP(1), G1[
"USD"](5)),
153 env(pay(alice, bob, G1[
"USD"](1)));
156 env(pay(bob, alice, G1[
"USD"](1)), ter(
tecPATH_DRY));
164 for (
auto const& it : lines[jss::lines])
166 if(it[jss::account] == bob.human())
172 if(! BEAST_EXPECT(bobLine))
174 BEAST_EXPECT(bobLine[jss::freeze] ==
true);
175 BEAST_EXPECT(bobLine[jss::balance] ==
"-16");
182 for (
auto const& it : lines[jss::lines])
184 if(it[jss::account] == G1.human())
190 if(! BEAST_EXPECT(g1Line))
192 BEAST_EXPECT(g1Line[jss::freeze_peer] ==
true);
193 BEAST_EXPECT(g1Line[jss::balance] ==
"16");
200 auto affected = env.meta()->
209 BEAST_EXPECT(! (ff[jss::Flags].asUInt() &
lsfLowFreeze));
218 testcase(
"Global Freeze");
220 using namespace test::jtx;
221 Env env(*
this, features);
229 env.fund(XRP(12000), G1);
230 env.fund(XRP(1000), A1);
231 env.fund(XRP(20000), A2, A3, A4);
234 env.trust(G1[
"USD"](1200), A1);
235 env.trust(G1[
"USD"](200), A2);
236 env.trust(G1[
"BTC"](100), A3);
237 env.trust(G1[
"BTC"](100), A4);
240 env(pay(G1, A1, G1[
"USD"](1000)));
241 env(pay(G1, A2, G1[
"USD"](100)));
242 env(pay(G1, A3, G1[
"BTC"](100)));
243 env(pay(G1, A4, G1[
"BTC"](100)));
246 env(offer(G1, XRP(10000), G1[
"USD"](100)), txflags(
tfPassive));
247 env(offer(G1, G1[
"USD"](100), XRP(10000)), txflags(
tfPassive));
248 env(offer(A1, XRP(10000), G1[
"USD"](100)), txflags(
tfPassive));
249 env(offer(A2, G1[
"USD"](100), XRP(10000)), txflags(
tfPassive));
270 env.rpc(
"book_offers",
272 [jss::result][jss::offers];
276 for (
auto const& offer : offers)
278 accounts.
insert(offer[jss::Account].asString());
280 BEAST_EXPECT(accounts.
find(A2.human()) !=
std::end(accounts));
281 BEAST_EXPECT(accounts.
find(G1.human()) !=
std::end(accounts));
285 env.rpc(
"book_offers",
287 [jss::result][jss::offers];
291 for (
auto const& offer : offers)
293 accounts.
insert(offer[jss::Account].asString());
295 BEAST_EXPECT(accounts.
find(A1.human()) !=
std::end(accounts));
296 BEAST_EXPECT(accounts.
find(G1.human()) !=
std::end(accounts));
302 env(offer(A3, G1[
"BTC"](1), XRP(1)));
305 env(offer(A4, XRP(1), G1[
"BTC"](1)));
308 env(pay(G1, A2, G1[
"USD"](1)));
311 env(pay(A2, G1, G1[
"USD"](1)));
314 env(pay(A2, A1, G1[
"USD"](1)));
317 env(pay(A1, A2, G1[
"USD"](1)));
330 env(offer(A3, G1[
"BTC"](1), XRP(1)), ter(
tecFROZEN));
333 env(offer(A4, XRP(1), G1[
"BTC"](1)), ter(
tecFROZEN));
346 env.rpc(
"book_offers",
348 [jss::result][jss::offers];
353 env.rpc(
"book_offers",
355 [jss::result][jss::offers];
363 env(pay(G1, A2, G1[
"USD"](1)));
366 env(pay(A2, G1, G1[
"USD"](1)));
376 testcase(
"No Freeze");
378 using namespace test::jtx;
379 Env env(*
this, features);
384 env.fund(XRP(12000), G1);
385 env.fund(XRP(1000), A1);
388 env.trust(G1[
"USD"](1000), A1);
391 env(pay(G1, A1, G1[
"USD"](1000)));
425 BEAST_EXPECT(let == jss::AccountRoot);
431 testcase(
"Offers for Frozen Trust Lines");
433 using namespace test::jtx;
434 Env env(*
this, features);
441 env.fund(XRP(1000), G1, A3, A4);
442 env.fund(XRP(2000), A2);
445 env.trust(G1[
"USD"](1000), A2);
446 env.trust(G1[
"USD"](2000), A3);
447 env.trust(G1[
"USD"](2000), A4);
450 env(pay(G1, A3, G1[
"USD"](2000)));
451 env(pay(G1, A4, G1[
"USD"](2000)));
454 env(offer(A3, XRP(1000), G1[
"USD"](1000)), txflags(
tfPassive));
459 env(pay(A2, G1, G1[
"USD"](1)), paths(G1[
"USD"]), sendmax(XRP(1)));
467 offers[0u][jss::taker_gets] ==
471 env(offer(A4, XRP(999), G1[
"USD"](999)));
485 BEAST_EXPECT(! (ff[jss::Flags].asUInt() &
lsfLowFreeze));
495 env(pay(A2, G1, G1[
"USD"](1)), paths(G1[
"USD"]), sendmax(XRP(1)));
520 env(offer(A2, G1[
"USD"](999), XRP(999)));
546 using namespace test::jtx;
547 auto const sa = supported_amendments();