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 "9FFD8AE09190D5002FE4252A1B29EABCF40DABBCE3B42619C6BD0BE381D51103";
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 "35738B8517F37D08983AF6BC7DA483CCA9CF6B41B1FECB31A20028D78FE0BB22");
214 result[jss::ledger][jss::transaction_hash] ==
215 "CBD7F0948EBFA2241DE4EA627939A0FFEE6B80A90FE09C42C825DA546E9B73FF");
217 result = env.rpc(
"ledger_request",
"4")[jss::result];
218 constexpr char const* hash4 =
219 "7C9B614445517B8C6477E0AB10A35FFC1A23A34FEA41A91ECBDE884CC097C6E1";
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 "1EE701DD2A150205173E1EDE8D474DF6803EC95253DAAEE965B9D896CFC32A04");
230 result[jss::ledger][jss::transaction_hash] ==
231 "9BBDDBF926100DFFF364E16268F544B19F5B9BC6ECCBBC104F98D13FA9F3BC35");
233 result = env.rpc(
"ledger_request",
"5")[jss::result];
234 constexpr char const* hash5 =
235 "98885D02145CCE4AD2605F1809F17188DB2053B14ED399CAC985DD8E03DCA8C0";
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 "41D64D64796468DEA7AE2A7282C0BB525D6FD7ABC29453C5E5BC6406E947CBCE");
246 result[jss::ledger][jss::transaction_hash] ==
247 "8FE8592EF22FBC2E8C774C7A1ED76AA3FCE64BED17D748CBA9AFDF7072FE36C7");
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);