25 using namespace std::chrono_literals;
28 env.
fund(
XRP(10000),
"alice",
"bob");
36 jv[jss::streams].
append(
"transactions");
37 jv = wsc->invoke(
"subscribe", jv);
38 BEAST_EXPECT(jv[jss::status] ==
"success");
39 if (wsc->version() == 2)
41 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
42 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
43 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
51 payment[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
52 payment[jss::tx_json][sfLastLedgerSequence.fieldName] = 1;
53 auto jv = wsc->invoke(
"submit", payment);
54 if (wsc->version() == 2)
56 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
57 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
58 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
60 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tefMAX_LEDGER");
63 payment[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
64 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice") - 1;
65 jv = wsc->invoke(
"submit", payment);
66 if (wsc->version() == 2)
68 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
69 BEAST_EXPECT(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)
79 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
80 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
81 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
83 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"terPRE_SEQ");
86 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice");
87 jv = wsc->invoke(
"submit", payment);
88 if (wsc->version() == 2)
90 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
91 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
92 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
94 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
100 jv = wsc->invoke(
"ledger_accept");
101 if (wsc->version() == 2)
103 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
104 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
105 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
107 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
112 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
113 auto const& ff = jv[jss::meta][
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
114 return ff[jss::Account] == Account(
"bob").human() && ff[
"Balance"] ==
"10001000000";
117 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
118 auto const& ff = jv[jss::meta][
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
119 return ff[jss::Account] == Account(
"bob").human() && ff[
"Balance"] ==
"10002000000";
127 jv[jss::streams].
append(
"transactions");
128 jv = wsc->invoke(
"unsubscribe", jv);
129 if (wsc->version() == 2)
131 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
132 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
133 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
135 BEAST_EXPECT(jv[jss::status] ==
"success");
155 env.
fund(
XRP(10000),
"alice",
"bob");
163 jv[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
164 jv = wsc->invoke(
"submit", jv);
165 if (wsc->version() == 2)
167 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
168 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
169 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
171 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
183 jv[jss::account] =
Account(
"bob").human();
184 jv[jss::ledger_index_min] = -1;
185 jv[jss::ledger_index_max] = -1;
187 jv = wsc->invoke(
"account_tx", jv);
188 if (wsc->version() == 2)
190 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
191 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
192 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
196 auto ff = jv[jss::result][jss::transactions][0u][jss::meta][
"AffectedNodes"][1u]
197 [
"ModifiedNode"][
"FinalFields"];
198 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
199 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
206 using namespace std::chrono_literals;
209 env.
fund(
XRP(10000),
"alice",
"bob");
217 jv[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
218 jv = wsc->invoke(
"submit", jv);
219 if (wsc->version() == 2)
221 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
222 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
223 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
225 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
228 jv = wsc->invoke(
"ledger_accept");
229 if (wsc->version() == 2)
231 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
232 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
233 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
235 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
246 jv[jss::streams].
append(
"ledger");
247 jv = wsc->invoke(
"subscribe", jv);
248 if (wsc->version() == 2)
250 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
251 BEAST_EXPECT(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::status] ==
"success");
258 for (
auto i = 0; i < 8; ++i)
260 auto jv = wsc->invoke(
"ledger_accept");
261 if (wsc->version() == 2)
263 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
264 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
265 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
267 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
272 BEAST_EXPECT(wsc->findMsg(
273 5s, [&](
auto const& jval) { return jval[jss::type] ==
"ledgerClosed"; }));
280 jv[jss::streams].
append(
"ledger");
281 jv = wsc->invoke(
"unsubscribe", jv);
282 if (wsc->version() == 2)
284 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
285 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
286 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
288 BEAST_EXPECT(jv[jss::status] ==
"success");
299 jv[jss::streams].
append(
"ledger");
300 jv = wsc->invoke(
"subscribe", jv);
301 if (wsc->version() == 2)
303 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
304 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
305 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
307 BEAST_EXPECT(jv[jss::status] ==
"success");
311 for (
auto i = 0; i < 2; ++i)
313 auto jv = wsc->invoke(
"ledger_accept");
314 if (wsc->version() == 2)
316 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
317 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
318 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
320 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
325 BEAST_EXPECT(wsc->findMsg(
326 5s, [&](
auto const& jval) { return jval[jss::type] ==
"ledgerClosed"; }));
333 jv[jss::streams].
append(
"ledger");
334 jv = wsc->invoke(
"unsubscribe", jv);
335 if (wsc->version() == 2)
337 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
338 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
339 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
341 BEAST_EXPECT(jv[jss::status] ==
"success");
348 jv[jss::account] =
Account(
"bob").human();
349 jv[jss::ledger_index_min] = -1;
350 jv[jss::ledger_index_max] = -1;
352 jv = wsc->invoke(
"account_tx", jv);
353 if (wsc->version() == 2)
355 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
356 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
357 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
361 auto ff = jv[jss::result][jss::transactions][0u][jss::meta][
"AffectedNodes"][1u]
362 [
"ModifiedNode"][
"FinalFields"];
363 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
364 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
371 using namespace std::chrono_literals;
383 jv = wsc->invoke(
"subscribe", jv);
384 if (wsc->version() == 2)
386 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
387 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
388 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
390 BEAST_EXPECT(jv[jss::status] ==
"success");
397 jv[jss::tx_json] =
fset(
"alice", 0);
398 jv[jss::tx_json][jss::Fee] =
static_cast<int>(env.
current()->fees().base.drops());
399 jv = wsc->invoke(
"submit", jv);
400 if (wsc->version() == 2)
402 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
403 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
404 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
406 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
411 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
412 return jv[jss::transaction][jss::TransactionType] == jss::AccountSet;
421 jv = wsc->invoke(
"unsubscribe", jv);
422 if (wsc->version() == 2)
424 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
425 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
426 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
428 BEAST_EXPECT(jv[jss::status] ==
"success");