18 using namespace std::chrono_literals;
21 env.
fund(
XRP(10000),
"alice",
"bob");
29 jv[jss::streams].
append(
"transactions");
30 jv = wsc->invoke(
"subscribe", jv);
31 BEAST_EXPECT(jv[jss::status] ==
"success");
32 if (wsc->version() == 2)
35 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
37 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
38 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
46 payment[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
47 payment[jss::tx_json][sfLastLedgerSequence.fieldName] = 1;
48 auto jv = wsc->invoke(
"submit", payment);
49 if (wsc->version() == 2)
52 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
54 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
55 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
58 jv[jss::result][jss::engine_result] ==
"tefMAX_LEDGER");
61 payment[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
62 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice") - 1;
63 jv = wsc->invoke(
"submit", payment);
64 if (wsc->version() == 2)
67 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
69 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
70 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
72 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tefPAST_SEQ");
75 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice") + 1;
76 jv = wsc->invoke(
"submit", payment);
77 if (wsc->version() == 2)
80 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
82 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
83 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
85 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"terPRE_SEQ");
88 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice");
89 jv = wsc->invoke(
"submit", payment);
90 if (wsc->version() == 2)
93 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
95 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
96 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
98 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
104 jv = wsc->invoke(
"ledger_accept");
105 if (wsc->version() == 2)
108 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
110 jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
111 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
113 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
118 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
119 auto const& ff = jv[jss::meta][
"AffectedNodes"][1u]
120 [
"ModifiedNode"][
"FinalFields"];
121 return ff[jss::Account] == Account(
"bob").human() &&
122 ff[
"Balance"] ==
"10001000000";
125 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
126 auto const& ff = jv[jss::meta][
"AffectedNodes"][1u]
127 [
"ModifiedNode"][
"FinalFields"];
128 return ff[jss::Account] == Account(
"bob").human() &&
129 ff[
"Balance"] ==
"10002000000";
137 jv[jss::streams].
append(
"transactions");
138 jv = wsc->invoke(
"unsubscribe", jv);
139 if (wsc->version() == 2)
142 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
144 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
145 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
147 BEAST_EXPECT(jv[jss::status] ==
"success");
167 env.
fund(
XRP(10000),
"alice",
"bob");
175 jv[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
176 jv = wsc->invoke(
"submit", jv);
177 if (wsc->version() == 2)
180 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
182 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
183 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
185 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
198 jv[jss::ledger_index_min] = -1;
199 jv[jss::ledger_index_max] = -1;
201 jv = wsc->invoke(
"account_tx", jv);
202 if (wsc->version() == 2)
205 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
207 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
208 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
212 auto ff = jv[jss::result][jss::transactions][0u][jss::meta]
213 [
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
214 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
215 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
222 using namespace std::chrono_literals;
225 env.
fund(
XRP(10000),
"alice",
"bob");
233 jv[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
234 jv = wsc->invoke(
"submit", jv);
235 if (wsc->version() == 2)
238 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
240 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
241 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
243 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
246 jv = wsc->invoke(
"ledger_accept");
247 if (wsc->version() == 2)
250 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
252 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
253 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
255 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
266 jv[jss::streams].
append(
"ledger");
267 jv = wsc->invoke(
"subscribe", jv);
268 if (wsc->version() == 2)
271 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
274 jv[jss::ripplerpc] ==
"2.0");
275 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
277 BEAST_EXPECT(jv[jss::status] ==
"success");
281 for (
auto i = 0; i < 8; ++i)
283 auto jv = wsc->invoke(
"ledger_accept");
284 if (wsc->version() == 2)
287 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
289 jv.isMember(jss::ripplerpc) &&
290 jv[jss::ripplerpc] ==
"2.0");
291 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
294 jv[jss::result].isMember(jss::ledger_current_index));
299 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jval) {
300 return jval[jss::type] ==
"ledgerClosed";
308 jv[jss::streams].
append(
"ledger");
309 jv = wsc->invoke(
"unsubscribe", jv);
310 if (wsc->version() == 2)
313 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
316 jv[jss::ripplerpc] ==
"2.0");
317 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
319 BEAST_EXPECT(jv[jss::status] ==
"success");
330 jv[jss::streams].
append(
"ledger");
331 jv = wsc->invoke(
"subscribe", jv);
332 if (wsc->version() == 2)
335 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
338 jv[jss::ripplerpc] ==
"2.0");
339 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
341 BEAST_EXPECT(jv[jss::status] ==
"success");
345 for (
auto i = 0; i < 2; ++i)
347 auto jv = wsc->invoke(
"ledger_accept");
348 if (wsc->version() == 2)
351 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
353 jv.isMember(jss::ripplerpc) &&
354 jv[jss::ripplerpc] ==
"2.0");
355 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
358 jv[jss::result].isMember(jss::ledger_current_index));
363 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jval) {
364 return jval[jss::type] ==
"ledgerClosed";
372 jv[jss::streams].
append(
"ledger");
373 jv = wsc->invoke(
"unsubscribe", jv);
374 if (wsc->version() == 2)
377 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
380 jv[jss::ripplerpc] ==
"2.0");
381 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
383 BEAST_EXPECT(jv[jss::status] ==
"success");
391 jv[jss::ledger_index_min] = -1;
392 jv[jss::ledger_index_max] = -1;
394 jv = wsc->invoke(
"account_tx", jv);
395 if (wsc->version() == 2)
398 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
400 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
401 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
405 auto ff = jv[jss::result][jss::transactions][0u][jss::meta]
406 [
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
407 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
408 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
415 using namespace std::chrono_literals;
427 jv = wsc->invoke(
"subscribe", jv);
428 if (wsc->version() == 2)
431 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
433 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
434 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
436 BEAST_EXPECT(jv[jss::status] ==
"success");
443 jv[jss::tx_json] =
fset(
"alice", 0);
444 jv[jss::tx_json][jss::Fee] =
445 static_cast<int>(env.
current()->fees().base.drops());
446 jv = wsc->invoke(
"submit", jv);
447 if (wsc->version() == 2)
450 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
452 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
453 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
455 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
460 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
461 return jv[jss::transaction][jss::TransactionType] ==
471 jv = wsc->invoke(
"unsubscribe", jv);
472 if (wsc->version() == 2)
475 jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
477 jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
478 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
480 BEAST_EXPECT(jv[jss::status] ==
"success");