29        using namespace test::jtx;
 
   35        BEAST_EXPECT(env.current()->info().seq == 5);
 
   39            auto const result = env.rpc(
"ledger_request", 
"arbitrary_text");
 
   42                result[jss::result][jss::error_message] ==
 
   43                    "Ledger index too small");
 
   47            auto const result = env.rpc(
"ledger_request", 
"-1");
 
   50                result[jss::result][jss::error_message] ==
 
   51                    "Ledger index too small");
 
   55            auto const result = env.rpc(
"ledger_request", 
"0");
 
   58                result[jss::result][jss::error_message] ==
 
   59                    "Ledger index too small");
 
   63            auto const result = env.rpc(
"ledger_request", 
"1");
 
   66                result[jss::result][jss::ledger_index] == 1 &&
 
   67                result[jss::result].isMember(jss::ledger));
 
   69                result[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
 
   70                result[jss::result][jss::ledger][jss::ledger_hash].isString());
 
   74            auto const result = env.rpc(
"ledger_request", 
"2");
 
   77                result[jss::result][jss::ledger_index] == 2 &&
 
   78                result[jss::result].isMember(jss::ledger));
 
   80                result[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
 
   81                result[jss::result][jss::ledger][jss::ledger_hash].isString());
 
   85            auto const result = env.rpc(
"ledger_request", 
"3");
 
   88                result[jss::result][jss::ledger_index] == 3 &&
 
   89                result[jss::result].isMember(jss::ledger));
 
   91                result[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
 
   92                result[jss::result][jss::ledger][jss::ledger_hash].isString());
 
   94            auto const ledgerHash =
 
   95                result[jss::result][jss::ledger][jss::ledger_hash].asString();
 
   98                auto const r = env.rpc(
"ledger_request", ledgerHash);
 
  101                    r[jss::result][jss::ledger_index] == 3 &&
 
  102                    r[jss::result].isMember(jss::ledger));
 
  104                    r[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
 
  105                    r[jss::result][jss::ledger][jss::ledger_hash] ==
 
  113            auto const result = env.rpc(
"ledger_request", ledgerHash);
 
  117                result[jss::result][jss::error_message] ==
 
  118                    "Invalid field 'ledger_hash'.");
 
  124            auto const result = env.rpc(
"ledger_request", ledgerHash);
 
  128                result[jss::result][jss::have_header] == 
false);
 
  132            auto const result = env.rpc(
"ledger_request", 
"4");
 
  135                result[jss::result][jss::error_message] ==
 
  136                    "Ledger index too large");
 
  140            auto const result = env.rpc(
"ledger_request", 
"5");
 
  143                result[jss::result][jss::error_message] ==
 
  144                    "Ledger index too large");
 
 
  151        using namespace test::jtx;
 
  153        auto cfg = envconfig();
 
  154        cfg->FEES.reference_fee = 10;
 
  160        Account 
const gw{
"gateway"};
 
  161        auto const USD = gw[
"USD"];
 
  162        env.fund(XRP(100000), gw);
 
  166        env.fund(XRP(1000), 
"bob");
 
  169        env.memoize(
"alice");
 
  170        env.fund(XRP(1000), 
"alice");
 
  173        env.memoize(
"carol");
 
  174        env.fund(XRP(1000), 
"carol");
 
  177        auto result = env.rpc(
"ledger_request", 
"1")[jss::result];
 
  178        BEAST_EXPECT(result[jss::ledger][jss::ledger_index] == 
"1");
 
  180            result[jss::ledger][jss::total_coins] == 
"100000000000000000");
 
  181        BEAST_EXPECT(result[jss::ledger][jss::closed] == 
true);
 
  182        BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == 
hash1);
 
  183        BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == 
zerohash);
 
  184        BEAST_EXPECT(result[jss::ledger][jss::account_hash] == 
accounthash1);
 
  185        BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] == 
zerohash);
 
  187        result = env.rpc(
"ledger_request", 
"2")[jss::result];
 
  188        constexpr char const* hash2 =
 
  189            "CCC3B3E88CCAC17F1BE6B4A648A55999411F19E3FE55EB721960EB0DF28EDDA5";
 
  190        BEAST_EXPECT(result[jss::ledger][jss::ledger_index] == 
"2");
 
  192            result[jss::ledger][jss::total_coins] == 
"100000000000000000");
 
  193        BEAST_EXPECT(result[jss::ledger][jss::closed] == 
true);
 
  194        BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == hash2);
 
  195        BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == 
hash1);
 
  197            result[jss::ledger][jss::account_hash] ==
 
  198            "3C834285F7F464FBE99AFEB84D354A968EB2CAA24523FF26797A973D906A3D29");
 
  199        BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] == 
zerohash);
 
  201        result = env.rpc(
"ledger_request", 
"3")[jss::result];
 
  202        constexpr char const* hash3 =
 
  203            "8D631B20BC989AF568FBA97375290544B0703A5ADC1CF9E9053580461690C9EE";
 
  204        BEAST_EXPECT(result[jss::ledger][jss::ledger_index] == 
"3");
 
  206            result[jss::ledger][jss::total_coins] == 
"99999999999999980");
 
  207        BEAST_EXPECT(result[jss::ledger][jss::closed] == 
true);
 
  208        BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == hash3);
 
  209        BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == hash2);
 
  211            result[jss::ledger][jss::account_hash] ==
 
  212            "BC9EF2A16BFF80BCFABA6FA84688D858D33BD0FA0435CAA9DF6DA4105A39A29E");
 
  214            result[jss::ledger][jss::transaction_hash] ==
 
  215            "0213EC486C058B3942FBE3DAC6839949A5C5B02B8B4244C8998EFDF04DBD8222");
 
  217        result = env.rpc(
"ledger_request", 
"4")[jss::result];
 
  218        constexpr char const* hash4 =
 
  219            "1A8E7098B23597E73094DADA58C9D62F3AB93A12C6F7666D56CA85A6CFDE530F";
 
  220        BEAST_EXPECT(result[jss::ledger][jss::ledger_index] == 
"4");
 
  222            result[jss::ledger][jss::total_coins] == 
"99999999999999960");
 
  223        BEAST_EXPECT(result[jss::ledger][jss::closed] == 
true);
 
  224        BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == hash4);
 
  225        BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == hash3);
 
  227            result[jss::ledger][jss::account_hash] ==
 
  228            "C690188F123C91355ADA8BDF4AC5B5C927076D3590C215096868A5255264C6DD");
 
  230            result[jss::ledger][jss::transaction_hash] ==
 
  231            "3CBDB8F42E04333E1642166BFB93AC9A7E1C6C067092CD5D881D6F3AB3D67E76");
 
  233        result = env.rpc(
"ledger_request", 
"5")[jss::result];
 
  234        constexpr char const* hash5 =
 
  235            "C6A222D71AE65D7B4F240009EAD5DEB20D7EEDE5A4064F28BBDBFEEB6FBE48E5";
 
  236        BEAST_EXPECT(result[jss::ledger][jss::ledger_index] == 
"5");
 
  238            result[jss::ledger][jss::total_coins] == 
"99999999999999940");
 
  239        BEAST_EXPECT(result[jss::ledger][jss::closed] == 
true);
 
  240        BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == hash5);
 
  241        BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == hash4);
 
  243            result[jss::ledger][jss::account_hash] ==
 
  244            "EA81CD9D36740736F00CB747E0D0E32D3C10B695823D961F0FB9A1CE7133DD4D");
 
  246            result[jss::ledger][jss::transaction_hash] ==
 
  247            "C3D086CD6BDB9E97AD1D513B2C049EF2840BD21D0B3E22D84EBBB89B6D2EF59D");
 
  249        result = env.rpc(
"ledger_request", 
"6")[jss::result];
 
  250        BEAST_EXPECT(result[jss::error] == 
"invalidParams");
 
  251        BEAST_EXPECT(result[jss::status] == 
"error");
 
  252        BEAST_EXPECT(result[jss::error_message] == 
"Ledger index too large");
 
 
  258        using namespace test::jtx;
 
  260        Account 
const gw{
"gateway"};
 
  261        auto const USD = gw[
"USD"];
 
  262        env.fund(XRP(100000), gw);
 
  266        jvParams[jss::ledger_hash] =
 
  267            "AB868A6CFEEC779C2FF845C0AF00A642259986AF40C01976A7F842B6918936C7";
 
  268        jvParams[jss::ledger_index] = 
"1";
 
  269        auto result = env.rpc(
 
  270            "json", 
"ledger_request", jvParams.
toStyledString())[jss::result];
 
  271        BEAST_EXPECT(result[jss::error] == 
"invalidParams");
 
  272        BEAST_EXPECT(result[jss::status] == 
"error");
 
  274            result[jss::error_message] ==
 
  275            "Exactly one of ledger_hash and ledger_index can be set.");
 
  279        env.timeKeeper().adjustCloseTime(
weeks{3});
 
  280        result = env.rpc(
apiVersion, 
"ledger_request", 
"1")[jss::result];
 
  281        BEAST_EXPECT(result[jss::status] == 
"error");
 
  284            BEAST_EXPECT(result[jss::error] == 
"noCurrent");
 
  286                result[jss::error_message] == 
"Current ledger is unavailable.");
 
  290            BEAST_EXPECT(result[jss::error] == 
"notSynced");
 
  292                result[jss::error_message] == 
"Not synced to the network.");
 
 
  299        using namespace test::jtx;
 
  300        using namespace std::chrono_literals;
 
  302                    cfg->FEES.reference_fee = 10;
 
  306        Account 
const gw{
"gateway"};
 
  307        auto const USD = gw[
"USD"];
 
  308        env.fund(XRP(100000), gw);
 
  310        int const max_limit = 256;
 
  312        for (
auto i = 0; i < max_limit + 10; i++)
 
  315            env.fund(XRP(1000), bob);
 
  319        auto result = env.rpc(
"ledger_request", 
"1")[jss::result];
 
  320        BEAST_EXPECT(result[jss::ledger][jss::ledger_index] == 
"1");
 
  322            result[jss::ledger][jss::total_coins] == 
"100000000000000000");
 
  323        BEAST_EXPECT(result[jss::ledger][jss::closed] == 
true);
 
  324        BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == 
hash1);
 
  325        BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == 
zerohash);
 
  326        BEAST_EXPECT(result[jss::ledger][jss::account_hash] == 
accounthash1);
 
  327        BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] == 
zerohash);