36        using namespace test::jtx;
 
   39        char const* COMMAND = jss::tx.c_str();
 
   40        char const* BINARY = jss::binary.c_str();
 
   43        char const* EXCESSIVE =
 
   46        Env env{*
this, features};
 
   47        auto const alice = Account(
"alice");
 
   48        env.fund(XRP(1000), alice);
 
   53        auto const startLegSeq = env.current()->info().seq;
 
   54        for (
int i = 0; i < 750; ++i)
 
   60                env.closed()->txRead(env.tx()->getTransactionID()).second);
 
   62        auto const endLegSeq = env.closed()->info().seq;
 
   65        for (
size_t i = 0; i < txns.
size(); ++i)
 
   67            auto const& tx = txns[i];
 
   68            auto const& meta = metas[i];
 
   69            auto const result = env.rpc(
 
   76            BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
 
   78                result[jss::result][jss::tx] ==
 
   79                strHex(tx->getSerializer().getData()));
 
   81                result[jss::result][jss::meta] ==
 
   82                strHex(meta->getSerializer().getData()));
 
   85        auto const tx = env.jt(
noop(alice), seq(env.seq(alice))).stx;
 
   86        for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
 
   88            auto const result = env.rpc(
 
   96                result[jss::result][jss::status] == jss::error &&
 
   97                result[jss::result][jss::error] == NOT_FOUND);
 
  100                BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  102                BEAST_EXPECT(result[jss::result][jss::searched_all].asBool());
 
  106        for (
auto&& tx : txns)
 
  108            auto const result = env.rpc(
 
  115            BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
 
  116            BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  119        auto const deletedLedger = (startLegSeq + endLegSeq) / 2;
 
  123                ->deleteTransactionByLedgerSeq(deletedLedger);
 
  126        for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
 
  128            auto const result = env.rpc(
 
  136                result[jss::result][jss::status] == jss::error &&
 
  137                result[jss::result][jss::error] == NOT_FOUND);
 
  138            BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  144            auto const result = env.rpc(
 
  151                result[jss::result][jss::status] == jss::error &&
 
  152                result[jss::result][jss::error] == NOT_FOUND);
 
  154            BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  160            auto const result = env.rpc(
 
  167                result[jss::result][jss::status] == jss::error &&
 
  168                result[jss::result][jss::error] == NOT_FOUND);
 
  170            BEAST_EXPECT(result[jss::result][jss::searched_all].asBool());
 
  176            auto const result = env.rpc(
 
  182            BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
 
  183            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  188            auto const result = env.rpc(
 
  196                result[jss::result][jss::status] == jss::error &&
 
  197                result[jss::result][jss::error] == 
INVALID);
 
  199            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  204            auto const result = env.rpc(
 
  212                result[jss::result][jss::status] == jss::error &&
 
  213                result[jss::result][jss::error] == 
INVALID);
 
  215            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  220            auto const result = env.rpc(
 
  228                result[jss::result][jss::status] == jss::error &&
 
  229                result[jss::result][jss::error] == 
INVALID);
 
  231            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  236            auto const result = env.rpc(
 
  243                result[jss::result][jss::status] == jss::error &&
 
  244                result[jss::result][jss::error] == 
INVALID);
 
  246            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  251            auto const result = env.rpc(
 
  259            BEAST_EXPECT(result[jss::result][jss::status] == jss::error);
 
  261            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  266            auto const result = env.rpc(
 
  274                result[jss::result][jss::status] == jss::error &&
 
  275                result[jss::result][jss::error] == EXCESSIVE);
 
  277            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
 
  286        using namespace test::jtx;
 
  289        char const* COMMAND = jss::tx.c_str();
 
  290        char const* BINARY = jss::binary.c_str();
 
  293        char const* EXCESSIVE =
 
  297        uint32_t netID = env.app().config().NETWORK_ID;
 
  299        auto const alice = Account(
"alice");
 
  300        env.fund(XRP(1000), alice);
 
  305        auto const startLegSeq = env.current()->info().seq;
 
  306        for (
int i = 0; i < 750; ++i)
 
  312                env.closed()->txRead(env.tx()->getTransactionID()).second);
 
  314        auto const endLegSeq = env.closed()->info().seq;
 
  317        for (
size_t i = 0; i < txns.
size(); ++i)
 
  319            auto const& tx = txns[i];
 
  320            auto const& meta = metas[i];
 
  321            uint32_t txnIdx = meta->getFieldU32(sfTransactionIndex);
 
  322            auto const result = env.rpc(
 
  329            BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
 
  331                result[jss::result][jss::tx] ==
 
  332                strHex(tx->getSerializer().getData()));
 
  334                result[jss::result][jss::meta] ==
 
  335                strHex(meta->getSerializer().getData()));
 
  338        auto const tx = env.jt(
noop(alice), seq(env.seq(alice))).stx;
 
  339        auto const ctid = *
RPC::encodeCTID(endLegSeq, tx->getSeqValue(), netID);
 
  340        for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
 
  342            auto const result = env.rpc(
 
  350                result[jss::result][jss::status] == jss::error &&
 
  351                result[jss::result][jss::error] == NOT_FOUND);
 
  354                BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  356                BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  360        for (
size_t i = 0; i < txns.
size(); ++i)
 
  363            auto const& meta = metas[i];
 
  364            uint32_t txnIdx = meta->getFieldU32(sfTransactionIndex);
 
  365            auto const result = env.rpc(
 
  372            BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
 
  373            BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  376        auto const deletedLedger = (startLegSeq + endLegSeq) / 2;
 
  380                ->deleteTransactionByLedgerSeq(deletedLedger);
 
  383        for (
int deltaEndSeq = 0; deltaEndSeq < 2; ++deltaEndSeq)
 
  385            auto const result = env.rpc(
 
  393                result[jss::result][jss::status] == jss::error &&
 
  394                result[jss::result][jss::error] == NOT_FOUND);
 
  395            BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  401            auto const result = env.rpc(
 
  405                result[jss::result][jss::status] == jss::error &&
 
  406                result[jss::result][jss::error] == NOT_FOUND);
 
  408            BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  414            auto const result = env.rpc(
 
  421                result[jss::result][jss::status] == jss::error &&
 
  422                result[jss::result][jss::error] == NOT_FOUND);
 
  424            BEAST_EXPECT(!result[jss::result][jss::searched_all].asBool());
 
  430            auto const& meta = metas[0];
 
  431            uint32_t txnIdx = meta->getFieldU32(sfTransactionIndex);
 
  432            auto const result = env.rpc(
 
  438            BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
 
  439            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  444            auto const result = env.rpc(
 
  452                result[jss::result][jss::status] == jss::error &&
 
  453                result[jss::result][jss::error] == 
INVALID);
 
  455            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  460            auto const result = env.rpc(
 
  468                result[jss::result][jss::status] == jss::error &&
 
  469                result[jss::result][jss::error] == 
INVALID);
 
  471            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  480                result[jss::result][jss::status] == jss::error &&
 
  481                result[jss::result][jss::error] == 
INVALID);
 
  483            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  488            auto const result = env.rpc(COMMAND, ctid, BINARY, 
to_string(20));
 
  491                result[jss::result][jss::status] == jss::error &&
 
  492                result[jss::result][jss::error] == 
INVALID);
 
  494            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  499            auto const result = env.rpc(COMMAND, ctid, 
to_string(20));
 
  506            BEAST_EXPECT(result[jss::result][jss::status] == jss::error);
 
  508            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
  513            auto const result = env.rpc(
 
  521                result[jss::result][jss::status] == jss::error &&
 
  522                result[jss::result][jss::error] == EXCESSIVE);
 
  524            BEAST_EXPECT(!result[jss::result].isMember(jss::searched_all));
 
 
  533        using namespace test::jtx;
 
  547        BEAST_EXPECT(
RPC::encodeCTID(13249191UL, 12911U, 65535U) == expected14);
 
  559        auto const expected51 =
 
  563        auto const expected52 =
 
  567        auto const expected53 =
 
 
  622        using namespace test::jtx;
 
  625        for (uint32_t netID : {11111, 65535, 65536})
 
  628            BEAST_EXPECT(netID == env.app().config().NETWORK_ID);
 
  630            auto const alice = Account(
"alice");
 
  631            auto const bob = Account(
"bob");
 
  633            auto const startLegSeq = env.current()->info().seq;
 
  634            env.fund(XRP(10000), alice, bob);
 
  635            env(pay(alice, bob, XRP(10)));
 
  647            jsonTx[jss::binary] = 
false;
 
  648            jsonTx[jss::ctid] = *ctid;
 
  651                env.rpc(
"json", 
"tx", 
to_string(jsonTx))[jss::result];
 
  652            BEAST_EXPECT(jrr[jss::ctid] == ctid);
 
  653            BEAST_EXPECT(jrr.isMember(jss::hash));
 
  661            Account 
const alice = Account(
"alice");
 
  662            Account 
const bob = Account(
"bob");
 
  665            env.fund(XRP(10000), alice, bob);
 
  666            env(pay(alice, bob, XRP(10)));
 
  670            auto isUpper = [](
char c) { 
return std::isupper(c) != 0; };
 
  681                        mixedCase.
begin(), mixedCase.
end(), isUpper);
 
  682                    *iter = std::tolower(*iter);
 
  684                BEAST_EXPECT(ctid != mixedCase);
 
  687                jsonTx[jss::binary] = 
false;
 
  688                jsonTx[jss::ctid] = mixedCase;
 
  691                    env.rpc(
"json", 
"tx", 
to_string(jsonTx))[jss::result];
 
  692                BEAST_EXPECT(jrr[jss::ctid] == ctid);
 
  693                BEAST_EXPECT(jrr[jss::hash]);
 
  700        for (uint32_t netID : {2, 1024, 65535, 65536})
 
  703            BEAST_EXPECT(netID == env.app().config().NETWORK_ID);
 
  705            auto const alice = Account(
"alice");
 
  706            auto const bob = Account(
"bob");
 
  708            env.fund(XRP(10000), alice, bob);
 
  709            env(pay(alice, bob, XRP(10)));
 
  712            auto const ledgerSeq = env.current()->info().seq;
 
  720            params[jss::transaction] = hash;
 
  722                env.rpc(
"json", 
"tx", 
to_string(params))[jss::result];
 
  723            BEAST_EXPECT(jrr[jss::hash] == hash);
 
  725            BEAST_EXPECT(jrr.isMember(jss::ctid) == (netID <= 0xFFFF));
 
  726            if (jrr.isMember(jss::ctid))
 
  729                BEAST_EXPECT(jrr[jss::ctid] == *ctid);
 
  736            uint32_t netID = env.app().config().NETWORK_ID;
 
  738            auto const alice = Account(
"alice");
 
  739            auto const bob = Account(
"bob");
 
  741            auto const startLegSeq = env.current()->info().seq;
 
  742            env.fund(XRP(10000), alice, bob);
 
  743            env(pay(alice, bob, XRP(10)));
 
  748            jsonTx[jss::binary] = 
false;
 
  749            jsonTx[jss::ctid] = ctid;
 
  752                env.rpc(
"json", 
"tx", 
to_string(jsonTx))[jss::result];
 
  753            BEAST_EXPECT(jrr[jss::error] == 
"wrongNetwork");
 
  756                jrr[jss::error_message] ==
 
  757                "Wrong network. You should submit this request to a node " 
  758                "running on NetworkID: 21338");
 
 
  767        using namespace test::jtx;
 
  771                    cfg->FEES.reference_fee = 10;
 
  774        Account 
const alice{
"alice"};
 
  775        Account 
const alie{
"alie"};
 
  776        Account 
const gw{
"gw"};
 
  777        auto const USD{gw[
"USD"]};
 
  779        env.fund(XRP(1000000), alice, gw);
 
  786        env(pay(alice, gw, XRP(100)));
 
  791            env.closed()->txRead(env.tx()->getTransactionID()).second;
 
  794        expected[jss::DeliverMax] = expected[jss::Amount];
 
  801        Json::Value const result = {[&env, txn, apiVersion]() {
 
  803            params[jss::transaction] = 
to_string(txn->getTransactionID());
 
  804            params[jss::binary] = 
false;
 
  805            params[jss::api_version] = apiVersion;
 
  806            return env.client().invoke(
"tx", params);
 
  809        BEAST_EXPECT(result[jss::result][jss::status] == jss::success);
 
  813                result[jss::result][jss::close_time_iso] ==
 
  814                "2000-01-01T00:00:20Z");
 
  816                result[jss::result][jss::hash] ==
 
  818            BEAST_EXPECT(result[jss::result][jss::validated] == 
true);
 
  819            BEAST_EXPECT(result[jss::result][jss::ledger_index] == 4);
 
  821                result[jss::result][jss::ledger_hash] ==
 
  822                "B41882E20F0EC6228417D28B9AE0F33833645D35F6799DFB782AC97FC4BB51" 
  826        for (
auto memberIt = expected.
begin(); memberIt != expected.
end();
 
  830            auto const& result_transaction =
 
  831                (apiVersion > 1 ? result[jss::result][jss::tx_json]
 
  832                                : result[jss::result]);
 
  833            if (BEAST_EXPECT(result_transaction.isMember(name)))
 
  835                auto const received = result_transaction[name];
 
  837                    received == *memberIt,
 
  838                    "Transaction contains \n\"" + name + 
"\": "   
 
  852        using namespace test::jtx;
 
  856                    cfg->FEES.reference_fee = 10;
 
  859        Account 
const alice{
"alice"};
 
  860        Account 
const gw{
"gw"};
 
  861        auto const USD{gw[
"USD"]};
 
  863        env.fund(XRP(1000000), alice, gw);
 
  867            "3F8BDE5A5F82C4F4708E5E9255B713E303E6E1A371FD5C7A704AFD1387C23981");
 
  870            env.closed()->txRead(txn->getTransactionID()).second;
 
  875        Json::Value const result = [&env, txn, apiVersion]() {
 
  877            params[jss::transaction] = 
to_string(txn->getTransactionID());
 
  878            params[jss::binary] = 
true;
 
  879            params[jss::api_version] = apiVersion;
 
  880            return env.client().invoke(
"tx", params);
 
  883        if (BEAST_EXPECT(result[jss::status] == 
"success"))
 
  885            BEAST_EXPECT(result[jss::result][jss::status] == 
"success");
 
  886            BEAST_EXPECT(result[jss::result][jss::validated] == 
true);
 
  888                result[jss::result][jss::hash] ==
 
  890            BEAST_EXPECT(result[jss::result][jss::ledger_index] == 3);
 
  891            BEAST_EXPECT(result[jss::result][jss::ctid] == 
"C000000300030000");
 
  896                    result[jss::result][jss::tx_blob] == expected_tx_blob);
 
  898                    result[jss::result][jss::meta_blob] == expected_meta_blob);
 
  900                    result[jss::result][jss::ledger_hash] ==
 
  901                    "2D5150E5A5AA436736A732291E437ABF01BC9E206C2DF3C77C4F856915" 
  904                    result[jss::result][jss::close_time_iso] ==
 
  905                    "2000-01-01T00:00:10Z");
 
  909                BEAST_EXPECT(result[jss::result][jss::tx] == expected_tx_blob);
 
  911                    result[jss::result][jss::meta] == expected_meta_blob);
 
  912                BEAST_EXPECT(result[jss::result][jss::date] == 10);