rippled
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | List of all members
xrpl::Batch Class Reference

#include <Batch.h>

Inheritance diagram for xrpl::Batch:
Inheritance graph
[legend]
Collaboration diagram for xrpl::Batch:
Collaboration graph
[legend]

Public Types

enum  ConsequencesFactoryType { Normal , Blocker , Custom }
 

Public Member Functions

 Batch (ApplyContext &ctx)
 
TER doApply () override
 Applies the outer batch transaction.
 
ApplyResult operator() ()
 Process the transaction.
 
ApplyViewview ()
 
ApplyView const & view () const
 

Static Public Member Functions

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)
 
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 checkPermission (ReadView const &view, STTx const &tx)
 
static TER ticketDelete (ApplyView &view, AccountID const &account, uint256 const &ticketIndex, beast::Journal j)
 

Static Public Attributes

static constexpr ConsequencesFactoryType ConsequencesFactory {Normal}
 
static constexpr auto disabledTxTypes
 

Protected Member Functions

TER apply ()
 
virtual void preCompute ()
 

Static Protected Member Functions

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 (Application &app, 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.
 

Protected Attributes

ApplyContextctx_
 
beast::WrappedSink sink_
 
beast::Journal const j_
 
AccountID const account_
 
XRPAmount mPriorBalance
 
XRPAmount mSourceBalance
 

Private Member Functions

std::pair< TER, XRPAmountreset (XRPAmount fee)
 Reset the context, discarding any changes made and adjust the fee.
 
TER consumeSeqProxy (SLE::pointer const &sleAccount)
 
TER payFee ()
 
void trapTransaction (uint256) const
 

Static Private Member Functions

static NotTEC checkSingleSign (ReadView const &view, AccountID const &idSigner, AccountID const &idAccount, std::shared_ptr< SLE const > 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.
 

Detailed Description

Definition at line 12 of file src/xrpld/app/tx/detail/Batch.h.

Member Enumeration Documentation

◆ ConsequencesFactoryType

Enumerator
Normal 
Blocker 
Custom 

Definition at line 138 of file Transactor.h.

Constructor & Destructor Documentation

◆ Batch()

xrpl::Batch::Batch ( ApplyContext ctx)
explicit

Definition at line 17 of file src/xrpld/app/tx/detail/Batch.h.

Member Function Documentation

◆ calculateBaseFee()

XRPAmount xrpl::Batch::calculateBaseFee ( ReadView const &  view,
STTx const &  tx 
)
static

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
viewThe ledger view providing fee and state information.
txThe batch transaction to calculate the fee for.
Returns
XRPAmount The total base fee required for the batch transaction.
Exceptions
std::overflow_errorIf any fee calculation would overflow the XRPAmount type.
std::length_errorIf the number of inner transactions or signers exceeds the allowed maximum.
std::invalid_argumentIf an inner transaction is itself a batch transaction.

Definition at line 35 of file Batch.cpp.

◆ getFlagsMask()

std::uint32_t xrpl::Batch::getFlagsMask ( PreflightContext const &  ctx)
static

Definition at line 149 of file Batch.cpp.

◆ preflight()

NotTEC xrpl::Batch::preflight ( PreflightContext const &  ctx)
static

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
ctxThe PreflightContext containing the transaction and environment.
Returns
NotTEC Returns tesSUCCESS if all checks pass, or an appropriate error code otherwise.

Definition at line 188 of file Batch.cpp.

◆ preflightSigValidated()

NotTEC xrpl::Batch::preflightSigValidated ( PreflightContext const &  ctx)
static

Definition at line 387 of file Batch.cpp.

◆ checkSign() [1/2]

NotTEC xrpl::Batch::checkSign ( PreclaimContext const &  ctx)
static

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
ctxThe PreclaimContext containing transaction and environment data.
Returns
NotTEC Returns tesSUCCESS if all signature checks pass, or an error code otherwise.

Definition at line 497 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 519 of file Batch.cpp.

◆ operator()()

ApplyResult xrpl::Transactor::operator() ( )
inherited

Process the transaction.

Definition at line 1135 of file Transactor.cpp.

◆ view() [1/2]

ApplyView & xrpl::Transactor::view ( )
inherited

Definition at line 144 of file Transactor.h.

◆ view() [2/2]

ApplyView const & xrpl::Transactor::view ( ) const
inherited

Definition at line 150 of file Transactor.h.

◆ checkSeqProxy()

NotTEC xrpl::Transactor::checkSeqProxy ( ReadView const &  view,
STTx const &  tx,
beast::Journal  j 
)
staticinherited

Definition at line 432 of file Transactor.cpp.

◆ checkPriorTxAndLastLedger()

NotTEC xrpl::Transactor::checkPriorTxAndLastLedger ( PreclaimContext const &  ctx)
staticinherited

Definition at line 503 of file Transactor.cpp.

◆ checkFee()

TER xrpl::Transactor::checkFee ( PreclaimContext const &  ctx,
XRPAmount  baseFee 
)
staticinherited

Definition at line 332 of file Transactor.cpp.

◆ checkSign() [2/2]

NotTEC xrpl::Transactor::checkSign ( ReadView const &  view,
ApplyFlags  flags,
std::optional< uint256 const > const &  parentBatchId,
AccountID const &  idAccount,
STObject const &  sigObject,
beast::Journal const  j 
)
staticprotectedinherited

Definition at line 659 of file Transactor.cpp.

◆ checkBatchSign()

NotTEC xrpl::Transactor::checkBatchSign ( PreclaimContext const &  ctx)
staticinherited

Definition at line 738 of file Transactor.cpp.

◆ invokePreflight() [1/3]

template<class T >
NotTEC xrpl::Transactor::invokePreflight ( PreflightContext const &  ctx)
staticinherited

Definition at line 393 of file Transactor.h.

◆ invokePreflight() [2/3]

template<>
NotTEC xrpl::Transactor::invokePreflight ( PreflightContext const &  ctx)
staticinherited

Definition at line 18 of file Change.cpp.

◆ invokePreflight() [3/3]

template<>
NotTEC xrpl::Transactor::invokePreflight ( PreflightContext const &  ctx)
staticinherited

◆ preclaim()

static TER xrpl::Transactor::preclaim ( PreclaimContext const &  ctx)
staticinherited

Definition at line 214 of file Transactor.h.

◆ checkPermission()

NotTEC xrpl::Transactor::checkPermission ( ReadView const &  view,
STTx const &  tx 
)
staticinherited

Definition at line 267 of file Transactor.cpp.

◆ ticketDelete()

TER xrpl::Transactor::ticketDelete ( ApplyView view,
AccountID const &  account,
uint256 const &  ticketIndex,
beast::Journal  j 
)
staticinherited

Definition at line 552 of file Transactor.cpp.

◆ apply()

TER xrpl::Transactor::apply ( )
protectedinherited

Definition at line 622 of file Transactor.cpp.

◆ preCompute()

void xrpl::Transactor::preCompute ( )
protectedvirtualinherited

Reimplemented in xrpl::Change, and xrpl::SetSignerList.

Definition at line 614 of file Transactor.cpp.

◆ minimumFee()

XRPAmount xrpl::Transactor::minimumFee ( Application app,
XRPAmount  baseFee,
Fees const &  fees,
ApplyFlags  flags 
)
staticprotectedinherited

Compute the minimum fee required to process a transaction with a given baseFee based on the current server load.

Parameters
appThe application hosting the server
baseFeeThe base fee of a candidate transaction
See also
xrpl::calculateBaseFee
Parameters
feesFee settings from the current ledger
flagsTransaction processing fees

Definition at line 322 of file Transactor.cpp.

◆ calculateOwnerReserveFee()

XRPAmount xrpl::Transactor::calculateOwnerReserveFee ( ReadView const &  view,
STTx const &  tx 
)
staticprotectedinherited

Definition at line 302 of file Transactor.cpp.

◆ checkExtraFeatures()

bool xrpl::Transactor::checkExtraFeatures ( PreflightContext const &  ctx)
staticprotectedinherited

Definition at line 357 of file Transactor.h.

◆ validDataLength()

bool xrpl::Transactor::validDataLength ( std::optional< Slice > const &  slice,
std::size_t  maxLength 
)
staticprotectedinherited

Definition at line 245 of file Transactor.cpp.

◆ validNumericRange() [1/2]

template<class T >
bool xrpl::Transactor::validNumericRange ( std::optional< T >  value,
max,
min = T{} 
)
staticprotectedinherited

Definition at line 420 of file Transactor.h.

◆ validNumericRange() [2/2]

template<class T , class Unit >
bool xrpl::Transactor::validNumericRange ( std::optional< T >  value,
unit::ValueUnit< Unit, T >  max,
unit::ValueUnit< Unit, T >  min = unit::ValueUnit<Unit, T>{} 
)
staticprotectedinherited

Definition at line 429 of file Transactor.h.

◆ validNumericMinimum() [1/2]

template<class T >
bool xrpl::Transactor::validNumericMinimum ( std::optional< T >  value,
min = T{} 
)
staticprotectedinherited

Minimum will usually be zero.

Definition at line 439 of file Transactor.h.

◆ validNumericMinimum() [2/2]

template<class T , class Unit >
bool xrpl::Transactor::validNumericMinimum ( std::optional< T >  value,
unit::ValueUnit< Unit, T >  min = unit::ValueUnit<Unit, T>{} 
)
staticprotectedinherited

Minimum will usually be zero.

Definition at line 448 of file Transactor.h.

◆ reset()

std::pair< TER, XRPAmount > xrpl::Transactor::reset ( XRPAmount  fee)
privateinherited

Reset the context, discarding any changes made and adjust the fee.

Parameters
feeThe transaction fee to be charged.
Returns
A pair containing the transaction result and the actual fee charged.

Definition at line 1073 of file Transactor.cpp.

◆ consumeSeqProxy()

TER xrpl::Transactor::consumeSeqProxy ( SLE::pointer const &  sleAccount)
privateinherited

Definition at line 533 of file Transactor.cpp.

◆ payFee()

TER xrpl::Transactor::payFee ( )
privateinherited

Definition at line 397 of file Transactor.cpp.

◆ checkSingleSign()

NotTEC xrpl::Transactor::checkSingleSign ( ReadView const &  view,
AccountID const &  idSigner,
AccountID const &  idAccount,
std::shared_ptr< SLE const >  sleAccount,
beast::Journal const  j 
)
staticprivateinherited

Definition at line 784 of file Transactor.cpp.

◆ checkMultiSign()

NotTEC xrpl::Transactor::checkMultiSign ( ReadView const &  view,
ApplyFlags  flags,
AccountID const &  id,
STObject const &  sigObject,
beast::Journal const  j 
)
staticprivateinherited

Definition at line 816 of file Transactor.cpp.

◆ trapTransaction()

void xrpl::Transactor::trapTransaction ( uint256  txHash) const
privateinherited

Definition at line 1128 of file Transactor.cpp.

◆ preflight1()

NotTEC xrpl::Transactor::preflight1 ( PreflightContext const &  ctx,
std::uint32_t  flagMask 
)
staticprivateinherited

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 144 of file Transactor.cpp.

◆ preflight2()

NotTEC xrpl::Transactor::preflight2 ( PreflightContext const &  ctx)
staticprivateinherited

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 199 of file Transactor.cpp.

Member Data Documentation

◆ ConsequencesFactory

constexpr ConsequencesFactoryType xrpl::Batch::ConsequencesFactory {Normal}
staticconstexpr

Definition at line 15 of file src/xrpld/app/tx/detail/Batch.h.

◆ disabledTxTypes

constexpr auto xrpl::Batch::disabledTxTypes
staticconstexpr
Initial value:
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,
})
T is_same_v

Definition at line 39 of file src/xrpld/app/tx/detail/Batch.h.

◆ ctx_

ApplyContext& xrpl::Transactor::ctx_
protectedinherited

Definition at line 124 of file Transactor.h.

◆ sink_

beast::WrappedSink xrpl::Transactor::sink_
protectedinherited

Definition at line 125 of file Transactor.h.

◆ j_

beast::Journal const xrpl::Transactor::j_
protectedinherited

Definition at line 126 of file Transactor.h.

◆ account_

AccountID const xrpl::Transactor::account_
protectedinherited

Definition at line 128 of file Transactor.h.

◆ mPriorBalance

XRPAmount xrpl::Transactor::mPriorBalance
protectedinherited

Definition at line 129 of file Transactor.h.

◆ mSourceBalance

XRPAmount xrpl::Transactor::mSourceBalance
protectedinherited

Definition at line 130 of file Transactor.h.