19 #include <ripple/protocol/AccountID.h>
20 #include <ripple/protocol/Feature.h>
21 #include <ripple/protocol/SField.h>
22 #include <ripple/protocol/TxFlags.h>
23 #include <ripple/protocol/jss.h>
34 jq[jss::account] = account.human();
35 return env.
rpc(
"json",
"account_lines",
to_string(jq))[jss::result];
45 jq[jss::account] = account.human();
46 jq[jss::ledger_index] =
current ?
"current" :
"validated";
47 return env.
rpc(
"json",
"account_offers",
to_string(jq))[jss::result];
59 testcase(
"RippleState Freeze");
61 using namespace test::jtx;
62 Env env(*
this, features);
65 Account alice{
"alice"};
68 env.fund(XRP(1000), G1, alice, bob);
71 env.trust(G1[
"USD"](100), bob);
72 env.trust(G1[
"USD"](100), alice);
75 env(pay(G1, bob, G1[
"USD"](10)));
76 env(pay(G1, alice, G1[
"USD"](100)));
79 env(offer(alice, XRP(500), G1[
"USD"](100)));
86 BEAST_EXPECT(lines[jss::lines][0u][jss::account] == G1.human());
87 BEAST_EXPECT(lines[jss::lines][0u][jss::limit] ==
"100");
88 BEAST_EXPECT(lines[jss::lines][0u][jss::balance] ==
"10");
95 BEAST_EXPECT(lines[jss::lines][0u][jss::account] == G1.human());
96 BEAST_EXPECT(lines[jss::lines][0u][jss::limit] ==
"100");
97 BEAST_EXPECT(lines[jss::lines][0u][jss::balance] ==
"100");
103 env(pay(alice, bob, G1[
"USD"](1)));
106 env(pay(bob, alice, G1[
"USD"](1)));
114 auto affected = env.meta()->getJson(
131 env(offer(bob, G1[
"USD"](5), XRP(25)));
132 auto affected = env.meta()->getJson(
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()->getJson(
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));
269 auto offers = env.rpc(
272 "XRP")[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));
287 std::string(
"USD/") + G1.human())[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));
348 std::string(
"USD/") + G1.human())[jss::result][jss::offers];
355 "XRP")[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)));
519 env(offer(A2, G1[
"USD"](999), XRP(999)));
545 using namespace test::jtx;
546 auto const sa = supported_amendments();