19 #include <ripple/protocol/TxFlags.h>
20 #include <ripple/protocol/jss.h>
35 bool thirdLineCreatesLE,
36 bool createOnHighAcct)
38 if (thirdLineCreatesLE)
39 testcase(
"Allow two free trustlines");
41 testcase(
"Dynamic reserve for trustline");
44 Env env(*
this, features);
46 auto const gwA =
Account{
"gwA"};
47 auto const gwB =
Account{
"gwB"};
48 auto const acctC =
Account{
"acctC"};
49 auto const acctD =
Account{
"acctD"};
51 auto const& creator = createOnHighAcct ? acctD : acctC;
52 auto const& assistor = createOnHighAcct ? acctC : acctD;
54 auto const txFee = env.
current()->fees().base;
55 auto const baseReserve = env.
current()->fees().accountReserve(0);
56 auto const threelineReserve = env.
current()->fees().accountReserve(3);
58 env.
fund(
XRP(10000), gwA, gwB, assistor);
66 env(trust(creator, gwA[
"USD"](100)),
require(
lines(creator, 1)));
67 env(trust(creator, gwB[
"USD"](100)),
require(
lines(creator, 2)));
69 if (thirdLineCreatesLE)
72 env(trust(creator, assistor[
"USD"](100)),
79 env(trust(assistor, creator[
"USD"](100)),
84 env(trust(creator, assistor[
"USD"](100)),
89 env(pay(env.
master, creator,
STAmount{threelineReserve - baseReserve}));
91 if (thirdLineCreatesLE)
93 env(trust(creator, assistor[
"USD"](100)),
98 env(trust(creator, assistor[
"USD"](100)),
102 jv[
"account"] = creator.human();
105 BEAST_EXPECT(
lines[jss::result][jss::lines].isArray());
106 BEAST_EXPECT(
lines[jss::result][jss::lines].size() == 3);
107 for (
auto const& line :
lines[jss::result][jss::lines])
109 BEAST_EXPECT(line[jss::limit] ==
"100");
117 testcase(
"SetTrust using a ticket");
122 Env env{*
this, features};
123 auto const gw =
Account{
"gateway"};
124 auto const alice =
Account{
"alice"};
125 auto const USD = gw[
"USD"];
127 env.fund(
XRP(10000), gw, alice);
136 env(ticket::create(alice, 1));
140 env(trust(alice, USD(1000)),
ticket::use(ticketSeq));
144 env(pay(gw, alice, USD(200)));
152 jv[jss::Account] = a.
human();
154 jv[jss::TransactionType] = jss::TrustSet;
162 testcase(
"SetTrust checks for malformed transactions");
165 Env env{*
this, features};
167 auto const gw =
Account{
"gateway"};
168 auto const alice =
Account{
"alice"};
169 env.fund(
XRP(10000), gw, alice);
173 badFlag <= std::numeric_limits<std::uint32_t>::max();
210 bool createOnHighAcct)
212 testcase <<
"SetTrust " << (createQuality ?
"creates" :
"removes")
213 <<
" quality of trustline for "
214 << (createOnHighAcct ?
"high" :
"low") <<
" account";
217 Env env{*
this, features};
219 auto const alice =
Account{
"alice"};
220 auto const bob =
Account{
"bob"};
222 auto const& fromAcct = createOnHighAcct ? alice : bob;
223 auto const& toAcct = createOnHighAcct ? bob : alice;
225 env.fund(
XRP(10000), fromAcct, toAcct);
227 auto txWithoutQuality = trust(toAcct, fromAcct[
"USD"](100));
228 txWithoutQuality[
"QualityIn"] =
"0";
229 txWithoutQuality[
"QualityOut"] =
"0";
231 auto txWithQuality = txWithoutQuality;
232 txWithQuality[
"QualityIn"] =
"1000";
233 txWithQuality[
"QualityOut"] =
"1000";
235 auto& tx1 = createQuality ? txWithQuality : txWithoutQuality;
236 auto& tx2 = createQuality ? txWithoutQuality : txWithQuality;
238 auto check_quality = [&](
const bool exists) {
240 jv[
"account"] = toAcct.human();
241 auto const lines = env.rpc(
"json",
"account_lines",
to_string(jv));
242 auto quality = exists ? 1000 : 0;
243 BEAST_EXPECT(
lines[jss::result][jss::lines].isArray());
244 BEAST_EXPECT(
lines[jss::result][jss::lines].size() == 1);
246 lines[jss::result][jss::lines][0u][jss::quality_in] == quality);
248 lines[jss::result][jss::lines][0u][jss::quality_out] ==
253 check_quality(createQuality);
256 check_quality(!createQuality);
262 testcase(
"Create trustline with disallow incoming");
264 using namespace test::jtx;
270 env.fund(
XRP(10000), alice);
273 auto const sle = env.le(alice);
274 uint32_t
flags = sle->getFlags();
280 for (
bool const withFix : {
true,
false})
282 auto const amend = withFix
286 Env env{*
this, amend};
287 auto const dist =
Account(
"dist");
289 auto const USD = gw[
"USD"];
290 auto const distUSD = dist[
"USD"];
292 env.fund(
XRP(1000), gw, dist);
301 env(trust(dist, USD(10000)));
306 auto const trustResult =
308 env(trust(gw, distUSD(10000)),
313 auto const txResult =
315 env(pay(gw, dist, USD(1000)), txResult);
322 auto const gw =
Account{
"gateway"};
323 auto const alice =
Account{
"alice"};
324 auto const bob =
Account{
"bob"};
325 auto const USD = gw[
"USD"];
327 env.fund(
XRP(10000), gw, alice, bob);
343 env(trust(alice, USD(1000)));
347 env(pay(gw, alice, USD(200)));
355 env(pay(gw, alice, USD(200)));
360 env(pay(gw, alice, USD(200)));
381 env(trust(bob, USD(1000)));
385 env(pay(gw, bob, USD(200)));
411 using namespace test::jtx;