41 BEAST_EXPECT(env.current()->header().seq == 5);
45 auto const result = env.rpc(
"ledger_request",
"arbitrary_text");
48 result[jss::result][jss::error_message] ==
"Ledger index too small");
52 auto const result = env.rpc(
"ledger_request",
"-1");
55 result[jss::result][jss::error_message] ==
"Ledger index too small");
59 auto const result = env.rpc(
"ledger_request",
"0");
62 result[jss::result][jss::error_message] ==
"Ledger index too small");
66 auto const result = env.rpc(
"ledger_request",
"1");
69 result[jss::result][jss::ledger_index] == 1 &&
70 result[jss::result].isMember(jss::ledger));
72 result[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
73 result[jss::result][jss::ledger][jss::ledger_hash].isString());
77 auto const result = env.rpc(
"ledger_request",
"2");
80 result[jss::result][jss::ledger_index] == 2 &&
81 result[jss::result].isMember(jss::ledger));
83 result[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
84 result[jss::result][jss::ledger][jss::ledger_hash].isString());
88 auto const result = env.rpc(
"ledger_request",
"3");
91 result[jss::result][jss::ledger_index] == 3 &&
92 result[jss::result].isMember(jss::ledger));
94 result[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
95 result[jss::result][jss::ledger][jss::ledger_hash].isString());
97 auto const ledgerHash = result[jss::result][jss::ledger][jss::ledger_hash].asString();
100 auto const r = env.rpc(
"ledger_request", ledgerHash);
103 r[jss::result].isMember(jss::ledger));
105 r[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
106 r[jss::result][jss::ledger][jss::ledger_hash] == ledgerHash);
113 auto const result = env.rpc(
"ledger_request", ledgerHash);
117 result[jss::result][jss::error_message] ==
118 "Invalid field 'ledger_hash', not hex string.");
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] ==
"Ledger index too large");
139 auto const result = env.rpc(
"ledger_request",
"5");
142 result[jss::result][jss::error_message] ==
"Ledger index too large");
151 auto cfg = envconfig();
152 cfg->fees.referenceFee = 10;
156 auto const usd = gw[
"USD"];
157 env.fund(XRP(100000), gw);
161 env.fund(XRP(1000),
"bob");
164 env.memoize(
"alice");
165 env.fund(XRP(1000),
"alice");
168 env.memoize(
"carol");
169 env.fund(XRP(1000),
"carol");
172 auto result = env.rpc(
"ledger_request",
"1")[jss::result];
173 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"1");
174 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"100000000000000000");
175 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
176 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] ==
kHash1);
177 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] ==
kZeroHASH);
178 BEAST_EXPECT(result[jss::ledger][jss::account_hash] ==
kAccountHash1);
179 BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] ==
kZeroHASH);
181 result = env.rpc(
"ledger_request",
"2")[jss::result];
182 static constexpr char const* kHash2 =
183 "CCC3B3E88CCAC17F1BE6B4A648A55999411F19E3FE55EB721960EB0DF28EDDA5";
184 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"2");
185 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"100000000000000000");
186 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
187 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == kHash2);
188 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] ==
kHash1);
190 result[jss::ledger][jss::account_hash] ==
191 "3C834285F7F464FBE99AFEB84D354A968EB2CAA24523FF26797A973D906A3D29");
192 BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] ==
kZeroHASH);
194 result = env.rpc(
"ledger_request",
"3")[jss::result];
195 static constexpr char const* kHash3 =
196 "9FFD8AE09190D5002FE4252A1B29EABCF40DABBCE3B42619C6BD0BE381D51103";
197 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"3");
198 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"99999999999999980");
199 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
200 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == kHash3);
201 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == kHash2);
203 result[jss::ledger][jss::account_hash] ==
204 "35738B8517F37D08983AF6BC7DA483CCA9CF6B41B1FECB31A20028D78FE0BB22");
206 result[jss::ledger][jss::transaction_hash] ==
207 "CBD7F0948EBFA2241DE4EA627939A0FFEE6B80A90FE09C42C825DA546E9B73FF");
209 result = env.rpc(
"ledger_request",
"4")[jss::result];
210 static constexpr char const* kHash4 =
211 "7C9B614445517B8C6477E0AB10A35FFC1A23A34FEA41A91ECBDE884CC097C6E1";
212 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"4");
213 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"99999999999999960");
214 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
215 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == kHash4);
216 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == kHash3);
218 result[jss::ledger][jss::account_hash] ==
219 "1EE701DD2A150205173E1EDE8D474DF6803EC95253DAAEE965B9D896CFC32A04");
221 result[jss::ledger][jss::transaction_hash] ==
222 "9BBDDBF926100DFFF364E16268F544B19F5B9BC6ECCBBC104F98D13FA9F3BC35");
224 result = env.rpc(
"ledger_request",
"5")[jss::result];
225 static constexpr char const* kHash5 =
226 "98885D02145CCE4AD2605F1809F17188DB2053B14ED399CAC985DD8E03DCA8C0";
227 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"5");
228 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"99999999999999940");
229 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
230 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == kHash5);
231 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == kHash4);
233 result[jss::ledger][jss::account_hash] ==
234 "41D64D64796468DEA7AE2A7282C0BB525D6FD7ABC29453C5E5BC6406E947CBCE");
236 result[jss::ledger][jss::transaction_hash] ==
237 "8FE8592EF22FBC2E8C774C7A1ED76AA3FCE64BED17D748CBA9AFDF7072FE36C7");
239 result = env.rpc(
"ledger_request",
"6")[jss::result];
240 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
241 BEAST_EXPECT(result[jss::status] ==
"error");
242 BEAST_EXPECT(result[jss::error_message] ==
"Ledger index too large");
251 auto const usd = gw[
"USD"];
252 env.fund(XRP(100000), gw);
257 jvParams[jss::ledger_hash] =
258 "AB868A6CFEEC779C2FF845C0AF00A642259986AF40C01976A7F842B6918936"
260 jvParams[jss::ledger_index] =
"1";
262 env.rpc(
"json",
"ledger_request", jvParams.
toStyledString())[jss::result];
263 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
264 BEAST_EXPECT(result[jss::status] ==
"error");
266 result[jss::error_message] ==
267 "Exactly one of 'ledger_hash' or 'ledger_index' can be "
273 jvParams[jss::ledger_index] =
"index";
275 env.rpc(
"json",
"ledger_request", jvParams.
toStyledString())[jss::result];
276 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
277 BEAST_EXPECT(result[jss::status] ==
"error");
278 BEAST_EXPECT(result[jss::error_message] ==
"Invalid field 'ledger_index', not number.");
283 env.timeKeeper().adjustCloseTime(
weeks{3});
284 auto const result = env.rpc(apiVersion,
"ledger_request",
"1")[jss::result];
285 BEAST_EXPECT(result[jss::status] ==
"error");
288 BEAST_EXPECT(result[jss::error] ==
"noCurrent");
289 BEAST_EXPECT(result[jss::error_message] ==
"Current ledger is unavailable.");
293 BEAST_EXPECT(result[jss::error] ==
"notSynced");
294 BEAST_EXPECT(result[jss::error_message] ==
"Not synced to the network.");
302 using namespace std::chrono_literals;
304 cfg->fees.referenceFee = 10;
309 auto const usd = gw[
"USD"];
310 env.fund(XRP(100000), gw);
312 int const maxLimit = 256;
314 for (
auto i = 0; i < maxLimit + 10; i++)
317 env.fund(XRP(1000), bob);
321 auto result = env.rpc(
"ledger_request",
"1")[jss::result];
322 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"1");
323 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"100000000000000000");
324 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
325 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] ==
kHash1);
326 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] ==
kZeroHASH);
327 BEAST_EXPECT(result[jss::ledger][jss::account_hash] ==
kAccountHash1);
328 BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] ==
kZeroHASH);