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);
188 auto ff = jv[jss::result][jss::transactions][0u][jss::meta][
"AffectedNodes"][1u]
189 [
"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(
265 5s, [&](
auto const& jval) { return jval[jss::type] ==
"ledgerClosed"; }));
272 jv[jss::streams].
append(
"ledger");
273 jv = wsc->invoke(
"unsubscribe", jv);
274 if (wsc->version() == 2)
276 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
277 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
278 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
280 BEAST_EXPECT(jv[jss::status] ==
"success");
291 jv[jss::streams].
append(
"ledger");
292 jv = wsc->invoke(
"subscribe", jv);
293 if (wsc->version() == 2)
295 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
296 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
297 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
299 BEAST_EXPECT(jv[jss::status] ==
"success");
303 for (
auto i = 0; i < 2; ++i)
305 auto jv = wsc->invoke(
"ledger_accept");
306 if (wsc->version() == 2)
308 BEAST_EXPECT(jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
309 BEAST_EXPECT(jv.isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
310 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
312 BEAST_EXPECT(jv[jss::result].isMember(jss::ledger_current_index));
317 BEAST_EXPECT(wsc->findMsg(
318 5s, [&](
auto const& jval) { return jval[jss::type] ==
"ledgerClosed"; }));
325 jv[jss::streams].
append(
"ledger");
326 jv = wsc->invoke(
"unsubscribe", jv);
327 if (wsc->version() == 2)
329 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
330 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
331 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
333 BEAST_EXPECT(jv[jss::status] ==
"success");
341 jv[jss::ledger_index_min] = -1;
342 jv[jss::ledger_index_max] = -1;
344 jv = wsc->invoke(
"account_tx", jv);
345 if (wsc->version() == 2)
347 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
348 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
349 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
353 auto ff = jv[jss::result][jss::transactions][0u][jss::meta][
"AffectedNodes"][1u]
354 [
"ModifiedNode"][
"FinalFields"];
355 BEAST_EXPECT(ff[jss::Account] ==
Account(
"bob").human());
356 BEAST_EXPECT(ff[
"Balance"] ==
"10001000000");
363 using namespace std::chrono_literals;
375 jv = wsc->invoke(
"subscribe", jv);
376 if (wsc->version() == 2)
378 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
379 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
380 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
382 BEAST_EXPECT(jv[jss::status] ==
"success");
389 jv[jss::tx_json] =
fset(
"alice", 0);
390 jv[jss::tx_json][jss::Fee] =
static_cast<int>(env.
current()->fees().base.drops());
391 jv = wsc->invoke(
"submit", jv);
392 if (wsc->version() == 2)
394 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
395 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
396 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
398 BEAST_EXPECT(jv[jss::result][jss::engine_result] ==
"tesSUCCESS");
403 BEAST_EXPECT(wsc->findMsg(5s, [&](
auto const& jv) {
404 return jv[jss::transaction][jss::TransactionType] == jss::AccountSet;
413 jv = wsc->invoke(
"unsubscribe", jv);
414 if (wsc->version() == 2)
416 BEAST_EXPECT(jv.
isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
417 BEAST_EXPECT(jv.
isMember(jss::ripplerpc) && jv[jss::ripplerpc] ==
"2.0");
418 BEAST_EXPECT(jv.
isMember(jss::id) && jv[jss::id] == 5);
420 BEAST_EXPECT(jv[jss::status] ==
"success");