17 using namespace std::chrono_literals;
20 env.
fund(
XRP(10000),
"alice",
"bob");
28 jv[jss::streams].
append(
"transactions");
29 jv = wsc->invoke(
"subscribe", jv);
30 BEAST_EXPECT(jv[jss::status] ==
"success");
31 if (wsc->version() == 2)
34 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
36 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
37 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
45 payment[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
46 payment[jss::tx_json][sfLastLedgerSequence.fieldName] = 1;
47 auto jv = wsc->invoke(
"submit", payment);
48 if (wsc->version() == 2)
51 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
53 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
54 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
57 jv[jss::result][jss::engine_result] ==
"tefMAX_LEDGER");
60 payment[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
61 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice") - 1;
62 jv = wsc->invoke(
"submit", payment);
63 if (wsc->version() == 2)
66 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
68 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
69 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
71 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tefPAST_SEQ");
74 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice") + 1;
75 jv = wsc->invoke(
"submit", payment);
76 if (wsc->version() == 2)
79 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
81 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
82 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
84 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"terPRE_SEQ");
87 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice");
88 jv = wsc->invoke(
"submit", payment);
89 if (wsc->version() == 2)
92 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
94 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
95 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
97 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
103 jv = wsc->invoke(
"ledger_accept");
104 if (wsc->version() == 2)
107 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
109 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
110 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
112 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
117 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
118 auto const& ff = jv[jss::meta][
"AffectedNodes"][1u]
119 [
"ModifiedNode"][
"FinalFields"];
120 return ff[jss::Account] == Account(
"bob").human() &&
121 ff[
"Balance"] ==
"10001000000";
124 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
125 auto const& ff = jv[jss::meta][
"AffectedNodes"][1u]
126 [
"ModifiedNode"][
"FinalFields"];
127 return ff[jss::Account] == Account(
"bob").human() &&
128 ff[
"Balance"] ==
"10002000000";
136 jv[jss::streams].
append(
"transactions");
137 jv = wsc->invoke(
"unsubscribe", jv);
138 if (wsc->version() == 2)
141 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
143 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
144 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
146 BEAST_EXPECT(jv[jss::status] ==
"success");
166 env.
fund(
XRP(10000),
"alice",
"bob");
174 jv[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
175 jv = wsc->invoke(
"submit", jv);
176 if (wsc->version() == 2)
179 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
181 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
182 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
184 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
197 jv[jss::ledger_index_min] = -1;
198 jv[jss::ledger_index_max] = -1;
200 jv = wsc->invoke(
"account_tx", jv);
201 if (wsc->version() == 2)
204 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
206 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
207 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
211 auto ff = jv[jss::result][jss::transactions][0u][jss::meta]
212 [
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
213 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
214 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
221 using namespace std::chrono_literals;
224 env.
fund(
XRP(10000),
"alice",
"bob");
232 jv[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
233 jv = wsc->invoke(
"submit", jv);
234 if (wsc->version() == 2)
237 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
239 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
240 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
242 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
245 jv = wsc->invoke(
"ledger_accept");
246 if (wsc->version() == 2)
249 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
251 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
252 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
254 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
265 jv[jss::streams].
append(
"ledger");
266 jv = wsc->invoke(
"subscribe", jv);
267 if (wsc->version() == 2)
270 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
273 jv[jss::ripplerpc] ==
"2.0");
274 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
276 BEAST_EXPECT(jv[jss::status] ==
"success");
280 for (
auto i = 0; i < 8; ++i)
282 auto jv = wsc->invoke(
"ledger_accept");
283 if (wsc->version() == 2)
286 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
288 jv.isMember(jss::ripplerpc) &&
289 jv[jss::ripplerpc] ==
"2.0");
290 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
293 jv[jss::result].isMember(jss::ledger_current_index));
298 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jval) {
299 return jval[jss::type] ==
"ledgerClosed";
307 jv[jss::streams].
append(
"ledger");
308 jv = wsc->invoke(
"unsubscribe", jv);
309 if (wsc->version() == 2)
312 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
315 jv[jss::ripplerpc] ==
"2.0");
316 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
318 BEAST_EXPECT(jv[jss::status] ==
"success");
329 jv[jss::streams].
append(
"ledger");
330 jv = wsc->invoke(
"subscribe", jv);
331 if (wsc->version() == 2)
334 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
337 jv[jss::ripplerpc] ==
"2.0");
338 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
340 BEAST_EXPECT(jv[jss::status] ==
"success");
344 for (
auto i = 0; i < 2; ++i)
346 auto jv = wsc->invoke(
"ledger_accept");
347 if (wsc->version() == 2)
350 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
352 jv.isMember(jss::ripplerpc) &&
353 jv[jss::ripplerpc] ==
"2.0");
354 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
357 jv[jss::result].isMember(jss::ledger_current_index));
362 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jval) {
363 return jval[jss::type] ==
"ledgerClosed";
371 jv[jss::streams].
append(
"ledger");
372 jv = wsc->invoke(
"unsubscribe", jv);
373 if (wsc->version() == 2)
376 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
379 jv[jss::ripplerpc] ==
"2.0");
380 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
382 BEAST_EXPECT(jv[jss::status] ==
"success");
390 jv[jss::ledger_index_min] = -1;
391 jv[jss::ledger_index_max] = -1;
393 jv = wsc->invoke(
"account_tx", jv);
394 if (wsc->version() == 2)
397 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
399 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
400 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
404 auto ff = jv[jss::result][jss::transactions][0u][jss::meta]
405 [
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
406 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
407 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
414 using namespace std::chrono_literals;
426 jv = wsc->invoke(
"subscribe", jv);
427 if (wsc->version() == 2)
430 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
432 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
433 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
435 BEAST_EXPECT(jv[jss::status] ==
"success");
442 jv[jss::tx_json] =
fset(
"alice", 0);
443 jv[jss::tx_json][jss::Fee] =
444 static_cast<int>(env.
current()->fees().base.drops());
445 jv = wsc->invoke(
"submit", jv);
446 if (wsc->version() == 2)
449 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
451 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
452 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
454 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
459 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
460 return jv[jss::transaction][jss::TransactionType] ==
470 jv = wsc->invoke(
"unsubscribe", jv);
471 if (wsc->version() == 2)
474 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
476 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
477 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
479 BEAST_EXPECT(jv[jss::status] ==
"success");