28 auto const result = env.
rpc(
"server_definitions");
29 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
30 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
31 BEAST_EXPECT(result[jss::result].isMember(jss::FIELDS));
32 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
33 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_RESULTS));
34 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_TYPES));
35 BEAST_EXPECT(result[jss::result].isMember(jss::TYPES));
36 BEAST_EXPECT(result[jss::result].isMember(jss::hash));
42 auto const firstField = result[jss::result][jss::FIELDS][0u];
43 BEAST_EXPECT(firstField[0u].asString() ==
"Invalid");
44 BEAST_EXPECT(firstField[1][jss::isSerialized].asBool() ==
false);
45 BEAST_EXPECT(firstField[1][jss::isSigningField].asBool() ==
false);
46 BEAST_EXPECT(firstField[1][jss::isVLEncoded].asBool() ==
false);
47 BEAST_EXPECT(firstField[1][jss::nth].asInt() == -1);
48 BEAST_EXPECT(firstField[1][jss::type].asString() ==
"Unknown");
52 auto const field = result[jss::result][jss::FIELDS][6u];
53 BEAST_EXPECT(field[0u].asString() ==
"LedgerEntryType");
54 BEAST_EXPECT(field[1][jss::isSerialized].asBool() ==
true);
55 BEAST_EXPECT(field[1][jss::isSigningField].asBool() ==
true);
56 BEAST_EXPECT(field[1][jss::isVLEncoded].asBool() ==
false);
57 BEAST_EXPECT(field[1][jss::nth].asUInt() == 1);
58 BEAST_EXPECT(field[1][jss::type].asString() ==
"UInt16");
64 for (
auto& field : result[jss::result][jss::FIELDS])
66 if (field[0u].asString() == name)
73 BEAST_EXPECT(fieldExists(
"Generic"));
74 BEAST_EXPECT(fieldExists(
"Invalid"));
75 BEAST_EXPECT(fieldExists(
"ObjectEndMarker"));
76 BEAST_EXPECT(fieldExists(
"ArrayEndMarker"));
77 BEAST_EXPECT(fieldExists(
"taker_gets_funded"));
78 BEAST_EXPECT(fieldExists(
"taker_pays_funded"));
79 BEAST_EXPECT(fieldExists(
"hash"));
80 BEAST_EXPECT(fieldExists(
"index"));
86 for (
auto const& field : result[jss::result][jss::FIELDS])
88 auto const name = field[0u].asString();
89 BEAST_EXPECT(fieldNames.
insert(name).second);
95 auto const types = result[jss::result][jss::TYPES];
96 BEAST_EXPECT(types.isMember(
"Hash128") && types[
"Hash128"].asUInt() == 4);
97 BEAST_EXPECT(types.isMember(
"Hash160") && types[
"Hash160"].asUInt() == 17);
98 BEAST_EXPECT(types.isMember(
"Hash192") && types[
"Hash192"].asUInt() == 21);
99 BEAST_EXPECT(types.isMember(
"Hash256") && types[
"Hash256"].asUInt() == 5);
100 BEAST_EXPECT(types.isMember(
"Hash384") && types[
"Hash384"].asUInt() == 22);
101 BEAST_EXPECT(types.isMember(
"Hash512") && types[
"Hash512"].asUInt() == 23);
105 result[jss::result][jss::LEDGER_ENTRY_TYPES][
"AccountRoot"].asUInt() == 97);
107 result[jss::result][jss::TRANSACTION_RESULTS][
"tecDIR_FULL"].asUInt() == 121);
108 BEAST_EXPECT(result[jss::result][jss::TRANSACTION_TYPES][
"Payment"].asUInt() == 0);
109 BEAST_EXPECT(result[jss::result][jss::TYPES][
"AccountID"].asUInt() == 8);
113 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_FLAGS));
114 json::Value const& leFlags = result[jss::result][jss::LEDGER_ENTRY_FLAGS];
117 BEAST_EXPECT(leFlags[
"AccountRoot"][
"lsfDisallowXRP"] == 0x00080000);
118 BEAST_EXPECT(leFlags[
"AccountRoot"][
"lsfDepositAuth"] == 0x01000000);
119 BEAST_EXPECT(leFlags[
"AccountRoot"][
"lsfAllowTrustLineClawback"] == 0x80000000);
121 BEAST_EXPECT(leFlags[
"RippleState"][
"lsfHighFreeze"] == 0x00800000);
122 BEAST_EXPECT(leFlags[
"RippleState"][
"lsfAMMNode"] == 0x01000000);
124 BEAST_EXPECT(leFlags[
"DirNode"][
"lsfNFTokenBuyOffers"] == 0x00000001);
125 BEAST_EXPECT(leFlags[
"MPTokenIssuance"][
"lsfMPTCanTrade"] == 0x00000010);
126 BEAST_EXPECT(leFlags[
"Credential"][
"lsfAccepted"] == 0x00010000);
127 BEAST_EXPECT(leFlags[
"Loan"][
"lsfLoanImpaired"] == 0x00020000);
128 BEAST_EXPECT(leFlags[
"Vault"][
"lsfVaultPrivate"] == 0x00010000);
129 BEAST_EXPECT(leFlags[
"MPToken"][
"lsfMPTAuthorized"] == 0x00000002);
134 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_FLAGS));
135 json::Value const& txFlags = result[jss::result][jss::TRANSACTION_FLAGS];
137 BEAST_EXPECT(txFlags[
"universal"][
"tfFullyCanonicalSig"] == 0x80000000);
138 BEAST_EXPECT(txFlags[
"universal"][
"tfInnerBatchTxn"] == 0x40000000);
140 BEAST_EXPECT(txFlags[
"AccountSet"][
"tfRequireAuth"] == 0x00040000);
141 BEAST_EXPECT(txFlags[
"AccountSet"][
"tfAllowXRP"] == 0x00200000);
143 BEAST_EXPECT(txFlags[
"MPTokenIssuanceSet"][
"tfMPTLock"] == 0x00000001);
144 BEAST_EXPECT(txFlags[
"MPTokenIssuanceSet"][
"tfMPTUnlock"] == 0x00000002);
146 BEAST_EXPECT(txFlags[
"AMMDeposit"][
"tfLPToken"] == 0x00010000);
147 BEAST_EXPECT(txFlags[
"AMMDeposit"][
"tfLimitLPToken"] == 0x00400000);
152 BEAST_EXPECT(result[jss::result].isMember(jss::ACCOUNT_SET_FLAGS));
153 json::Value const& asFlags = result[jss::result][jss::ACCOUNT_SET_FLAGS];
155 BEAST_EXPECT(asFlags[
"asfDisallowXRP"] == 3);
156 BEAST_EXPECT(asFlags[
"asfGlobalFreeze"] == 7);
157 BEAST_EXPECT(asFlags[
"asfDisallowIncomingNFTokenOffer"] == 12);
158 BEAST_EXPECT(asFlags[
"asfDisallowIncomingTrustline"] == 15);
163 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_FORMATS));
164 json::Value const& txnFormats = result[jss::result][jss::TRANSACTION_FORMATS];
168 BEAST_EXPECT(txnFormats.
isMember(
"common"));
171 BEAST_EXPECT(section[0u][jss::name] ==
"TransactionType");
172 BEAST_EXPECT(section[0u][jss::optionality] ==
SoeRequired);
174 BEAST_EXPECT(section[1u][jss::name] ==
"Flags");
175 BEAST_EXPECT(section[1u][jss::optionality] ==
SoeOptional);
177 BEAST_EXPECT(section[2u][jss::name] ==
"SourceTag");
178 BEAST_EXPECT(section[2u][jss::optionality] ==
SoeOptional);
180 BEAST_EXPECT(section[3u][jss::name] ==
"Account");
181 BEAST_EXPECT(section[3u][jss::optionality] ==
SoeRequired);
183 BEAST_EXPECT(section[4u][jss::name] ==
"Sequence");
184 BEAST_EXPECT(section[4u][jss::optionality] ==
SoeRequired);
186 BEAST_EXPECT(section[5u][jss::name] ==
"PreviousTxnID");
187 BEAST_EXPECT(section[5u][jss::optionality] ==
SoeOptional);
189 BEAST_EXPECT(section[6u][jss::name] ==
"LastLedgerSequence");
190 BEAST_EXPECT(section[6u][jss::optionality] ==
SoeOptional);
192 BEAST_EXPECT(section[7u][jss::name] ==
"AccountTxnID");
193 BEAST_EXPECT(section[7u][jss::optionality] ==
SoeOptional);
195 BEAST_EXPECT(section[8u][jss::name] ==
"Fee");
196 BEAST_EXPECT(section[8u][jss::optionality] ==
SoeRequired);
198 BEAST_EXPECT(section[9u][jss::name] ==
"OperationLimit");
199 BEAST_EXPECT(section[9u][jss::optionality] ==
SoeOptional);
201 BEAST_EXPECT(section[10u][jss::name] ==
"Memos");
202 BEAST_EXPECT(section[10u][jss::optionality] ==
SoeOptional);
204 BEAST_EXPECT(section[11u][jss::name] ==
"SigningPubKey");
205 BEAST_EXPECT(section[11u][jss::optionality] ==
SoeRequired);
207 BEAST_EXPECT(section[12u][jss::name] ==
"TicketSequence");
208 BEAST_EXPECT(section[12u][jss::optionality] ==
SoeOptional);
210 BEAST_EXPECT(section[13u][jss::name] ==
"TxnSignature");
211 BEAST_EXPECT(section[13u][jss::optionality] ==
SoeOptional);
213 BEAST_EXPECT(section[14u][jss::name] ==
"Signers");
214 BEAST_EXPECT(section[14u][jss::optionality] ==
SoeOptional);
216 BEAST_EXPECT(section[15u][jss::name] ==
"NetworkID");
217 BEAST_EXPECT(section[15u][jss::optionality] ==
SoeOptional);
219 BEAST_EXPECT(section[16u][jss::name] ==
"Delegate");
220 BEAST_EXPECT(section[16u][jss::optionality] ==
SoeOptional);
226 BEAST_EXPECT(txnFormats.
isMember(
"OracleSet"));
227 json::Value const& section = txnFormats[
"OracleSet"];
229 BEAST_EXPECT(section[0u][jss::name] ==
"OracleDocumentID");
230 BEAST_EXPECT(section[0u][jss::optionality] ==
SoeRequired);
232 BEAST_EXPECT(section[1u][jss::name] ==
"Provider");
233 BEAST_EXPECT(section[1u][jss::optionality] ==
SoeOptional);
235 BEAST_EXPECT(section[2u][jss::name] ==
"URI");
236 BEAST_EXPECT(section[2u][jss::optionality] ==
SoeOptional);
238 BEAST_EXPECT(section[3u][jss::name] ==
"AssetClass");
239 BEAST_EXPECT(section[3u][jss::optionality] ==
SoeOptional);
241 BEAST_EXPECT(section[4u][jss::name] ==
"LastUpdateTime");
242 BEAST_EXPECT(section[4u][jss::optionality] ==
SoeRequired);
244 BEAST_EXPECT(section[5u][jss::name] ==
"PriceDataSeries");
245 BEAST_EXPECT(section[5u][jss::optionality] ==
SoeRequired);
250 BEAST_EXPECT(txnFormats.
isMember(
"PermissionedDomainDelete"));
251 json::Value const& section = txnFormats[
"PermissionedDomainDelete"];
253 BEAST_EXPECT(section[0u][jss::name] ==
"DomainID");
254 BEAST_EXPECT(section[0u][jss::optionality] ==
SoeRequired);
259 BEAST_EXPECT(txnFormats.
isMember(
"Clawback"));
260 json::Value const& section = txnFormats[
"Clawback"];
262 BEAST_EXPECT(section[0u][jss::name] ==
"Amount");
263 BEAST_EXPECT(section[0u][jss::optionality] ==
SoeRequired);
265 BEAST_EXPECT(section[1u][jss::name] ==
"Holder");
266 BEAST_EXPECT(section[1u][jss::optionality] ==
SoeOptional);
271 BEAST_EXPECT(txnFormats.
isMember(
"SetFee"));
274 BEAST_EXPECT(section[0u][jss::name] ==
"LedgerSequence");
275 BEAST_EXPECT(section[0u][jss::optionality] ==
SoeOptional);
277 BEAST_EXPECT(section[1u][jss::name] ==
"BaseFee");
278 BEAST_EXPECT(section[1u][jss::optionality] ==
SoeOptional);
280 BEAST_EXPECT(section[2u][jss::name] ==
"ReferenceFeeUnits");
281 BEAST_EXPECT(section[2u][jss::optionality] ==
SoeOptional);
283 BEAST_EXPECT(section[3u][jss::name] ==
"ReserveBase");
284 BEAST_EXPECT(section[3u][jss::optionality] ==
SoeOptional);
286 BEAST_EXPECT(section[4u][jss::name] ==
"ReserveIncrement");
287 BEAST_EXPECT(section[4u][jss::optionality] ==
SoeOptional);
289 BEAST_EXPECT(section[5u][jss::name] ==
"BaseFeeDrops");
290 BEAST_EXPECT(section[5u][jss::optionality] ==
SoeOptional);
292 BEAST_EXPECT(section[6u][jss::name] ==
"ReserveBaseDrops");
293 BEAST_EXPECT(section[6u][jss::optionality] ==
SoeOptional);
295 BEAST_EXPECT(section[7u][jss::name] ==
"ReserveIncrementDrops");
296 BEAST_EXPECT(section[7u][jss::optionality] ==
SoeOptional);
303 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_FORMATS));
311 result[jss::result][jss::LEDGER_ENTRY_FORMATS][
"common"];
313 BEAST_EXPECT(observedCommonLedgerEntry[0u][jss::name] ==
"LedgerIndex");
314 BEAST_EXPECT(observedCommonLedgerEntry[0u][jss::optionality] ==
SoeOptional);
316 BEAST_EXPECT(observedCommonLedgerEntry[1u][jss::name] ==
"LedgerEntryType");
317 BEAST_EXPECT(observedCommonLedgerEntry[1u][jss::optionality] ==
SoeRequired);
319 BEAST_EXPECT(observedCommonLedgerEntry[2u][jss::name] ==
"Flags");
320 BEAST_EXPECT(observedCommonLedgerEntry[2u][jss::optionality] ==
SoeRequired);
326 result[jss::result][jss::LEDGER_ENTRY_FORMATS][
"DID"];
328 BEAST_EXPECT(observedDIDLedgerEntry[0u][jss::name] ==
"Account");
329 BEAST_EXPECT(observedDIDLedgerEntry[0u][jss::optionality] ==
SoeRequired);
331 BEAST_EXPECT(observedDIDLedgerEntry[1u][jss::name] ==
"DIDDocument");
332 BEAST_EXPECT(observedDIDLedgerEntry[1u][jss::optionality] ==
SoeOptional);
334 BEAST_EXPECT(observedDIDLedgerEntry[2u][jss::name] ==
"URI");
335 BEAST_EXPECT(observedDIDLedgerEntry[2u][jss::optionality] ==
SoeOptional);
337 BEAST_EXPECT(observedDIDLedgerEntry[3u][jss::name] ==
"Data");
338 BEAST_EXPECT(observedDIDLedgerEntry[3u][jss::optionality] ==
SoeOptional);
340 BEAST_EXPECT(observedDIDLedgerEntry[4u][jss::name] ==
"OwnerNode");
341 BEAST_EXPECT(observedDIDLedgerEntry[4u][jss::optionality] ==
SoeRequired);
343 BEAST_EXPECT(observedDIDLedgerEntry[5u][jss::name] ==
"PreviousTxnID");
344 BEAST_EXPECT(observedDIDLedgerEntry[5u][jss::optionality] ==
SoeRequired);
346 BEAST_EXPECT(observedDIDLedgerEntry[6u][jss::name] ==
"PreviousTxnLgrSeq");
347 BEAST_EXPECT(observedDIDLedgerEntry[6u][jss::optionality] ==
SoeRequired);
353 result[jss::result][jss::LEDGER_ENTRY_FORMATS][
"NegativeUNL"];
355 BEAST_EXPECT(observedNunlLedgerEntry[0u][jss::name] ==
"DisabledValidators");
356 BEAST_EXPECT(observedNunlLedgerEntry[0u][jss::optionality] ==
SoeOptional);
358 BEAST_EXPECT(observedNunlLedgerEntry[1u][jss::name] ==
"ValidatorToDisable");
359 BEAST_EXPECT(observedNunlLedgerEntry[1u][jss::optionality] ==
SoeOptional);
361 BEAST_EXPECT(observedNunlLedgerEntry[2u][jss::name] ==
"ValidatorToReEnable");
362 BEAST_EXPECT(observedNunlLedgerEntry[2u][jss::optionality] ==
SoeOptional);
364 BEAST_EXPECT(observedNunlLedgerEntry[3u][jss::name] ==
"PreviousTxnID");
365 BEAST_EXPECT(observedNunlLedgerEntry[3u][jss::optionality] ==
SoeOptional);
367 BEAST_EXPECT(observedNunlLedgerEntry[4u][jss::name] ==
"PreviousTxnLgrSeq");
368 BEAST_EXPECT(observedNunlLedgerEntry[4u][jss::optionality] ==
SoeOptional);
375 json::Value const& txFlags = result[jss::result][jss::TRANSACTION_FLAGS];
379 BEAST_EXPECT(txFlags.
isMember(txName));
382 for (
auto const& [flagName, flagValue] : flagMap)
384 BEAST_EXPECT(txFlags[txName].isMember(flagName));
385 if (txFlags[txName].isMember(flagName))
387 BEAST_EXPECT(txFlags[txName][flagName].asUInt() == flagValue);
397 json::Value const& leFlags = result[jss::result][jss::LEDGER_ENTRY_FLAGS];
401 BEAST_EXPECT(leFlags.
isMember(ledgerType));
404 for (
auto const& [flagName, flagValue] : flagMap)
406 BEAST_EXPECT(leFlags[ledgerType].isMember(flagName));
407 if (leFlags[ledgerType].isMember(flagName))
409 BEAST_EXPECT(leFlags[ledgerType][flagName].asUInt() == flagValue);
419 json::Value const& asFlags = result[jss::result][jss::ACCOUNT_SET_FLAGS];
423 BEAST_EXPECT(asFlags.
isMember(flagName));
426 BEAST_EXPECT(asFlags[flagName].asInt() == flagValue);
434 auto const firstResult = env.
rpc(
"server_definitions");
435 auto const hash = firstResult[jss::result][jss::hash].
asString();
436 auto const hashParam =
std::string(
"{ ") +
"\"hash\": \"" + hash +
"\"}";
438 auto const result = env.
rpc(
"json",
"server_definitions", hashParam);
439 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
440 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
441 BEAST_EXPECT(!result[jss::result].isMember(jss::FIELDS));
442 BEAST_EXPECT(!result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
443 BEAST_EXPECT(!result[jss::result].isMember(jss::LEDGER_ENTRY_FLAGS));
444 BEAST_EXPECT(!result[jss::result].isMember(jss::LEDGER_ENTRY_FORMATS));
445 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_RESULTS));
446 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_TYPES));
447 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_FLAGS));
448 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_FORMATS));
449 BEAST_EXPECT(!result[jss::result].isMember(jss::TYPES));
450 BEAST_EXPECT(result[jss::result].isMember(jss::hash));
457 "54296160385A27154BFA70A239DD8E8FD4CC2DB7BA32D970BA3A5B132CF749"
459 auto const hashParam =
std::string(
"{ ") +
"\"hash\": \"" + hash +
"\"}";
461 auto const result = env.
rpc(
"json",
"server_definitions", hashParam);
462 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
463 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
464 BEAST_EXPECT(result[jss::result].isMember(jss::FIELDS));
465 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
466 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_FLAGS));
467 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_FORMATS));
468 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_RESULTS));
469 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_TYPES));
470 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_FLAGS));
471 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_FORMATS));
472 BEAST_EXPECT(result[jss::result].isMember(jss::TYPES));
473 BEAST_EXPECT(result[jss::result].isMember(jss::hash));