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)
33 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
34 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
35 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
43 payment[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
44 payment[jss::tx_json][sfLastLedgerSequence.fieldName] = 1;
45 auto jv = wsc->invoke(
"submit", payment);
46 if (wsc->version() == 2)
48 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
49 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
50 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
52 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tefMAX_LEDGER");
55 payment[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
56 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice") - 1;
57 jv = wsc->invoke(
"submit", payment);
58 if (wsc->version() == 2)
60 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
61 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
62 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
64 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tefPAST_SEQ");
67 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice") + 1;
68 jv = wsc->invoke(
"submit", payment);
69 if (wsc->version() == 2)
71 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
72 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
73 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
75 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"terPRE_SEQ");
78 payment[jss::tx_json][sfSequence.fieldName] = env.
seq(
"alice");
79 jv = wsc->invoke(
"submit", payment);
80 if (wsc->version() == 2)
82 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
83 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
84 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
86 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
92 jv = wsc->invoke(
"ledger_accept");
93 if (wsc->version() == 2)
95 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
96 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
97 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
99 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
104 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
105 auto const& ff = jv[jss::meta][
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
106 return ff[jss::Account] == Account(
"bob").human() && ff[
"Balance"] ==
"10001000000";
109 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
110 auto const& ff = jv[jss::meta][
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
111 return ff[jss::Account] == Account(
"bob").human() && ff[
"Balance"] ==
"10002000000";
119 jv[jss::streams].
append(
"transactions");
120 jv = wsc->invoke(
"unsubscribe", jv);
121 if (wsc->version() == 2)
123 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
124 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
125 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
127 BEAST_EXPECT(jv[jss::status] ==
"success");
147 env.
fund(
XRP(10000),
"alice",
"bob");
155 jv[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
156 jv = wsc->invoke(
"submit", jv);
157 if (wsc->version() == 2)
159 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
160 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
161 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
163 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
176 jv[jss::ledger_index_min] = -1;
177 jv[jss::ledger_index_max] = -1;
179 jv = wsc->invoke(
"account_tx", jv);
180 if (wsc->version() == 2)
182 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
183 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
184 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
189 jv[jss::result][jss::transactions][0u][jss::meta][
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
190 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
191 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
198 using namespace std::chrono_literals;
201 env.
fund(
XRP(10000),
"alice",
"bob");
209 jv[jss::tx_json] =
pay(
"alice",
"bob",
XRP(1));
210 jv = wsc->invoke(
"submit", jv);
211 if (wsc->version() == 2)
213 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
214 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
215 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
217 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
220 jv = wsc->invoke(
"ledger_accept");
221 if (wsc->version() == 2)
223 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
224 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
225 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
227 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
238 jv[jss::streams].
append(
"ledger");
239 jv = wsc->invoke(
"subscribe", jv);
240 if (wsc->version() == 2)
242 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
243 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
244 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
246 BEAST_EXPECT(jv[jss::status] ==
"success");
250 for (
auto i = 0; i < 8; ++i)
252 auto jv = wsc->invoke(
"ledger_accept");
253 if (wsc->version() == 2)
255 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
256 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
257 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
259 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
264 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jval) { return jval[jss::type] ==
"ledgerClosed"; }));
271 jv[jss::streams].
append(
"ledger");
272 jv = wsc->invoke(
"unsubscribe", jv);
273 if (wsc->version() == 2)
275 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
276 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
277 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
279 BEAST_EXPECT(jv[jss::status] ==
"success");
290 jv[jss::streams].
append(
"ledger");
291 jv = wsc->invoke(
"subscribe", jv);
292 if (wsc->version() == 2)
294 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
295 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
296 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
298 BEAST_EXPECT(jv[jss::status] ==
"success");
302 for (
auto i = 0; i < 2; ++i)
304 auto jv = wsc->invoke(
"ledger_accept");
305 if (wsc->version() == 2)
307 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
308 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
309 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
311 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
316 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jval) { return jval[jss::type] ==
"ledgerClosed"; }));
323 jv[jss::streams].
append(
"ledger");
324 jv = wsc->invoke(
"unsubscribe", jv);
325 if (wsc->version() == 2)
327 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
328 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
329 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
331 BEAST_EXPECT(jv[jss::status] ==
"success");
339 jv[jss::ledger_index_min] = -1;
340 jv[jss::ledger_index_max] = -1;
342 jv = wsc->invoke(
"account_tx", jv);
343 if (wsc->version() == 2)
345 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
346 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
347 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
352 jv[jss::result][jss::transactions][0u][jss::meta][
"AffectedNodes"][1u][
"ModifiedNode"][
"FinalFields"];
353 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
354 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
361 using namespace std::chrono_literals;
373 jv = wsc->invoke(
"subscribe", jv);
374 if (wsc->version() == 2)
376 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
377 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
378 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
380 BEAST_EXPECT(jv[jss::status] ==
"success");
387 jv[jss::tx_json] =
fset(
"alice", 0);
388 jv[jss::tx_json][jss::Fee] =
static_cast<int>(env.
current()->fees().base.drops());
389 jv = wsc->invoke(
"submit", jv);
390 if (wsc->version() == 2)
392 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
393 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
394 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
396 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
401 BEAST_EXPECT(wsc->findMsg(
402 5s, [&](
auto const& jv) { return jv[jss::transaction][jss::TransactionType] == jss::AccountSet; }));
410 jv = wsc->invoke(
"unsubscribe", jv);
411 if (wsc->version() == 2)
413 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
414 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
415 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
417 BEAST_EXPECT(jv[jss::status] ==
"success");