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");