xrpld
Loading...
Searching...
No Matches
xrpl::AMMDeposit Class Reference

AMMDeposit implements AMM deposit Transactor. More...

#include <AMMDeposit.h>

Inheritance diagram for xrpl::AMMDeposit:
Collaboration diagram for xrpl::AMMDeposit:

Public Types

enum class  ConsequencesFactoryType { Normal , Blocker , Custom }

Public Member Functions

 AMMDeposit (ApplyContext &ctx)
TER doApply () override
void visitInvariantEntry (bool isDelete, SLE::const_ref before, SLE::const_ref after) override
 Inspect a single ledger entry modified by this transaction.
bool finalizeInvariants (STTx const &tx, TER result, XRPAmount fee, ReadView const &view, beast::Journal const &j) override
 Check transaction-specific post-conditions after all entries have been visited.
ApplyResult operator() ()
 Process the transaction.
ApplyViewview ()
ApplyView const & view () const
TER checkInvariants (TER result, XRPAmount fee)
 Check all invariants for the current transaction.

Static Public Member Functions

static bool checkExtraFeatures (PreflightContext const &ctx)
static std::uint32_t getFlagsMask (PreflightContext const &ctx)
static NotTEC preflight (PreflightContext const &ctx)
static TER preclaim (PreclaimContext const &ctx)
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 checkSign (PreclaimContext const &ctx)
static NotTEC checkBatchSign (PreclaimContext const &ctx)
static XRPAmount calculateBaseFee (ReadView const &view, STTx const &tx)
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 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 Public Attributes

static constexpr auto kConsequencesFactory = ConsequencesFactoryType::Normal

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 (ServiceRegistry &registry, 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 NotTEC preflightSigValidated (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 accountID_
XRPAmount preFeeBalance_ {}

Private Member Functions

std::pair< TER, bool > applyGuts (Sandbox &view)
std::pair< TER, STAmountdeposit (Sandbox &view, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amountDeposit, std::optional< STAmount > const &amount2Deposit, STAmount const &lptAMMBalance, STAmount const &lpTokensDeposit, std::optional< STAmount > const &depositMin, std::optional< STAmount > const &deposit2Min, std::optional< STAmount > const &lpTokensDepositMin, std::uint16_t tfee)
 Deposit requested assets and token amount into LP account.
std::pair< TER, STAmountequalDepositTokens (Sandbox &view, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amount2Balance, STAmount const &lptAMMBalance, STAmount const &lpTokensDeposit, std::optional< STAmount > const &depositMin, std::optional< STAmount > const &deposit2Min, std::uint16_t tfee)
 Equal asset deposit (LPTokens) for the specified share of the AMM instance pools.
std::pair< TER, STAmountequalDepositLimit (Sandbox &view, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amount2Balance, STAmount const &lptAMMBalance, STAmount const &amount, STAmount const &amount2, std::optional< STAmount > const &lpTokensDepositMin, std::uint16_t tfee)
 Equal asset deposit (Asset1In, Asset2In) with the constraint on the maximum amount of both assets that the trader is willing to deposit.
std::pair< TER, STAmountsingleDeposit (Sandbox &view, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &lptAMMBalance, STAmount const &amount, std::optional< STAmount > const &lpTokensDepositMin, std::uint16_t tfee)
 Single asset deposit (Asset1In) by the amount.
std::pair< TER, STAmountsingleDepositTokens (Sandbox &view, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amount, STAmount const &lptAMMBalance, STAmount const &lpTokensDeposit, std::uint16_t tfee)
 Single asset deposit (Asset1In, LPTokens) by the tokens.
std::pair< TER, STAmountsingleDepositEPrice (Sandbox &view, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amount, STAmount const &lptAMMBalance, STAmount const &ePrice, std::uint16_t tfee)
 Single asset deposit (Asset1In, EPrice) with two constraints.
std::pair< TER, STAmountequalDepositInEmptyState (Sandbox &view, AccountID const &ammAccount, STAmount const &amount, STAmount const &amount2, Asset const &lptIssue, std::uint16_t tfee)
 Equal deposit in empty AMM state (LP tokens balance is 0).
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 ()
std::tuple< TER, XRPAmount, bool > processPersistentChanges (TER result, XRPAmount fee)
void trapTransaction (uint256) const
TER checkTransactionInvariants (TER result, XRPAmount fee)
 Check transaction-specific invariants only.

Static Private Member Functions

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.

Detailed Description

AMMDeposit implements AMM deposit Transactor.

The deposit transaction is used to add liquidity to the AMM instance pool, thus obtaining some share of the instance's pools in the form of LPTokens. If the trader deposits proportional values of both assets without changing their relative price, then no trading fee is charged on the transaction. The trader can specify different combination of the fields in the deposit. LPTokens - transaction assumes proportional deposit of pools assets in exchange for the specified amount of LPTokens of the AMM instance. Asset1In - transaction assumes single asset deposit of the amount of asset specified by Asset1In. This is essentially a swap and an equal asset deposit. Asset1In and Asset2In - transaction assumes proportional deposit of pool assets with the constraints on the maximum amount of each asset that the trader is willing to deposit. Asset1In and LPTokens - transaction assumes that a single asset asset1 is deposited to obtain some share of the AMM instance's pools represented by amount of LPTokens. Asset1In and EPrice - transaction assumes single asset deposit with the following two constraints: a. amount of asset1 if specified (not 0) in Asset1In specifies the maximum amount of asset1 that the trader is willing to deposit b. The effective-price of the LPTokens traded out does not exceed the specified EPrice. Following updates after a successful AMMDeposit transaction: The deposited asset, if XRP, is transferred from the account that initiated the transaction to the AMM instance account, thus changing the Balance field of each account. The deposited asset, if tokens, are balanced between the AMM account and the issuer account trustline. The LPTokens are issued by the AMM instance account to the account that initiated the transaction and a new trustline is created, if there does not exist one. The pool composition is updated.

See also
XLS30d:AMMDeposit transaction

Definition at line 42 of file tx/transactors/dex/AMMDeposit.h.

Member Enumeration Documentation

◆ ConsequencesFactoryType

enum class xrpl::Transactor::ConsequencesFactoryType
stronginherited
Enumerator
Normal 
Blocker 
Custom 

Definition at line 129 of file Transactor.h.

Constructor & Destructor Documentation

◆ AMMDeposit()

xrpl::AMMDeposit::AMMDeposit ( ApplyContext & ctx)
explicit

Definition at line 47 of file tx/transactors/dex/AMMDeposit.h.

Member Function Documentation

◆ checkExtraFeatures()

bool xrpl::AMMDeposit::checkExtraFeatures ( PreflightContext const & ctx)
static

Definition at line 36 of file AMMDeposit.cpp.

◆ getFlagsMask()

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

Definition at line 50 of file AMMDeposit.cpp.

◆ preflight()

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

Definition at line 56 of file AMMDeposit.cpp.

◆ preclaim()

TER xrpl::AMMDeposit::preclaim ( PreclaimContext const & ctx)
static

Definition at line 177 of file AMMDeposit.cpp.

◆ doApply()

TER xrpl::AMMDeposit::doApply ( )
overridevirtual

Implements xrpl::Transactor.

Definition at line 529 of file AMMDeposit.cpp.

◆ visitInvariantEntry()

void xrpl::AMMDeposit::visitInvariantEntry ( bool isDelete,
SLE::const_ref before,
SLE::const_ref after )
overridevirtual

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
isDeletetrue if the entry was erased from the ledger.
beforethe entry's state before the transaction (nullptr for newly created entries).
afterthe 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 1060 of file AMMDeposit.cpp.

◆ finalizeInvariants()

bool xrpl::AMMDeposit::finalizeInvariants ( STTx const & tx,
TER result,
XRPAmount fee,
ReadView const & view,
beast::Journal const & j )
nodiscardoverridevirtual

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
txthe transaction being applied.
resultthe tentative TER result so far.
feethe fee consumed by the transaction.
viewread-only view of the ledger after the transaction.
jjournal for logging invariant failures.
Returns
true if all invariants pass; false otherwise.

Implements xrpl::Transactor.

Definition at line 1066 of file AMMDeposit.cpp.

◆ applyGuts()

std::pair< TER, bool > xrpl::AMMDeposit::applyGuts ( Sandbox & view)
private

Definition at line 412 of file AMMDeposit.cpp.

◆ deposit()

std::pair< TER, STAmount > xrpl::AMMDeposit::deposit ( Sandbox & view,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amountDeposit,
std::optional< STAmount > const & amount2Deposit,
STAmount const & lptAMMBalance,
STAmount const & lpTokensDeposit,
std::optional< STAmount > const & depositMin,
std::optional< STAmount > const & deposit2Min,
std::optional< STAmount > const & lpTokensDepositMin,
std::uint16_t tfee )
private

Deposit requested assets and token amount into LP account.

Return new total LPToken balance.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
amountDeposit
amount2Deposit
lptAMMBalancecurrent AMM LPT balance
lpTokensDepositamount of tokens to deposit
depositMinminimum accepted amount deposit
deposit2Minminimum accepted amount2 deposit
lpTokensDepositMinminimum accepted LPTokens deposit
tfeetrading fee in basis points
Returns

Definition at line 543 of file AMMDeposit.cpp.

◆ equalDepositTokens()

std::pair< TER, STAmount > xrpl::AMMDeposit::equalDepositTokens ( Sandbox & view,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amount2Balance,
STAmount const & lptAMMBalance,
STAmount const & lpTokensDeposit,
std::optional< STAmount > const & depositMin,
std::optional< STAmount > const & deposit2Min,
std::uint16_t tfee )
private

Equal asset deposit (LPTokens) for the specified share of the AMM instance pools.

Proportional deposit of pools assets in exchange for the specified amount of LPTokens.

The trading fee is not charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
amount2Balancecurrent AMM asset2 balance
lptAMMBalancecurrent AMM LPT balance
lpTokensDepositamount of tokens to deposit
depositMinminimum accepted amount deposit
deposit2Minminimum accepted amount2 deposit
tfeetrading fee in basis points
Returns

Definition at line 680 of file AMMDeposit.cpp.

◆ equalDepositLimit()

std::pair< TER, STAmount > xrpl::AMMDeposit::equalDepositLimit ( Sandbox & view,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amount2Balance,
STAmount const & lptAMMBalance,
STAmount const & amount,
STAmount const & amount2,
std::optional< STAmount > const & lpTokensDepositMin,
std::uint16_t tfee )
private

Equal asset deposit (Asset1In, Asset2In) with the constraint on the maximum amount of both assets that the trader is willing to deposit.

Proportional deposit of pool assets with the constraints on the maximum amount of each asset that the trader is willing to deposit.

The trading fee is not charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
amount2Balancecurrent AMM asset2 balance
lptAMMBalancecurrent AMM LPT balance
amountmaximum asset1 deposit amount
amount2maximum asset2 deposit amount
lpTokensDepositMinminimum accepted LPTokens deposit
tfeetrading fee in basis points
Returns

a = (t/T) * A (1) b = (t/T) * B (2) where A,B: current pool composition T: current balance of outstanding LPTokens a: balance of asset A being added b: balance of asset B being added t: balance of LPTokens issued to LP after a successful transaction Use equation 1 to compute the amount of t, given the amount in Asset1In. Let this be Z Use equation 2 to compute the amount of asset2, given t~Z. Let the computed amount of asset2 be X. If X <= amount in Asset2In: The amount of asset1 to be deposited is the one specified in Asset1In The amount of asset2 to be deposited is X The amount of LPTokens to be issued is Z If X > amount in Asset2In: Use equation 2 to compute , given the amount in Asset2In. Let this be W Use equation 1 to compute the amount of asset1, given t~W from above. Let the computed amount of asset1 be Y If Y <= amount in Asset1In: The amount of asset1 to be deposited is Y The amount of asset2 to be deposited is the one specified in Asset2In The amount of LPTokens to be issued is W else, failed transaction

Definition at line 753 of file AMMDeposit.cpp.

◆ singleDeposit()

std::pair< TER, STAmount > xrpl::AMMDeposit::singleDeposit ( Sandbox & view,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & lptAMMBalance,
STAmount const & amount,
std::optional< STAmount > const & lpTokensDepositMin,
std::uint16_t tfee )
private

Single asset deposit (Asset1In) by the amount.

Single asset deposit of the amount of asset specified by Asset1In.

The trading fee is charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
lptAMMBalancecurrent AMM LPT balance
amountrequested asset1 deposit amount
lpTokensDepositMinminimum accepted LPTokens deposit
tfeetrading fee in basis points
Returns

t = T * (b / B - x) / (1 + x) (3) where f1 = (1 - 0.5 * tfee) / (1 - tfee) x = sqrt(f1**2 + b / (B * (1 - tfee)) - f1 Use equation 3

See also
singleDeposit to compute amount of LPTokens to be issued, given the amount in Asset1In.

Definition at line 834 of file AMMDeposit.cpp.

◆ singleDepositTokens()

std::pair< TER, STAmount > xrpl::AMMDeposit::singleDepositTokens ( Sandbox & view,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amount,
STAmount const & lptAMMBalance,
STAmount const & lpTokensDeposit,
std::uint16_t tfee )
private

Single asset deposit (Asset1In, LPTokens) by the tokens.

Single asset asset1 is deposited to obtain some share of the AMM instance's pools represented by amount of LPTokens.

The trading fee is charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
amountmax asset1 to deposit
lptAMMBalancecurrent AMM LPT balance
lpTokensDepositamount of tokens to deposit
tfeetrading fee in basis points
Returns

Use equation 4 to compute the amount of asset1 to be deposited, given t represented by amount of LPTokens. Equation 4 solves equation 3

See also
singleDeposit for b. Fail if b exceeds specified Max amount to deposit.

Definition at line 881 of file AMMDeposit.cpp.

◆ singleDepositEPrice()

std::pair< TER, STAmount > xrpl::AMMDeposit::singleDepositEPrice ( Sandbox & view,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amount,
STAmount const & lptAMMBalance,
STAmount const & ePrice,
std::uint16_t tfee )
private

Single asset deposit (Asset1In, EPrice) with two constraints.

Single asset deposit with two constraints.

The trading fee is charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
amountrequested asset1 deposit amount
lptAMMBalancecurrent AMM LPT balance
ePricemaximum effective price
tfee
Returns

a. Amount of asset1 if specified (not 0) in Asset1In specifies the maximum amount of asset1 that the trader is willing to deposit. b. The effective-price of the LPToken traded out does not exceed the specified EPrice. The effective price (EP) of a trade is defined as the ratio of the tokens the trader sold or swapped in (Token B) and the token they got in return or swapped out (Token A). EP(B/A) = b/a (III) Use equation 3

See also
singleDeposit to compute the amount of LPTokens out, given the amount of Asset1In. Let this be X. Use equation III to compute the effective-price of the trade given Asset1In amount as the asset in and the LPTokens amount X as asset out. Let this be Y. If Y <= amount in EPrice: The amount of asset1 to be deposited is given by amount in Asset1In The amount of LPTokens to be issued is X If (Y>EPrice) OR (amount in Asset1In does not exist): Use equations 3
singleDeposit & III and the given EPrice to compute the following two variables: The amount of asset1 in. Let this be Q The amount of LPTokens out. Let this be W The amount of asset1 to be deposited is Q The amount of LPTokens to be issued is W

Definition at line 937 of file AMMDeposit.cpp.

◆ equalDepositInEmptyState()

std::pair< TER, STAmount > xrpl::AMMDeposit::equalDepositInEmptyState ( Sandbox & view,
AccountID const & ammAccount,
STAmount const & amount,
STAmount const & amount2,
Asset const & lptIssue,
std::uint16_t tfee )
private

Equal deposit in empty AMM state (LP tokens balance is 0).

Parameters
view
ammAccount
amountrequested asset1 deposit amount
amount2requested asset2 deposit amount
tfee
Returns

Definition at line 1037 of file AMMDeposit.cpp.

◆ operator()()

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

Process the transaction.

Definition at line 1318 of file Transactor.cpp.

◆ view() [1/2]

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

Definition at line 136 of file Transactor.h.

◆ view() [2/2]

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

Definition at line 142 of file Transactor.h.

◆ checkInvariants()

TER xrpl::Transactor::checkInvariants ( TER result,
XRPAmount fee )
nodiscardinherited

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
resultthe tentative TER from transaction processing.
feethe fee consumed by the transaction.
Returns
the final TER after all invariant checks.

Definition at line 1301 of file Transactor.cpp.

◆ checkSeqProxy()

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

Definition at line 487 of file Transactor.cpp.

◆ checkPriorTxAndLastLedger()

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

Definition at line 552 of file Transactor.cpp.

◆ checkFee()

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

Definition at line 400 of file Transactor.cpp.

◆ checkSign() [1/2]

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

Definition at line 771 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 705 of file Transactor.cpp.

◆ checkBatchSign()

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

Definition at line 779 of file Transactor.cpp.

◆ calculateBaseFee() [1/2]

XRPAmount xrpl::Transactor::calculateBaseFee ( ReadView const & view,
STTx const & tx )
staticinherited

Definition at line 342 of file Transactor.cpp.

◆ calculateBaseFee() [2/2]

XRPAmount xrpl::Transactor::calculateBaseFee ( ReadView const & view,
STTx const & tx,
std::uint32_t extraBaseFeeMultiplier )
staticinherited

Definition at line 360 of file Transactor.cpp.

◆ invokePreflight() [1/3]

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

Definition at line 530 of file Transactor.h.

◆ invokePreflight() [2/3]

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

◆ invokePreflight() [3/3]

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

Definition at line 33 of file Change.cpp.

◆ checkGranularSemantics()

NotTEC xrpl::Transactor::checkGranularSemantics ( ReadView const & view,
STTx const & tx,
std::unordered_set< GranularPermissionType > const & heldGranularPermissions )
staticinherited

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()

template<class T>
NotTEC xrpl::Transactor::invokeCheckPermission ( ReadView const & view,
STTx const & tx )
staticinherited

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()

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

Definition at line 597 of file Transactor.cpp.

◆ apply()

TER xrpl::Transactor::apply ( )
protectedinherited

Definition at line 669 of file Transactor.cpp.

◆ preCompute()

void xrpl::Transactor::preCompute ( )
protectedvirtualinherited

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

Definition at line 663 of file Transactor.cpp.

◆ minimumFee()

XRPAmount xrpl::Transactor::minimumFee ( ServiceRegistry & registry,
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
registryThe service registry.
baseFeeThe base fee of a candidate transaction
See also
xrpl::calculateBaseFee
Parameters
feesFee settings from the current ledger
flagsTransaction processing fees

Definition at line 390 of file Transactor.cpp.

◆ calculateOwnerReserveFee()

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

Definition at line 370 of file Transactor.cpp.

◆ preflightSigValidated()

NotTEC xrpl::Transactor::preflightSigValidated ( PreflightContext const & ctx)
staticprotectedinherited

Definition at line 306 of file Transactor.cpp.

◆ validDataLength()

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

Definition at line 292 of file Transactor.cpp.

◆ validNumericRange() [1/2]

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

Definition at line 559 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 568 of file Transactor.h.

◆ validNumericMinimum() [1/2]

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

Minimum will usually be zero.

Definition at line 578 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 587 of file Transactor.h.

◆ checkPermission()

NotTEC xrpl::Transactor::checkPermission ( ReadView const & view,
STTx const & tx,
std::unordered_set< GranularPermissionType > & heldGranularPermissions )
staticprivateinherited

Definition at line 312 of file Transactor.cpp.

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

◆ consumeSeqProxy()

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

Definition at line 580 of file Transactor.cpp.

◆ payFee()

TER xrpl::Transactor::payFee ( )
privateinherited

Definition at line 467 of file Transactor.cpp.

◆ processPersistentChanges()

std::tuple< TER, XRPAmount, bool > xrpl::Transactor::processPersistentChanges ( TER result,
XRPAmount fee )
privateinherited

Definition at line 1155 of file Transactor.cpp.

◆ checkSingleSign()

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

Definition at line 823 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 855 of file Transactor.cpp.

◆ trapTransaction()

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

Definition at line 1149 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 173 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 237 of file Transactor.cpp.

◆ preflightUniversal()

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

Universal validations.

  • Valid MPTAmount and XRPAmount

    Do not try to call preflightUniversal from preflight() in derived classes. See the description of invokePreflight for details.

Definition at line 273 of file Transactor.cpp.

◆ 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
resultthe tentative TER from transaction processing.
feethe 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.

Member Data Documentation

◆ kConsequencesFactory

auto xrpl::AMMDeposit::kConsequencesFactory = ConsequencesFactoryType::Normal
staticconstexpr

Definition at line 45 of file tx/transactors/dex/AMMDeposit.h.

◆ ctx_

ApplyContext& xrpl::Transactor::ctx_
protectedinherited

Definition at line 116 of file Transactor.h.

◆ sink_

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

Definition at line 117 of file Transactor.h.

◆ j_

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

Definition at line 118 of file Transactor.h.

◆ accountID_

AccountID const xrpl::Transactor::accountID_
protectedinherited

Definition at line 120 of file Transactor.h.

◆ preFeeBalance_

XRPAmount xrpl::Transactor::preFeeBalance_ {}
protectedinherited

Definition at line 121 of file Transactor.h.