35 testcase(
"Discrepancy test : XRP Discrepancy");
37 Env env{*
this, features};
47 env.fund(XRP(2000), a1);
48 env.fund(XRP(1000), a2, a6, a7);
49 env.fund(XRP(5000), a3);
50 env.fund(XRP(1000000), a4);
51 env.fund(XRP(600000), a5);
54 env(trust(a1, a3[
"CNY"](200000)));
55 env(pay(a3, a1, a3[
"CNY"](31)));
58 env(trust(a1, a2[
"JPY"](1000000)));
59 env(pay(a2, a1, a2[
"JPY"](729117)));
62 env(trust(a4, a2[
"JPY"](10000000)));
63 env(pay(a2, a4, a2[
"JPY"](470056)));
66 env(trust(a5, a3[
"CNY"](50000)));
67 env(pay(a3, a5, a3[
"CNY"](8683)));
70 env(trust(a6, a3[
"CNY"](3000)));
71 env(pay(a3, a6, a3[
"CNY"](293)));
74 env(trust(a7, a6[
"CNY"](50000)));
75 env(pay(a6, a7, a6[
"CNY"](261)));
78 env(offer(a4, XRP(49147), a2[
"JPY"](34501)));
79 env(offer(a5, a3[
"CNY"](3150), XRP(80086)));
80 env(offer(a7, XRP(1233), a6[
"CNY"](25)));
88 env(pay(a1, a1, a2[
"JPY"](1000)),
89 Json(payPaths.
json()),
90 Txflags(tfPartialPayment),
91 Sendmax(a3[
"CNY"](56)));
95 jrq2[jss::binary] =
false;
98 auto jrr = env.rpc(
"json",
"tx",
to_string(jrq2))[jss::result];
99 uint64_t
const fee{jrr[jss::Fee].asUInt()};
100 auto meta = jrr[jss::meta];
102 uint64_t sumFinal{0};
103 BEAST_EXPECT(meta[sfAffectedNodes.fieldName].size() == 9);
104 for (
auto const& an : meta[sfAffectedNodes.fieldName])
107 if (an.isMember(sfCreatedNode.fieldName))
109 node = an[sfCreatedNode.fieldName];
111 else if (an.isMember(sfModifiedNode.fieldName))
113 node = an[sfModifiedNode.fieldName];
115 else if (an.isMember(sfDeletedNode.fieldName))
117 node = an[sfDeletedNode.fieldName];
120 if (node && node[sfLedgerEntryType.fieldName] == jss::AccountRoot)
123 ? node[sfPreviousFields.fieldName]
124 : node[sfNewFields.fieldName];
126 ? node[sfFinalFields.fieldName]
127 : node[sfNewFields.fieldName];
131 prevFields[sfBalance.fieldName].
asString());
136 finalFields[sfBalance.fieldName].
asString());
142 BEAST_EXPECT(sumPrev - sumFinal == fee);