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)));
74 env(pay(A1, A1, A2[
"JPY"](1000)), json(payPaths.json()), txflags(
tfPartialPayment), sendmax(A3[
"CNY"](56)));
78 jrq2[jss::binary] =
false;
81 auto jrr = env.rpc(
"json",
"tx",
to_string(jrq2))[jss::result];
82 uint64_t fee{jrr[jss::Fee].
asUInt()};
83 auto meta = jrr[jss::meta];
86 BEAST_EXPECT(meta[sfAffectedNodes.fieldName].size() == 9);
87 for (
auto const& an : meta[sfAffectedNodes.fieldName])
90 if (an.isMember(sfCreatedNode.fieldName))
91 node = an[sfCreatedNode.fieldName];
92 else if (an.isMember(sfModifiedNode.fieldName))
93 node = an[sfModifiedNode.fieldName];
94 else if (an.isMember(sfDeletedNode.fieldName))
95 node = an[sfDeletedNode.fieldName];
97 if (node && node[sfLedgerEntryType.fieldName] == jss::AccountRoot)
99 Json::Value prevFields = node.
isMember(sfPreviousFields.fieldName) ? node[sfPreviousFields.fieldName]
100 : node[sfNewFields.fieldName];
101 Json::Value finalFields = node.
isMember(sfFinalFields.fieldName) ? node[sfFinalFields.fieldName]
102 : node[sfNewFields.fieldName];
104 sumPrev += beast::lexicalCastThrow<std::uint64_t>(prevFields[sfBalance.fieldName].
asString());
106 sumFinal += beast::lexicalCastThrow<std::uint64_t>(finalFields[sfBalance.fieldName].
asString());
111 BEAST_EXPECT(sumPrev - sumFinal == fee);