#include <Batch.h>
|
| static XRPAmount | calculateBaseFee (ReadView const &view, STTx const &tx) |
| | Calculates the total base fee for a batch transaction.
|
| static std::uint32_t | getFlagsMask (PreflightContext const &ctx) |
| static NotTEC | preflight (PreflightContext const &ctx) |
| | Performs preflight validation checks for a Batch transaction.
|
| static NotTEC | preflightSigValidated (PreflightContext const &ctx) |
| static NotTEC | checkSign (PreclaimContext const &ctx) |
| | Checks the validity of signatures for a batch transaction.
|
| static NotTEC | checkSeqProxy (ReadView const &view, STTx const &tx, beast::Journal j) |
| static NotTEC | checkPriorTxAndLastLedger (PreclaimContext const &ctx) |
| static TER | checkFee (PreclaimContext const &ctx, XRPAmount baseFee) |
| static NotTEC | checkBatchSign (PreclaimContext const &ctx) |
| static XRPAmount | calculateBaseFee (ReadView const &view, STTx const &tx, std::uint32_t extraBaseFeeMultiplier) |
| template<class T> |
| static NotTEC | invokePreflight (PreflightContext const &ctx) |
| template<> |
| NotTEC | invokePreflight (PreflightContext const &ctx) |
| template<> |
| NotTEC | invokePreflight (PreflightContext const &ctx) |
| static TER | preclaim (PreclaimContext const &ctx) |
| static NotTEC | checkGranularSemantics (ReadView const &view, STTx const &tx, std::unordered_set< GranularPermissionType > const &heldGranularPermissions) |
| | This function can be overridden to introduce additional semantic constraints beyond the granular template validation for granular permissions.
|
| template<class T> |
| static NotTEC | invokeCheckPermission (ReadView const &view, STTx const &tx) |
| | Checks whether the transaction is authorized to be executed by the delegated account.
|
| static TER | ticketDelete (ApplyView &view, AccountID const &account, uint256 const &ticketIndex, beast::Journal j) |
|
| static NotTEC | checkSign (ReadView const &view, ApplyFlags flags, std::optional< uint256 const > const &parentBatchId, AccountID const &idAccount, STObject const &sigObject, beast::Journal const j) |
| static XRPAmount | minimumFee (ServiceRegistry ®istry, XRPAmount baseFee, Fees const &fees, ApplyFlags flags) |
| | Compute the minimum fee required to process a transaction with a given baseFee based on the current server load.
|
| static XRPAmount | calculateOwnerReserveFee (ReadView const &view, STTx const &tx) |
| static bool | checkExtraFeatures (PreflightContext const &ctx) |
| static bool | validDataLength (std::optional< Slice > const &slice, std::size_t maxLength) |
| template<class T> |
| static bool | validNumericRange (std::optional< T > value, T max, T min=T{}) |
| template<class T, class Unit> |
| static bool | validNumericRange (std::optional< T > value, unit::ValueUnit< Unit, T > max, unit::ValueUnit< Unit, T > min=unit::ValueUnit< Unit, T >{}) |
| template<class T> |
| static bool | validNumericMinimum (std::optional< T > value, T min=T{}) |
| | Minimum will usually be zero.
|
| template<class T, class Unit> |
| static bool | validNumericMinimum (std::optional< T > value, unit::ValueUnit< Unit, T > min=unit::ValueUnit< Unit, T >{}) |
| | Minimum will usually be zero.
|
|
| static NotTEC | checkPermission (ReadView const &view, STTx const &tx, std::unordered_set< GranularPermissionType > &heldGranularPermissions) |
| static NotTEC | checkSingleSign (ReadView const &view, AccountID const &idSigner, AccountID const &idAccount, SLE::const_pointer sleAccount, beast::Journal const j) |
| static NotTEC | checkMultiSign (ReadView const &view, ApplyFlags flags, AccountID const &id, STObject const &sigObject, beast::Journal const j) |
| static NotTEC | preflight1 (PreflightContext const &ctx, std::uint32_t flagMask) |
| | Performs early sanity checks on the account and fee fields.
|
| static NotTEC | preflight2 (PreflightContext const &ctx) |
| | Checks whether the signature appears valid.
|
| static NotTEC | preflightUniversal (PreflightContext const &ctx) |
| | Universal validations.
|
◆ ConsequencesFactoryType
| Enumerator |
|---|
| Normal | |
| Blocker | |
| Custom | |
Definition at line 129 of file Transactor.h.
◆ Batch()
◆ calculateBaseFee() [1/2]
Calculates the total base fee for a batch transaction.
This function computes the required base fee for a batch transaction, including the base fee for the batch itself, the sum of base fees for all inner transactions, and additional fees for each batch signer. It performs overflow checks and validates the structure of the batch and its signers.
- Parameters
-
| view | The ledger view providing fee and state information. |
| tx | The batch transaction to calculate the fee for. |
- Returns
- XRPAmount The total base fee required for the batch transaction.
- Exceptions
-
Definition at line 53 of file Batch.cpp.
◆ getFlagsMask()
◆ preflight()
Performs preflight validation checks for a Batch transaction.
This function validates the structure and contents of a Batch transaction before it is processed. It ensures that the Batch feature is enabled, checks for valid flags, validates the number and uniqueness of inner transactions, and enforces correct signing and fee requirements.
The following validations are performed:
- The Batch feature must be enabled in the current rules.
- Only one of the mutually exclusive batch flags must be set.
- The batch must contain at least two and no more than the maximum allowed inner transactions.
- Each inner transaction must:
- Be unique within the batch.
- Not itself be a Batch transaction.
- Have the tfInnerBatchTxn flag set.
- Not include a TxnSignature or Signers field.
- Have an empty SigningPubKey.
- Pass its own preflight checks.
- Have a fee of zero.
- Have either Sequence or TicketSequence set, but not both or neither.
- Not duplicate Sequence or TicketSequence values for the same account (for certain flags).
- Validates that all required inner transaction accounts are present in the batch signers array, and that all batch signers are unique and not the outer account.
- Verifies the batch signature if batch signers are present.
- Parameters
-
- Returns
- NotTEC Returns tesSUCCESS if all checks pass, or an appropriate error code otherwise.
Definition at line 203 of file Batch.cpp.
◆ preflightSigValidated()
◆ checkSign() [1/2]
Checks the validity of signatures for a batch transaction.
This method first verifies the standard transaction signature by calling Transactor::checkSign. If the signature is not valid it returns the corresponding error code.
Next, it verifies the batch-specific signature requirements by calling Transactor::checkBatchSign. If this check fails, it also returns the corresponding error code.
If both checks succeed, the function returns tesSUCCESS.
- Parameters
-
- Returns
- NotTEC Returns tesSUCCESS if all signature checks pass, or an error code otherwise.
Definition at line 492 of file Batch.cpp.
◆ doApply()
| TER xrpl::Batch::doApply |
( |
| ) |
|
|
overridevirtual |
Applies the outer batch transaction.
This method is responsible for applying the outer batch transaction. The inner transactions within the batch are applied separately in the applyBatchTransactions method after the outer transaction is processed.
- Returns
- TER Returns tesSUCCESS to indicate successful application of the outer batch transaction.
Implements xrpl::Transactor.
Definition at line 514 of file Batch.cpp.
◆ visitInvariantEntry()
Inspect a single ledger entry modified by this transaction.
Called once for every SLE created, modified, or deleted by the transaction, before finalizeInvariants. Implementations should accumulate whatever state they need to verify transaction-specific post-conditions.
- Parameters
-
| isDelete | true if the entry was erased from the ledger. |
| before | the entry's state before the transaction (nullptr for newly created entries). |
| after | the entry's state as supplied by the apply logic for this transaction. For deletions, this is the SLE being erased and is not guaranteed to be null; callers must use isDelete rather than after == nullptr to detect deletions. |
Implements xrpl::Transactor.
Definition at line 520 of file Batch.cpp.
◆ finalizeInvariants()
Check transaction-specific post-conditions after all entries have been visited.
Called once after every modified ledger entry has been passed to visitInvariantEntry. Returns true if all transaction-specific invariants hold, or false to fail the transaction with tecINVARIANT_FAILED.
- Parameters
-
| tx | the transaction being applied. |
| result | the tentative TER result so far. |
| fee | the fee consumed by the transaction. |
| view | read-only view of the ledger after the transaction. |
| j | journal for logging invariant failures. |
- Returns
- true if all invariants pass; false otherwise.
Implements xrpl::Transactor.
Definition at line 526 of file Batch.cpp.
◆ operator()()
◆ view() [1/2]
◆ view() [2/2]
| ApplyView const & xrpl::Transactor::view |
( |
| ) |
const |
|
nodiscardinherited |
◆ checkInvariants()
Check all invariants for the current transaction.
Runs transaction-specific invariants first (visitInvariantEntry + finalizeInvariants), then protocol-level invariants. Both layers always run; the worst failure code is returned.
- Parameters
-
| result | the tentative TER from transaction processing. |
| fee | the fee consumed by the transaction. |
- Returns
- the final TER after all invariant checks.
Definition at line 1301 of file Transactor.cpp.
◆ checkSeqProxy()
◆ checkPriorTxAndLastLedger()
◆ checkFee()
◆ checkSign() [2/2]
◆ checkBatchSign()
◆ calculateBaseFee() [2/2]
◆ invokePreflight() [1/3]
◆ invokePreflight() [2/3]
◆ invokePreflight() [3/3]
◆ preclaim()
◆ checkGranularSemantics()
This function can be overridden to introduce additional semantic constraints beyond the granular template validation for granular permissions.
It is called by the base invokeCheckPermission method only after the transaction has successfully passed checkGranularSandbox.
Definition at line 238 of file Transactor.h.
◆ invokeCheckPermission()
Checks whether the transaction is authorized to be executed by the delegated account.
This function enforces the strict permission check hierarchy. It is explicitly designed NOT to be overridden. Derived transactors must instead implement checkGranularSemantics to add custom validation logic for granular permissions.
The evaluation proceeds as follows:
- If transaction-level permission is granted, the function immediately returns tesSUCCESS.
- If transaction-level permission is not granted, the function checks whether the transaction matches the granular permission template defined in permissions.macro. If it does, it then calls checkGranularSemantics to perform any additional, fine-grained validation.
Definition at line 261 of file Transactor.h.
◆ ticketDelete()
◆ apply()
| TER xrpl::Transactor::apply |
( |
| ) |
|
|
protectedinherited |
◆ preCompute()
| void xrpl::Transactor::preCompute |
( |
| ) |
|
|
protectedvirtualinherited |
◆ minimumFee()
Compute the minimum fee required to process a transaction with a given baseFee based on the current server load.
- Parameters
-
| registry | The service registry. |
| baseFee | The base fee of a candidate transaction |
- See also
- xrpl::calculateBaseFee
- Parameters
-
| fees | Fee settings from the current ledger |
| flags | Transaction processing fees |
Definition at line 390 of file Transactor.cpp.
◆ calculateOwnerReserveFee()
◆ checkExtraFeatures()
◆ validDataLength()
◆ validNumericRange() [1/2]
template<class T>
| bool xrpl::Transactor::validNumericRange |
( |
std::optional< T > | value, |
|
|
T | max, |
|
|
T | min = T{} ) |
|
staticprotectedinherited |
◆ validNumericRange() [2/2]
template<class T, class Unit>
◆ validNumericMinimum() [1/2]
template<class T>
| bool xrpl::Transactor::validNumericMinimum |
( |
std::optional< T > | value, |
|
|
T | min = T{} ) |
|
staticprotectedinherited |
◆ validNumericMinimum() [2/2]
template<class T, class Unit>
◆ checkPermission()
◆ reset()
Reset the context, discarding any changes made and adjust the fee.
- Parameters
-
| fee | The transaction fee to be charged. |
- Returns
- A pair containing the transaction result and the actual fee charged.
Definition at line 1098 of file Transactor.cpp.
◆ consumeSeqProxy()
◆ payFee()
| TER xrpl::Transactor::payFee |
( |
| ) |
|
|
privateinherited |
◆ processPersistentChanges()
◆ checkSingleSign()
◆ checkMultiSign()
◆ trapTransaction()
| void xrpl::Transactor::trapTransaction |
( |
uint256 | txHash | ) |
const |
|
privateinherited |
◆ preflight1()
Performs early sanity checks on the account and fee fields.
(And passes flagMask to preflight0)
Do not try to call preflight1 from preflight() in derived classes. See the description of invokePreflight for details.
Definition at line 173 of file Transactor.cpp.
◆ preflight2()
Checks whether the signature appears valid.
Do not try to call preflight2 from preflight() in derived classes. See the description of invokePreflight for details.
Definition at line 237 of file Transactor.cpp.
◆ preflightUniversal()
◆ checkTransactionInvariants()
| TER xrpl::Transactor::checkTransactionInvariants |
( |
TER | result, |
|
|
XRPAmount | fee ) |
|
nodiscardprivateinherited |
Check transaction-specific invariants only.
Walks every modified ledger entry via visitInvariantEntry, then calls finalizeInvariants on the derived transactor. Returns tecINVARIANT_FAILED if any transaction invariant is violated.
- Parameters
-
| result | the tentative TER from transaction processing. |
| fee | the fee consumed by the transaction. |
- Returns
- the original result if all invariants pass, or tecINVARIANT_FAILED otherwise.
Definition at line 1267 of file Transactor.cpp.
◆ kConsequencesFactory
◆ kDisabledTxTypes
| auto xrpl::Batch::kDisabledTxTypes |
|
staticconstexpr |
Initial value: = std::to_array<TxType>({
ttVAULT_CREATE,
ttVAULT_SET,
ttVAULT_DELETE,
ttVAULT_DEPOSIT,
ttVAULT_WITHDRAW,
ttVAULT_CLAWBACK,
ttLOAN_BROKER_SET,
ttLOAN_BROKER_DELETE,
ttLOAN_BROKER_COVER_DEPOSIT,
ttLOAN_BROKER_COVER_WITHDRAW,
ttLOAN_BROKER_COVER_CLAWBACK,
ttLOAN_SET,
ttLOAN_DELETE,
ttLOAN_MANAGE,
ttLOAN_PAY,
})
Definition at line 47 of file tx/transactors/system/Batch.h.
◆ ctx_
◆ sink_
◆ j_
◆ accountID_
◆ preFeeBalance_
| XRPAmount xrpl::Transactor::preFeeBalance_ {} |
|
protectedinherited |