21 using namespace test::jtx;
25 auto const result = env.
rpc(
"server_definitions");
26 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
27 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
28 BEAST_EXPECT(result[jss::result].isMember(jss::FIELDS));
29 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
30 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_RESULTS));
31 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_TYPES));
32 BEAST_EXPECT(result[jss::result].isMember(jss::TYPES));
33 BEAST_EXPECT(result[jss::result].isMember(jss::hash));
39 auto const firstField = result[jss::result][jss::FIELDS][0u];
40 BEAST_EXPECT(firstField[0u].asString() ==
"Generic");
41 BEAST_EXPECT(firstField[1][jss::isSerialized].asBool() ==
false);
42 BEAST_EXPECT(firstField[1][jss::isSigningField].asBool() ==
false);
43 BEAST_EXPECT(firstField[1][jss::isVLEncoded].asBool() ==
false);
44 BEAST_EXPECT(firstField[1][jss::nth].asUInt() == 0);
45 BEAST_EXPECT(firstField[1][jss::type].asString() ==
"Unknown");
49 result[jss::result][jss::LEDGER_ENTRY_TYPES][
"AccountRoot"].asUInt() == 97);
51 result[jss::result][jss::TRANSACTION_RESULTS][
"tecDIR_FULL"].asUInt() == 121);
52 BEAST_EXPECT(result[jss::result][jss::TRANSACTION_TYPES][
"Payment"].asUInt() == 0);
53 BEAST_EXPECT(result[jss::result][jss::TYPES][
"AccountID"].asUInt() == 8);
58 for (
auto& field : result[jss::result][jss::FIELDS])
60 if (field[0u].asString() == name)
67 BEAST_EXPECT(fieldExists(
"Generic"));
68 BEAST_EXPECT(fieldExists(
"Invalid"));
69 BEAST_EXPECT(fieldExists(
"ObjectEndMarker"));
70 BEAST_EXPECT(fieldExists(
"ArrayEndMarker"));
71 BEAST_EXPECT(fieldExists(
"taker_gets_funded"));
72 BEAST_EXPECT(fieldExists(
"taker_pays_funded"));
73 BEAST_EXPECT(fieldExists(
"hash"));
74 BEAST_EXPECT(fieldExists(
"index"));
79 auto const types = result[jss::result][jss::TYPES];
80 BEAST_EXPECT(types[
"Hash128"].asUInt() == 4);
81 BEAST_EXPECT(types[
"Hash160"].asUInt() == 17);
82 BEAST_EXPECT(types[
"Hash192"].asUInt() == 21);
83 BEAST_EXPECT(types[
"Hash256"].asUInt() == 5);
84 BEAST_EXPECT(types[
"Hash384"].asUInt() == 22);
85 BEAST_EXPECT(types[
"Hash512"].asUInt() == 23);
90 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_FLAGS));
91 Json::Value const& leFlags = result[jss::result][jss::LEDGER_ENTRY_FLAGS];
94 BEAST_EXPECT(leFlags[
"AccountRoot"][
"lsfDisallowXRP"] == 0x00080000);
95 BEAST_EXPECT(leFlags[
"AccountRoot"][
"lsfDepositAuth"] == 0x01000000);
96 BEAST_EXPECT(leFlags[
"AccountRoot"][
"lsfAllowTrustLineClawback"] == 0x80000000);
98 BEAST_EXPECT(leFlags[
"RippleState"][
"lsfHighFreeze"] == 0x00800000);
99 BEAST_EXPECT(leFlags[
"RippleState"][
"lsfAMMNode"] == 0x01000000);
101 BEAST_EXPECT(leFlags[
"DirNode"][
"lsfNFTokenBuyOffers"] == 0x00000001);
102 BEAST_EXPECT(leFlags[
"MPTokenIssuance"][
"lsfMPTCanTrade"] == 0x00000010);
103 BEAST_EXPECT(leFlags[
"Credential"][
"lsfAccepted"] == 0x00010000);
104 BEAST_EXPECT(leFlags[
"Loan"][
"lsfLoanImpaired"] == 0x00020000);
105 BEAST_EXPECT(leFlags[
"Vault"][
"lsfVaultPrivate"] == 0x00010000);
106 BEAST_EXPECT(leFlags[
"MPToken"][
"lsfMPTAuthorized"] == 0x00000002);
111 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_FLAGS));
112 Json::Value const& txFlags = result[jss::result][jss::TRANSACTION_FLAGS];
114 BEAST_EXPECT(txFlags[
"universal"][
"tfFullyCanonicalSig"] == 0x80000000);
115 BEAST_EXPECT(txFlags[
"universal"][
"tfInnerBatchTxn"] == 0x40000000);
117 BEAST_EXPECT(txFlags[
"AccountSet"][
"tfRequireAuth"] == 0x00040000);
118 BEAST_EXPECT(txFlags[
"AccountSet"][
"tfAllowXRP"] == 0x00200000);
120 BEAST_EXPECT(txFlags[
"MPTokenIssuanceSet"][
"tfMPTLock"] == 0x00000001);
121 BEAST_EXPECT(txFlags[
"MPTokenIssuanceSet"][
"tfMPTUnlock"] == 0x00000002);
123 BEAST_EXPECT(txFlags[
"AMMDeposit"][
"tfLPToken"] == 0x00010000);
124 BEAST_EXPECT(txFlags[
"AMMDeposit"][
"tfLimitLPToken"] == 0x00400000);
129 BEAST_EXPECT(result[jss::result].isMember(jss::ACCOUNT_SET_FLAGS));
130 Json::Value const& asFlags = result[jss::result][jss::ACCOUNT_SET_FLAGS];
132 BEAST_EXPECT(asFlags[
"asfDisallowXRP"] == 3);
133 BEAST_EXPECT(asFlags[
"asfGlobalFreeze"] == 7);
134 BEAST_EXPECT(asFlags[
"asfDisallowIncomingNFTokenOffer"] == 12);
135 BEAST_EXPECT(asFlags[
"asfDisallowIncomingTrustline"] == 15);
140 BEAST_EXPECT(result[jss::result].isMember(jss::TRANSACTION_FORMATS));
141 Json::Value const& txnFormats = result[jss::result][jss::TRANSACTION_FORMATS];
145 BEAST_EXPECT(txnFormats.
isMember(
"common"));
148 BEAST_EXPECT(section[0u][jss::name] ==
"TransactionType");
149 BEAST_EXPECT(section[0u][jss::optionality] ==
soeREQUIRED);
151 BEAST_EXPECT(section[1u][jss::name] ==
"Flags");
152 BEAST_EXPECT(section[1u][jss::optionality] ==
soeOPTIONAL);
154 BEAST_EXPECT(section[2u][jss::name] ==
"SourceTag");
155 BEAST_EXPECT(section[2u][jss::optionality] ==
soeOPTIONAL);
157 BEAST_EXPECT(section[3u][jss::name] ==
"Account");
158 BEAST_EXPECT(section[3u][jss::optionality] ==
soeREQUIRED);
160 BEAST_EXPECT(section[4u][jss::name] ==
"Sequence");
161 BEAST_EXPECT(section[4u][jss::optionality] ==
soeREQUIRED);
163 BEAST_EXPECT(section[5u][jss::name] ==
"PreviousTxnID");
164 BEAST_EXPECT(section[5u][jss::optionality] ==
soeOPTIONAL);
166 BEAST_EXPECT(section[6u][jss::name] ==
"LastLedgerSequence");
167 BEAST_EXPECT(section[6u][jss::optionality] ==
soeOPTIONAL);
169 BEAST_EXPECT(section[7u][jss::name] ==
"AccountTxnID");
170 BEAST_EXPECT(section[7u][jss::optionality] ==
soeOPTIONAL);
172 BEAST_EXPECT(section[8u][jss::name] ==
"Fee");
173 BEAST_EXPECT(section[8u][jss::optionality] ==
soeREQUIRED);
175 BEAST_EXPECT(section[9u][jss::name] ==
"OperationLimit");
176 BEAST_EXPECT(section[9u][jss::optionality] ==
soeOPTIONAL);
178 BEAST_EXPECT(section[10u][jss::name] ==
"Memos");
179 BEAST_EXPECT(section[10u][jss::optionality] ==
soeOPTIONAL);
181 BEAST_EXPECT(section[11u][jss::name] ==
"SigningPubKey");
182 BEAST_EXPECT(section[11u][jss::optionality] ==
soeREQUIRED);
184 BEAST_EXPECT(section[12u][jss::name] ==
"TicketSequence");
185 BEAST_EXPECT(section[12u][jss::optionality] ==
soeOPTIONAL);
187 BEAST_EXPECT(section[13u][jss::name] ==
"TxnSignature");
188 BEAST_EXPECT(section[13u][jss::optionality] ==
soeOPTIONAL);
190 BEAST_EXPECT(section[14u][jss::name] ==
"Signers");
191 BEAST_EXPECT(section[14u][jss::optionality] ==
soeOPTIONAL);
193 BEAST_EXPECT(section[15u][jss::name] ==
"NetworkID");
194 BEAST_EXPECT(section[15u][jss::optionality] ==
soeOPTIONAL);
196 BEAST_EXPECT(section[16u][jss::name] ==
"Delegate");
197 BEAST_EXPECT(section[16u][jss::optionality] ==
soeOPTIONAL);
203 BEAST_EXPECT(txnFormats.
isMember(
"OracleSet"));
204 Json::Value const& section = txnFormats[
"OracleSet"];
206 BEAST_EXPECT(section[0u][jss::name] ==
"OracleDocumentID");
207 BEAST_EXPECT(section[0u][jss::optionality] ==
soeREQUIRED);
209 BEAST_EXPECT(section[1u][jss::name] ==
"Provider");
210 BEAST_EXPECT(section[1u][jss::optionality] ==
soeOPTIONAL);
212 BEAST_EXPECT(section[2u][jss::name] ==
"URI");
213 BEAST_EXPECT(section[2u][jss::optionality] ==
soeOPTIONAL);
215 BEAST_EXPECT(section[3u][jss::name] ==
"AssetClass");
216 BEAST_EXPECT(section[3u][jss::optionality] ==
soeOPTIONAL);
218 BEAST_EXPECT(section[4u][jss::name] ==
"LastUpdateTime");
219 BEAST_EXPECT(section[4u][jss::optionality] ==
soeREQUIRED);
221 BEAST_EXPECT(section[5u][jss::name] ==
"PriceDataSeries");
222 BEAST_EXPECT(section[5u][jss::optionality] ==
soeREQUIRED);
227 BEAST_EXPECT(txnFormats.
isMember(
"PermissionedDomainDelete"));
228 Json::Value const& section = txnFormats[
"PermissionedDomainDelete"];
230 BEAST_EXPECT(section[0u][jss::name] ==
"DomainID");
231 BEAST_EXPECT(section[0u][jss::optionality] ==
soeREQUIRED);
236 BEAST_EXPECT(txnFormats.
isMember(
"Clawback"));
237 Json::Value const& section = txnFormats[
"Clawback"];
239 BEAST_EXPECT(section[0u][jss::name] ==
"Amount");
240 BEAST_EXPECT(section[0u][jss::optionality] ==
soeREQUIRED);
242 BEAST_EXPECT(section[1u][jss::name] ==
"Holder");
243 BEAST_EXPECT(section[1u][jss::optionality] ==
soeOPTIONAL);
248 BEAST_EXPECT(txnFormats.
isMember(
"SetFee"));
251 BEAST_EXPECT(section[0u][jss::name] ==
"LedgerSequence");
252 BEAST_EXPECT(section[0u][jss::optionality] ==
soeOPTIONAL);
254 BEAST_EXPECT(section[1u][jss::name] ==
"BaseFee");
255 BEAST_EXPECT(section[1u][jss::optionality] ==
soeOPTIONAL);
257 BEAST_EXPECT(section[2u][jss::name] ==
"ReferenceFeeUnits");
258 BEAST_EXPECT(section[2u][jss::optionality] ==
soeOPTIONAL);
260 BEAST_EXPECT(section[3u][jss::name] ==
"ReserveBase");
261 BEAST_EXPECT(section[3u][jss::optionality] ==
soeOPTIONAL);
263 BEAST_EXPECT(section[4u][jss::name] ==
"ReserveIncrement");
264 BEAST_EXPECT(section[4u][jss::optionality] ==
soeOPTIONAL);
266 BEAST_EXPECT(section[5u][jss::name] ==
"BaseFeeDrops");
267 BEAST_EXPECT(section[5u][jss::optionality] ==
soeOPTIONAL);
269 BEAST_EXPECT(section[6u][jss::name] ==
"ReserveBaseDrops");
270 BEAST_EXPECT(section[6u][jss::optionality] ==
soeOPTIONAL);
272 BEAST_EXPECT(section[7u][jss::name] ==
"ReserveIncrementDrops");
273 BEAST_EXPECT(section[7u][jss::optionality] ==
soeOPTIONAL);
280 BEAST_EXPECT(result[jss::result].isMember(jss::LEDGER_ENTRY_FORMATS));
288 result[jss::result][jss::LEDGER_ENTRY_FORMATS][
"common"];
290 BEAST_EXPECT(observedCommonLedgerEntry[0u][jss::name] ==
"LedgerIndex");
291 BEAST_EXPECT(observedCommonLedgerEntry[0u][jss::optionality] ==
soeOPTIONAL);
293 BEAST_EXPECT(observedCommonLedgerEntry[1u][jss::name] ==
"LedgerEntryType");
294 BEAST_EXPECT(observedCommonLedgerEntry[1u][jss::optionality] ==
soeREQUIRED);
296 BEAST_EXPECT(observedCommonLedgerEntry[2u][jss::name] ==
"Flags");
297 BEAST_EXPECT(observedCommonLedgerEntry[2u][jss::optionality] ==
soeREQUIRED);
303 result[jss::result][jss::LEDGER_ENTRY_FORMATS][
"DID"];
305 BEAST_EXPECT(observedDIDLedgerEntry[0u][jss::name] ==
"Account");
306 BEAST_EXPECT(observedDIDLedgerEntry[0u][jss::optionality] ==
soeREQUIRED);
308 BEAST_EXPECT(observedDIDLedgerEntry[1u][jss::name] ==
"DIDDocument");
309 BEAST_EXPECT(observedDIDLedgerEntry[1u][jss::optionality] ==
soeOPTIONAL);
311 BEAST_EXPECT(observedDIDLedgerEntry[2u][jss::name] ==
"URI");
312 BEAST_EXPECT(observedDIDLedgerEntry[2u][jss::optionality] ==
soeOPTIONAL);
314 BEAST_EXPECT(observedDIDLedgerEntry[3u][jss::name] ==
"Data");
315 BEAST_EXPECT(observedDIDLedgerEntry[3u][jss::optionality] ==
soeOPTIONAL);
317 BEAST_EXPECT(observedDIDLedgerEntry[4u][jss::name] ==
"OwnerNode");
318 BEAST_EXPECT(observedDIDLedgerEntry[4u][jss::optionality] ==
soeREQUIRED);
320 BEAST_EXPECT(observedDIDLedgerEntry[5u][jss::name] ==
"PreviousTxnID");
321 BEAST_EXPECT(observedDIDLedgerEntry[5u][jss::optionality] ==
soeREQUIRED);
323 BEAST_EXPECT(observedDIDLedgerEntry[6u][jss::name] ==
"PreviousTxnLgrSeq");
324 BEAST_EXPECT(observedDIDLedgerEntry[6u][jss::optionality] ==
soeREQUIRED);
330 result[jss::result][jss::LEDGER_ENTRY_FORMATS][
"NegativeUNL"];
332 BEAST_EXPECT(observedNunlLedgerEntry[0u][jss::name] ==
"DisabledValidators");
333 BEAST_EXPECT(observedNunlLedgerEntry[0u][jss::optionality] ==
soeOPTIONAL);
335 BEAST_EXPECT(observedNunlLedgerEntry[1u][jss::name] ==
"ValidatorToDisable");
336 BEAST_EXPECT(observedNunlLedgerEntry[1u][jss::optionality] ==
soeOPTIONAL);
338 BEAST_EXPECT(observedNunlLedgerEntry[2u][jss::name] ==
"ValidatorToReEnable");
339 BEAST_EXPECT(observedNunlLedgerEntry[2u][jss::optionality] ==
soeOPTIONAL);
341 BEAST_EXPECT(observedNunlLedgerEntry[3u][jss::name] ==
"PreviousTxnID");
342 BEAST_EXPECT(observedNunlLedgerEntry[3u][jss::optionality] ==
soeOPTIONAL);
344 BEAST_EXPECT(observedNunlLedgerEntry[4u][jss::name] ==
"PreviousTxnLgrSeq");
345 BEAST_EXPECT(observedNunlLedgerEntry[4u][jss::optionality] ==
soeOPTIONAL);
352 Json::Value const& txFlags = result[jss::result][jss::TRANSACTION_FLAGS];
356 BEAST_EXPECT(txFlags.
isMember(txName));
359 for (
auto const& [flagName, flagValue] : flagMap)
361 BEAST_EXPECT(txFlags[txName].isMember(flagName));
362 if (txFlags[txName].isMember(flagName))
364 BEAST_EXPECT(txFlags[txName][flagName].asUInt() == flagValue);
374 Json::Value const& leFlags = result[jss::result][jss::LEDGER_ENTRY_FLAGS];
378 BEAST_EXPECT(leFlags.
isMember(ledgerType));
381 for (
auto const& [flagName, flagValue] : flagMap)
383 BEAST_EXPECT(leFlags[ledgerType].isMember(flagName));
384 if (leFlags[ledgerType].isMember(flagName))
386 BEAST_EXPECT(leFlags[ledgerType][flagName].asUInt() == flagValue);
396 Json::Value const& asFlags = result[jss::result][jss::ACCOUNT_SET_FLAGS];
400 BEAST_EXPECT(asFlags.
isMember(flagName));
403 BEAST_EXPECT(asFlags[flagName].asInt() == flagValue);
411 auto const firstResult = env.
rpc(
"server_definitions");
412 auto const hash = firstResult[jss::result][jss::hash].
asString();
413 auto const hashParam =
std::string(
"{ ") +
"\"hash\": \"" + hash +
"\"}";
415 auto const result = env.
rpc(
"json",
"server_definitions", hashParam);
416 BEAST_EXPECT(!result[jss::result].isMember(jss::error));
417 BEAST_EXPECT(result[jss::result][jss::status] ==
"success");
418 BEAST_EXPECT(!result[jss::result].isMember(jss::FIELDS));
419 BEAST_EXPECT(!result[jss::result].isMember(jss::LEDGER_ENTRY_TYPES));
420 BEAST_EXPECT(!result[jss::result].isMember(jss::LEDGER_ENTRY_FLAGS));
421 BEAST_EXPECT(!result[jss::result].isMember(jss::LEDGER_ENTRY_FORMATS));
422 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_RESULTS));
423 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_TYPES));
424 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_FLAGS));
425 BEAST_EXPECT(!result[jss::result].isMember(jss::TRANSACTION_FORMATS));
426 BEAST_EXPECT(!result[jss::result].isMember(jss::TYPES));
427 BEAST_EXPECT(result[jss::result].isMember(jss::hash));
434 "54296160385A27154BFA70A239DD8E8FD4CC2DB7BA32D970BA3A5B132CF749"
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));