5#include <xrpl/protocol/LedgerFormats.h>
48#pragma push_macro("XMACRO")
49#pragma push_macro("TO_VALUE")
50#pragma push_macro("VALUE_TO_MAP")
51#pragma push_macro("NULL_NAME")
52#pragma push_macro("NULL_OUTPUT")
53#pragma push_macro("TO_MAP")
54#pragma push_macro("TO_MASK")
55#pragma push_macro("VALUE_TO_MASK")
56#pragma push_macro("ALL_TX_FLAGS")
57#pragma push_macro("NULL_MASK_ADJ")
58#pragma push_macro("MASK_ADJ_TO_MASK")
69#undef MASK_ADJ_TO_MASK
85#define XMACRO(TRANSACTION, TF_FLAG, TF_FLAG2, MASK_ADJ) \
86 TRANSACTION(AccountSet, \
87 TF_FLAG(tfRequireDestTag, 0x00010000) \
88 TF_FLAG(tfOptionalDestTag, 0x00020000) \
89 TF_FLAG(tfRequireAuth, 0x00040000) \
90 TF_FLAG(tfOptionalAuth, 0x00080000) \
91 TF_FLAG(tfDisallowXRP, 0x00100000) \
92 TF_FLAG(tfAllowXRP, 0x00200000), \
95 TRANSACTION(OfferCreate, \
96 TF_FLAG(tfPassive, 0x00010000) \
97 TF_FLAG(tfImmediateOrCancel, 0x00020000) \
98 TF_FLAG(tfFillOrKill, 0x00040000) \
99 TF_FLAG(tfSell, 0x00080000) \
100 TF_FLAG(tfHybrid, 0x00100000), \
103 TRANSACTION(Payment, \
104 TF_FLAG(tfNoRippleDirect, 0x00010000) \
105 TF_FLAG(tfPartialPayment, 0x00020000) \
106 TF_FLAG(tfLimitQuality, 0x00040000) \
107 TF_FLAG(tfSponsorCreatedAccount, 0x00080000), \
110 TRANSACTION(TrustSet, \
111 TF_FLAG(tfSetfAuth, 0x00010000) \
112 TF_FLAG(tfSetNoRipple, 0x00020000) \
113 TF_FLAG(tfClearNoRipple, 0x00040000) \
114 TF_FLAG(tfSetFreeze, 0x00100000) \
115 TF_FLAG(tfClearFreeze, 0x00200000) \
116 TF_FLAG(tfSetDeepFreeze, 0x00400000) \
117 TF_FLAG(tfClearDeepFreeze, 0x00800000), \
120 TRANSACTION(EnableAmendment, \
121 TF_FLAG(tfGotMajority, 0x00010000) \
122 TF_FLAG(tfLostMajority, 0x00020000), \
125 TRANSACTION(PaymentChannelClaim, \
126 TF_FLAG(tfRenew, 0x00010000) \
127 TF_FLAG(tfClose, 0x00020000), \
130 TRANSACTION(NFTokenMint, \
131 TF_FLAG(tfBurnable, 0x00000001) \
132 TF_FLAG(tfOnlyXRP, 0x00000002) \
134 TF_FLAG(tfTransferable, 0x00000008) \
135 TF_FLAG(tfMutable, 0x00000010), \
138 TRANSACTION(MPTokenIssuanceCreate, \
140 TF_FLAG(tfMPTCanLock, lsfMPTCanLock) \
141 TF_FLAG(tfMPTRequireAuth, lsfMPTRequireAuth) \
142 TF_FLAG(tfMPTCanEscrow, lsfMPTCanEscrow) \
143 TF_FLAG(tfMPTCanTrade, lsfMPTCanTrade) \
144 TF_FLAG(tfMPTCanTransfer, lsfMPTCanTransfer) \
145 TF_FLAG(tfMPTCanClawback, lsfMPTCanClawback) \
146 TF_FLAG(tfMPTCanHoldConfidentialBalance, lsfMPTCanHoldConfidentialBalance), \
149 TRANSACTION(MPTokenAuthorize, \
150 TF_FLAG(tfMPTUnauthorize, 0x00000001), \
153 TRANSACTION(MPTokenIssuanceSet, \
154 TF_FLAG(tfMPTLock, 0x00000001) \
155 TF_FLAG(tfMPTUnlock, 0x00000002) \
156 TF_FLAG(tfMPTSetCanLock, 0x00000004) \
157 TF_FLAG(tfMPTSetRequireAuth, 0x00000008) \
158 TF_FLAG(tfMPTSetCanEscrow, 0x00000010) \
159 TF_FLAG(tfMPTSetCanTrade, 0x00000020) \
160 TF_FLAG(tfMPTSetCanTransfer, 0x00000040) \
161 TF_FLAG(tfMPTSetCanClawback, 0x00000080) \
162 TF_FLAG(tfMPTSetCanHoldConfidentialBalance, 0x00000100), \
165 TRANSACTION(NFTokenCreateOffer, \
166 TF_FLAG(tfSellNFToken, 0x00000001), \
169 TRANSACTION(AMMDeposit, \
170 TF_FLAG(tfLPToken, 0x00010000) \
171 TF_FLAG(tfSingleAsset, 0x00080000) \
172 TF_FLAG(tfTwoAsset, 0x00100000) \
173 TF_FLAG(tfOneAssetLPToken, 0x00200000) \
174 TF_FLAG(tfLimitLPToken, 0x00400000) \
175 TF_FLAG(tfTwoAssetIfEmpty, 0x00800000), \
178 TRANSACTION(AMMWithdraw, \
179 TF_FLAG2(tfLPToken, 0x00010000) \
180 TF_FLAG(tfWithdrawAll, 0x00020000) \
181 TF_FLAG(tfOneAssetWithdrawAll, 0x00040000) \
182 TF_FLAG2(tfSingleAsset, 0x00080000) \
183 TF_FLAG2(tfTwoAsset, 0x00100000) \
184 TF_FLAG2(tfOneAssetLPToken, 0x00200000) \
185 TF_FLAG2(tfLimitLPToken, 0x00400000), \
188 TRANSACTION(AMMClawback, \
189 TF_FLAG(tfClawTwoAssets, 0x00000001), \
192 TRANSACTION(XChainModifyBridge, \
193 TF_FLAG(tfClearAccountCreateAmount, 0x00010000), \
196 TRANSACTION(VaultCreate, \
197 TF_FLAG(tfVaultPrivate, lsfVaultPrivate) \
198 TF_FLAG(tfVaultShareNonTransferable, 0x00020000), \
202 TF_FLAG(tfAllOrNothing, 0x00010000) \
203 TF_FLAG(tfOnlyOne, 0x00020000) \
204 TF_FLAG(tfUntilFailure, 0x00040000) \
205 TF_FLAG(tfIndependent, 0x00080000), \
206 MASK_ADJ(tfInnerBatchTxn)) \
208 TRANSACTION(LoanSet, \
209 TF_FLAG(tfLoanOverpayment, 0x00010000), \
212 TRANSACTION(LoanPay, \
214 TF_FLAG2(tfLoanOverpayment, 0x00010000) \
215 TF_FLAG(tfLoanFullPayment, 0x00020000) \
218 TF_FLAG(tfLoanLatePayment, 0x00040000), \
223 TRANSACTION(LoanManage, \
224 TF_FLAG(tfLoanDefault, 0x00010000) \
225 TF_FLAG(tfLoanImpair, 0x00020000) \
226 TF_FLAG(tfLoanUnimpair, 0x00040000), \
229 TRANSACTION(SponsorshipSet, \
230 TF_FLAG(tfSponsorshipSetRequireSignForFee, 0x00010000) \
231 TF_FLAG(tfSponsorshipClearRequireSignForFee, 0x00020000) \
232 TF_FLAG(tfSponsorshipSetRequireSignForReserve, 0x00040000) \
233 TF_FLAG(tfSponsorshipClearRequireSignForReserve, 0x00080000) \
234 TF_FLAG(tfDeleteObject, 0x00100000), \
237 TRANSACTION(SponsorshipTransfer, \
238 TF_FLAG(tfSponsorshipEnd, 0x00010000) \
239 TF_FLAG(tfSponsorshipCreate, 0x00020000) \
240 TF_FLAG(tfSponsorshipReassign, 0x00040000), \
249#define TO_VALUE(name, value) inline constexpr FlagValue name = value;
250#define NULL_NAME(name, values, maskAdj) values
251#define NULL_OUTPUT(name, value)
252#define NULL_MASK_ADJ(value)
253XMACRO(NULL_NAME, TO_VALUE, NULL_OUTPUT, NULL_MASK_ADJ)
263#define TO_MASK(name, values, maskAdj) \
264 inline constexpr FlagValue tf##name##Mask = ~(tfUniversal values) | (maskAdj);
265#define VALUE_TO_MASK(name, value) | name
266#define MASK_ADJ_TO_MASK(value) value
267XMACRO(TO_MASK, VALUE_TO_MASK, VALUE_TO_MASK, MASK_ADJ_TO_MASK)
274 "tfBatchMask must include tfInnerBatchTxn to reject it on outer Batch");
280 "tfPaymentMask must not reject tfInnerBatchTxn");
283 "tfAccountSetMask must not reject tfInnerBatchTxn");
299#define VALUE_TO_MAP(name, value) {#name, value},
300#define TO_MAP(name, values, maskAdj) \
301 inline FlagMap const& get##name##Flags() \
303 static FlagMap const flags = {values}; \
306XMACRO(TO_MAP, VALUE_TO_MAP, VALUE_TO_MAP, NULL_MASK_ADJ)
327#define ALL_TX_FLAGS(name, values, maskAdj) {#name, get##name##Flags()},
333 XMACRO(ALL_TX_FLAGS, NULL_OUTPUT, NULL_OUTPUT, NULL_MASK_ADJ)};
347#undef MASK_ADJ_TO_MASK
349#pragma pop_macro("XMACRO")
350#pragma pop_macro("TO_VALUE")
351#pragma pop_macro("VALUE_TO_MAP")
352#pragma pop_macro("NULL_NAME")
353#pragma pop_macro("NULL_OUTPUT")
354#pragma pop_macro("TO_MAP")
355#pragma pop_macro("TO_MASK")
356#pragma pop_macro("VALUE_TO_MASK")
357#pragma pop_macro("ALL_TX_FLAGS")
358#pragma pop_macro("NULL_MASK_ADJ")
359#pragma pop_macro("MASK_ADJ_TO_MASK")
364 ~(
tfUniversal | tfSetfAuth | tfSetFreeze | tfClearFreeze);
384 tfMPTSetRequireAuth | tfMPTSetCanEscrow | tfMPTSetCanTrade | tfMPTSetCanTransfer |
385 tfMPTSetCanClawback | tfMPTSetCanHoldConfidentialBalance;
400 ~(
tfUniversal | tfBurnable | tfOnlyXRP | tfTransferable);
408 tfOneAssetLPToken | tfLimitLPToken | tfWithdrawAll | tfOneAssetWithdrawAll;
410 tfLPToken | tfSingleAsset | tfTwoAsset | tfOneAssetLPToken | tfLimitLPToken | tfTwoAssetIfEmpty;
412#pragma push_macro("ACCOUNTSET_FLAGS")
413#pragma push_macro("ACCOUNTSET_FLAG_TO_VALUE")
414#pragma push_macro("ACCOUNTSET_FLAG_TO_MAP")
417#define ACCOUNTSET_FLAGS(ASF_FLAG) \
418 ASF_FLAG(asfRequireDest, 1) \
419 ASF_FLAG(asfRequireAuth, 2) \
420 ASF_FLAG(asfDisallowXRP, 3) \
421 ASF_FLAG(asfDisableMaster, 4) \
422 ASF_FLAG(asfAccountTxnID, 5) \
423 ASF_FLAG(asfNoFreeze, 6) \
424 ASF_FLAG(asfGlobalFreeze, 7) \
425 ASF_FLAG(asfDefaultRipple, 8) \
426 ASF_FLAG(asfDepositAuth, 9) \
427 ASF_FLAG(asfAuthorizedNFTokenMinter, 10) \
429 ASF_FLAG(asfDisallowIncomingNFTokenOffer, 12) \
430 ASF_FLAG(asfDisallowIncomingCheck, 13) \
431 ASF_FLAG(asfDisallowIncomingPayChan, 14) \
432 ASF_FLAG(asfDisallowIncomingTrustline, 15) \
433 ASF_FLAG(asfAllowTrustLineClawback, 16) \
434 ASF_FLAG(asfAllowTrustLineLocking, 17)
436#define ACCOUNTSET_FLAG_TO_VALUE(name, value) inline constexpr FlagValue name = value;
437#define ACCOUNTSET_FLAG_TO_MAP(name, value) {#name, value},
439ACCOUNTSET_FLAGS(ACCOUNTSET_FLAG_TO_VALUE)
445 ACCOUNTSET_FLAGS(ACCOUNTSET_FLAG_TO_MAP)};
449#undef ACCOUNTSET_FLAG_TO_VALUE
450#undef ACCOUNTSET_FLAG_TO_MAP
451#undef ACCOUNTSET_FLAGS
453#pragma pop_macro("ACCOUNTSET_FLAG_TO_VALUE")
454#pragma pop_macro("ACCOUNTSET_FLAG_TO_MAP")
455#pragma pop_macro("ACCOUNTSET_FLAGS")
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
constexpr FlagValue tifMPTMetadata
constexpr FlagValue spfSponsorFee
constexpr std::uint32_t lsifMPTCanClawback
constexpr FlagValue tfInnerBatchTxn
std::uint32_t FlagValue
Transaction flags.
constexpr std::uint32_t lsifMPTCanHoldConfidentialBalance
constexpr std::uint32_t lsifMPTRequireAuth
constexpr FlagValue tfDepositSubTx
constexpr FlagValue tfTrustLine
constexpr FlagValue tfNFTokenMintMaskWithoutMutable
constexpr FlagValue tfNFTokenMintOldMaskWithMutable
constexpr FlagValue tifMPTTransferFee
constexpr FlagValue tfTrustSetPermissionMask
constexpr std::uint32_t lsifMPTCanEscrow
constexpr FlagValue tifMPTCanEscrow
std::vector< std::pair< std::string, FlagMap > > FlagMapPairList
constexpr FlagValue tfUniversal
constexpr FlagValue tifMPTCanTransfer
constexpr FlagValue tfMPTokenIssuanceSetEnableFlagMask
constexpr FlagValue tfMPTPaymentMask
FlagMap const & getUniversalFlags()
FlagMapPairList const & getAllTxFlags()
constexpr FlagValue tifMPTokenIssuanceImmutableMask
constexpr FlagValue tfNFTokenMintOldMask
constexpr std::uint32_t lsifMPTCanTrade
std::map< std::string, FlagValue > FlagMap
constexpr FlagValue tifMPTCanHoldConfidentialBalance
constexpr std::uint32_t lsifMPTMetadata
constexpr FlagValue spfSponsorFlagMask
constexpr FlagValue tifMPTCanClawback
std::map< std::string, FlagValue > const & getAsfFlagMap()
constexpr FlagValue tifMPTCanLock
constexpr std::uint32_t lsifMPTCanLock
constexpr FlagValue tifMPTCanTrade
constexpr FlagValue tfWithdrawSubTx
constexpr FlagValue tfUniversalMask
constexpr FlagValue tifMPTRequireAuth
constexpr FlagValue spfSponsorReserve
constexpr FlagValue tfFullyCanonicalSig
constexpr std::uint32_t lsifMPTTransferFee
constexpr std::uint32_t lsifMPTCanTransfer