26 using namespace test::jtx;
32 BEAST_EXPECT(env.current()->header().seq == 5);
36 auto const result = env.rpc(
"ledger_request",
"arbitrary_text");
39 result[jss::result][jss::error_message] ==
"Ledger index too small");
43 auto const result = env.rpc(
"ledger_request",
"-1");
46 result[jss::result][jss::error_message] ==
"Ledger index too small");
50 auto const result = env.rpc(
"ledger_request",
"0");
53 result[jss::result][jss::error_message] ==
"Ledger index too small");
57 auto const result = env.rpc(
"ledger_request",
"1");
60 result[jss::result].isMember(jss::ledger));
62 result[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
63 result[jss::result][jss::ledger][jss::ledger_hash].isString());
67 auto const result = env.rpc(
"ledger_request",
"2");
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",
"3");
80 result[jss::result].isMember(jss::ledger));
82 result[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
83 result[jss::result][jss::ledger][jss::ledger_hash].isString());
85 auto const ledgerHash = result[jss::result][jss::ledger][jss::ledger_hash].asString();
88 auto const r = env.rpc(
"ledger_request", ledgerHash);
91 r[jss::result].isMember(jss::ledger));
93 r[jss::result][jss::ledger].isMember(jss::ledger_hash) &&
94 r[jss::result][jss::ledger][jss::ledger_hash] == ledgerHash);
101 auto const result = env.rpc(
"ledger_request", ledgerHash);
105 result[jss::result][jss::error_message] ==
"Invalid field 'ledger_hash', not hex string.");
111 auto const result = env.rpc(
"ledger_request", ledgerHash);
113 BEAST_EXPECT(!
RPC::contains_error(result[jss::result]) && result[jss::result][jss::have_header] ==
false);
117 auto const result = env.rpc(
"ledger_request",
"4");
120 result[jss::result][jss::error_message] ==
"Ledger index too large");
124 auto const result = env.rpc(
"ledger_request",
"5");
127 result[jss::result][jss::error_message] ==
"Ledger index too large");
134 using namespace test::jtx;
136 auto cfg = envconfig();
137 cfg->FEES.reference_fee = 10;
140 Account
const gw{
"gateway"};
141 auto const USD = gw[
"USD"];
142 env.fund(XRP(100000), gw);
146 env.fund(XRP(1000),
"bob");
149 env.memoize(
"alice");
150 env.fund(XRP(1000),
"alice");
153 env.memoize(
"carol");
154 env.fund(XRP(1000),
"carol");
157 auto result = env.rpc(
"ledger_request",
"1")[jss::result];
158 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"1");
159 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"100000000000000000");
160 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
161 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] ==
hash1);
162 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] ==
zerohash);
163 BEAST_EXPECT(result[jss::ledger][jss::account_hash] ==
accounthash1);
164 BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] ==
zerohash);
166 result = env.rpc(
"ledger_request",
"2")[jss::result];
167 constexpr char const* hash2 =
"CCC3B3E88CCAC17F1BE6B4A648A55999411F19E3FE55EB721960EB0DF28EDDA5";
168 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"2");
169 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"100000000000000000");
170 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
171 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == hash2);
172 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] ==
hash1);
174 result[jss::ledger][jss::account_hash] ==
175 "3C834285F7F464FBE99AFEB84D354A968EB2CAA24523FF26797A973D906A3D29");
176 BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] ==
zerohash);
178 result = env.rpc(
"ledger_request",
"3")[jss::result];
179 constexpr char const* hash3 =
"9FFD8AE09190D5002FE4252A1B29EABCF40DABBCE3B42619C6BD0BE381D51103";
180 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"3");
181 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"99999999999999980");
182 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
183 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == hash3);
184 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == hash2);
186 result[jss::ledger][jss::account_hash] ==
187 "35738B8517F37D08983AF6BC7DA483CCA9CF6B41B1FECB31A20028D78FE0BB22");
189 result[jss::ledger][jss::transaction_hash] ==
190 "CBD7F0948EBFA2241DE4EA627939A0FFEE6B80A90FE09C42C825DA546E9B73FF");
192 result = env.rpc(
"ledger_request",
"4")[jss::result];
193 constexpr char const* hash4 =
"7C9B614445517B8C6477E0AB10A35FFC1A23A34FEA41A91ECBDE884CC097C6E1";
194 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"4");
195 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"99999999999999960");
196 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
197 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == hash4);
198 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == hash3);
200 result[jss::ledger][jss::account_hash] ==
201 "1EE701DD2A150205173E1EDE8D474DF6803EC95253DAAEE965B9D896CFC32A04");
203 result[jss::ledger][jss::transaction_hash] ==
204 "9BBDDBF926100DFFF364E16268F544B19F5B9BC6ECCBBC104F98D13FA9F3BC35");
206 result = env.rpc(
"ledger_request",
"5")[jss::result];
207 constexpr char const* hash5 =
"98885D02145CCE4AD2605F1809F17188DB2053B14ED399CAC985DD8E03DCA8C0";
208 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"5");
209 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"99999999999999940");
210 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
211 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] == hash5);
212 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] == hash4);
214 result[jss::ledger][jss::account_hash] ==
215 "41D64D64796468DEA7AE2A7282C0BB525D6FD7ABC29453C5E5BC6406E947CBCE");
217 result[jss::ledger][jss::transaction_hash] ==
218 "8FE8592EF22FBC2E8C774C7A1ED76AA3FCE64BED17D748CBA9AFDF7072FE36C7");
220 result = env.rpc(
"ledger_request",
"6")[jss::result];
221 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
222 BEAST_EXPECT(result[jss::status] ==
"error");
223 BEAST_EXPECT(result[jss::error_message] ==
"Ledger index too large");
229 using namespace test::jtx;
231 Account
const gw{
"gateway"};
232 auto const USD = gw[
"USD"];
233 env.fund(XRP(100000), gw);
238 jvParams[jss::ledger_hash] =
239 "AB868A6CFEEC779C2FF845C0AF00A642259986AF40C01976A7F842B6918936"
241 jvParams[jss::ledger_index] =
"1";
242 auto const result = env.rpc(
"json",
"ledger_request", jvParams.
toStyledString())[jss::result];
243 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
244 BEAST_EXPECT(result[jss::status] ==
"error");
246 result[jss::error_message] ==
247 "Exactly one of 'ledger_hash' or 'ledger_index' can be "
253 jvParams[jss::ledger_index] =
"index";
254 auto const result = env.rpc(
"json",
"ledger_request", jvParams.
toStyledString())[jss::result];
255 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
256 BEAST_EXPECT(result[jss::status] ==
"error");
257 BEAST_EXPECT(result[jss::error_message] ==
"Invalid field 'ledger_index', not number.");
262 env.timeKeeper().adjustCloseTime(
weeks{3});
263 auto const result = env.rpc(
apiVersion,
"ledger_request",
"1")[jss::result];
264 BEAST_EXPECT(result[jss::status] ==
"error");
267 BEAST_EXPECT(result[jss::error] ==
"noCurrent");
268 BEAST_EXPECT(result[jss::error_message] ==
"Current ledger is unavailable.");
272 BEAST_EXPECT(result[jss::error] ==
"notSynced");
273 BEAST_EXPECT(result[jss::error_message] ==
"Not synced to the network.");
280 using namespace test::jtx;
281 using namespace std::chrono_literals;
283 cfg->FEES.reference_fee = 10;
287 Account
const gw{
"gateway"};
288 auto const USD = gw[
"USD"];
289 env.fund(XRP(100000), gw);
291 int const max_limit = 256;
293 for (
auto i = 0; i < max_limit + 10; i++)
296 env.fund(XRP(1000), bob);
300 auto result = env.rpc(
"ledger_request",
"1")[jss::result];
301 BEAST_EXPECT(result[jss::ledger][jss::ledger_index] ==
"1");
302 BEAST_EXPECT(result[jss::ledger][jss::total_coins] ==
"100000000000000000");
303 BEAST_EXPECT(result[jss::ledger][jss::closed] ==
true);
304 BEAST_EXPECT(result[jss::ledger][jss::ledger_hash] ==
hash1);
305 BEAST_EXPECT(result[jss::ledger][jss::parent_hash] ==
zerohash);
306 BEAST_EXPECT(result[jss::ledger][jss::account_hash] ==
accounthash1);
307 BEAST_EXPECT(result[jss::ledger][jss::transaction_hash] ==
zerohash);