23 testcase(
"Discrepancy test : XRP Discrepancy");
24 using namespace test::jtx;
25 Env env{*
this, features};
35 env.fund(XRP(2000), A1);
36 env.fund(XRP(1000), A2, A6, A7);
37 env.fund(XRP(5000), A3);
38 env.fund(XRP(1000000), A4);
39 env.fund(XRP(600000), A5);
42 env(trust(A1, A3[
"CNY"](200000)));
43 env(pay(A3, A1, A3[
"CNY"](31)));
46 env(trust(A1, A2[
"JPY"](1000000)));
47 env(pay(A2, A1, A2[
"JPY"](729117)));
50 env(trust(A4, A2[
"JPY"](10000000)));
51 env(pay(A2, A4, A2[
"JPY"](470056)));
54 env(trust(A5, A3[
"CNY"](50000)));
55 env(pay(A3, A5, A3[
"CNY"](8683)));
58 env(trust(A6, A3[
"CNY"](3000)));
59 env(pay(A3, A6, A3[
"CNY"](293)));
62 env(trust(A7, A6[
"CNY"](50000)));
63 env(pay(A6, A7, A6[
"CNY"](261)));
66 env(offer(A4, XRP(49147), A2[
"JPY"](34501)));
67 env(offer(A5, A3[
"CNY"](3150), XRP(80086)));
68 env(offer(A7, XRP(1233), A6[
"CNY"](25)));
76 env(pay(A1, A1, A2[
"JPY"](1000)),
77 json(payPaths.json()),
79 sendmax(A3[
"CNY"](56)));
83 jrq2[jss::binary] =
false;
84 jrq2[jss::transaction] =
87 auto jrr = env.rpc(
"json",
"tx",
to_string(jrq2))[jss::result];
88 uint64_t fee{jrr[jss::Fee].
asUInt()};
89 auto meta = jrr[jss::meta];
92 BEAST_EXPECT(meta[sfAffectedNodes.fieldName].size() == 9);
93 for (
auto const& an : meta[sfAffectedNodes.fieldName])
96 if (an.isMember(sfCreatedNode.fieldName))
97 node = an[sfCreatedNode.fieldName];
98 else if (an.isMember(sfModifiedNode.fieldName))
99 node = an[sfModifiedNode.fieldName];
100 else if (an.isMember(sfDeletedNode.fieldName))
101 node = an[sfDeletedNode.fieldName];
103 if (node && node[sfLedgerEntryType.fieldName] == jss::AccountRoot)
106 node.
isMember(sfPreviousFields.fieldName)
107 ? node[sfPreviousFields.fieldName]
108 : node[sfNewFields.fieldName];
110 ? node[sfFinalFields.fieldName]
111 : node[sfNewFields.fieldName];
113 sumPrev += beast::lexicalCastThrow<std::uint64_t>(
114 prevFields[sfBalance.fieldName].
asString());
116 sumFinal += beast::lexicalCastThrow<std::uint64_t>(
117 finalFields[sfBalance.fieldName].
asString());
122 BEAST_EXPECT(sumPrev - sumFinal == fee);