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

#include <AMMWithdraw.h>

Inheritance diagram for xrpl::AMMWithdraw:
Collaboration diagram for xrpl::AMMWithdraw:

Public Types

enum class  ConsequencesFactoryType { Normal , Blocker , Custom }
enum class  InvariantScope { Full , ProtocolOnly }
 Which invariant layers to check. More...

Public Member Functions

 AMMWithdraw (ApplyContext &ctx)
TER doApply () override
void visitInvariantEntry (bool isDelete, SLE::ConstRef before, SLE::ConstRef 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.
ApplyView & view ()
ApplyView const & view () const
TER checkInvariants (TER result, XRPAmount fee, InvariantScope scope)
 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 std::tuple< TER, STAmount, STAmount, std::optional< STAmount > > equalWithdrawTokens (Sandbox &view, SLE const &ammSle, AccountID const account, std::optional< AccountID > const &clawbackIssuer, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amount2Balance, STAmount const &lptAMMBalance, STAmount const &lpTokens, STAmount const &lpTokensWithdraw, std::uint16_t tfee, FreezeHandling freezeHandling, AuthHandling authHandling, ReserveHandling reserveHandling, WithdrawAll withdrawAll, XRPAmount const &priorBalance, beast::Journal const &journal)
 Equal-asset withdrawal (LPTokens) of some AMM instance pools shares represented by the number of LPTokens .
static std::tuple< TER, STAmount, STAmount, std::optional< STAmount > > withdraw (Sandbox &view, SLE const &ammSle, AccountID const &ammAccount, std::optional< AccountID > const &clawbackIssuer, AccountID const &account, STAmount const &amountBalance, STAmount const &amountWithdraw, std::optional< STAmount > const &amount2Withdraw, STAmount const &lpTokensAMMBalance, STAmount const &lpTokensWithdraw, std::uint16_t tfee, FreezeHandling freezeHandling, AuthHandling authHandling, ReserveHandling reserveHandling, WithdrawAll withdrawAll, XRPAmount const &priorBalance, beast::Journal const &journal)
 Withdraw requested assets and token from AMM into LP account.
static std::pair< TER, bool > deleteAMMAccountIfEmpty (Sandbox &sb, SLE::pointer const ammSle, STAmount const &lpTokenBalance, Asset const &asset1, Asset const &asset2, beast::Journal const &journal)
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 XRPAmount calculateBaseFee (ReadView const &view, STTx const &tx)
static XRPAmount calculateBaseFee (ReadView const &view, STTx const &tx, std::uint32_t extraBaseFeeMultiplier)
static FeePayer getFeePayer (ReadView const &view, STTx const &tx)
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 NotTEC checkSponsor (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 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, bool permitUncreatedAccount=false)
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.
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)

Protected Attributes

ApplyContext & ctx_
beast::WrappedSink sink_
beast::Journal const j_
AccountID const accountID_
XRPAmount preFeeBalance_ {}

Private Member Functions

FreezeHandling issuerFreezeHandling () const
 Returns IgnoreFreeze when the withdrawer is the issuer of a pool asset (post-fixCleanup3_3_0), ZeroIfFrozen otherwise.
std::pair< TER, bool > applyGuts (Sandbox &view)
std::pair< TER, STAmount > withdraw (Sandbox &view, SLE const &ammSle, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amountWithdraw, std::optional< STAmount > const &amount2Withdraw, STAmount const &lpTokensAMMBalance, STAmount const &lpTokensWithdraw, std::uint16_t tfee)
 Withdraw requested assets and token from AMM into LP account.
std::pair< TER, STAmount > equalWithdrawTokens (Sandbox &view, SLE const &ammSle, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amount2Balance, STAmount const &lptAMMBalance, STAmount const &lpTokens, STAmount const &lpTokensWithdraw, std::uint16_t tfee)
 Equal-asset withdrawal (LPTokens) of some AMM instance pools shares represented by the number of LPTokens .
std::pair< TER, STAmount > equalWithdrawLimit (Sandbox &view, SLE const &ammSle, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &amount2Balance, STAmount const &lptAMMBalance, STAmount const &amount, STAmount const &amount2, std::uint16_t tfee)
 Withdraw both assets (Asset1Out, Asset2Out) with the constraints on the maximum amount of each asset that the trader is willing to withdraw.
std::pair< TER, STAmount > singleWithdraw (Sandbox &view, SLE const &ammSle, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &lptAMMBalance, STAmount const &amount, std::uint16_t tfee)
 Single asset withdrawal (Asset1Out) equivalent to the amount specified in Asset1Out.
std::pair< TER, STAmount > singleWithdrawTokens (Sandbox &view, SLE const &ammSle, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &lptAMMBalance, STAmount const &amount, STAmount const &lpTokensWithdraw, std::uint16_t tfee)
 Single asset withdrawal (Asset1Out, LPTokens) proportional to the share specified by tokens.
std::pair< TER, STAmount > singleWithdrawEPrice (Sandbox &view, SLE const &ammSle, AccountID const &ammAccount, STAmount const &amountBalance, STAmount const &lptAMMBalance, STAmount const &amount, STAmount const &ePrice, std::uint16_t tfee)
 Withdraw single asset (Asset1Out, EPrice) with two constraints.
std::pair< TER, XRPAmount > reset (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
void visitEntry (bool isDelete, SLE::ConstRef before, SLE::ConstRef after) final
 Bridges the two-phase TxInvariantCheck interface to this transactor's visitInvariantEntry/finalizeInvariants hooks.
bool finalize (STTx const &tx, TER result, XRPAmount fee, ReadView const &view, beast::Journal const &j) final
 Called after all entries have been visited.

Static Private Member Functions

static WithdrawAll isWithdrawAll (STTx const &tx)
 Check from the flags if it's withdraw all.
static NotTEC checkPermission (ReadView const &view, STTx const &tx, std::unordered_set< GranularPermissionType > &heldGranularPermissions)
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

Definition at line 65 of file tx/transactors/dex/AMMWithdraw.h.

Member Enumeration Documentation

◆ ConsequencesFactoryType

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

Definition at line 175 of file Transactor.h.

◆ InvariantScope

enum class xrpl::Transactor::InvariantScope
stronginherited

Which invariant layers to check.

Full runs the protocol invariants plus the transaction-specific check. This is always the scope of the initial pass, even when the tentative TER is a tec: a bug or exploit could still mutate ledger state, so transaction-specific invariants must run for failed transactions too.

ProtocolOnly runs only the protocol invariants and is used exclusively for the second invariant pass that follows a fee-claim reset — specifically, the reset that Transactor::operator() performs when the initial invariant pass returns tecINVARIANT_FAILED, rolling the transaction's effects back to a fee-claim-only state. In that reduced state the transaction-specific post-conditions no longer apply, but the protocol invariants must still hold against the fee claim itself. ProtocolOnly is not intended for other context discards (e.g. the reset used to handle tecOVERSIZE/tecKILLED/etc. in processPersistentChanges, or the ctx_.discard() done under TapFailHard); those paths do not re-run invariants at all.

Enumerator
Full 
ProtocolOnly 

Definition at line 217 of file Transactor.h.

Constructor & Destructor Documentation

◆ AMMWithdraw()

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

Definition at line 70 of file tx/transactors/dex/AMMWithdraw.h.

Member Function Documentation

◆ checkExtraFeatures()

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

Definition at line 45 of file AMMWithdraw.cpp.

◆ getFlagsMask()

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

Definition at line 59 of file AMMWithdraw.cpp.

◆ preflight()

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

Definition at line 65 of file AMMWithdraw.cpp.

◆ preclaim()

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

Definition at line 184 of file AMMWithdraw.cpp.

◆ doApply()

TER xrpl::AMMWithdraw::doApply ( )
overridevirtual

Implements xrpl::Transactor.

Definition at line 489 of file AMMWithdraw.cpp.

◆ visitInvariantEntry()

void xrpl::AMMWithdraw::visitInvariantEntry ( bool isDelete,
SLE::ConstRef before,
SLE::ConstRef 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 1266 of file AMMWithdraw.cpp.

◆ finalizeInvariants()

bool xrpl::AMMWithdraw::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 1272 of file AMMWithdraw.cpp.

◆ equalWithdrawTokens() [1/2]

std::tuple< TER, STAmount, STAmount, std::optional< STAmount > > xrpl::AMMWithdraw::equalWithdrawTokens ( Sandbox & view,
SLE const & ammSle,
AccountID const account,
std::optional< AccountID > const & clawbackIssuer,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amount2Balance,
STAmount const & lptAMMBalance,
STAmount const & lpTokens,
STAmount const & lpTokensWithdraw,
std::uint16_t tfee,
FreezeHandling freezeHandling,
AuthHandling authHandling,
ReserveHandling reserveHandling,
WithdrawAll withdrawAll,
XRPAmount const & priorBalance,
beast::Journal const & journal )
static

Equal-asset withdrawal (LPTokens) of some AMM instance pools shares represented by the number of LPTokens .

Proportional withdrawal of pool assets for the amount of LPTokens.

The trading fee is not charged.

Parameters
view
ammAccount
amountBalancecurrent LP asset1 balance
amount2Balancecurrent LP asset2 balance
lptAMMBalancecurrent AMM LPT balance
lpTokenscurrent LPT balance
lpTokensWithdrawamount of tokens to withdraw
tfeetrading fee in basis points
freezeHandlingwhether a frozen balance is reported as zero
authHandlingwhether an unauthorized MPT balance is reported as zero
reserveHandlingwhether the recipient owner-reserve check is enforced when a trustline or MPToken has to be auto-created
withdrawAllif withdrawing all lptokens
priorBalancebalance before fees
Returns

Definition at line 903 of file AMMWithdraw.cpp.

◆ withdraw() [1/2]

std::tuple< TER, STAmount, STAmount, std::optional< STAmount > > xrpl::AMMWithdraw::withdraw ( Sandbox & view,
SLE const & ammSle,
AccountID const & ammAccount,
std::optional< AccountID > const & clawbackIssuer,
AccountID const & account,
STAmount const & amountBalance,
STAmount const & amountWithdraw,
std::optional< STAmount > const & amount2Withdraw,
STAmount const & lpTokensAMMBalance,
STAmount const & lpTokensWithdraw,
std::uint16_t tfee,
FreezeHandling freezeHandling,
AuthHandling authHandling,
ReserveHandling reserveHandling,
WithdrawAll withdrawAll,
XRPAmount const & priorBalance,
beast::Journal const & journal )
static

Withdraw requested assets and token from AMM into LP account.

Return new total LPToken balance and the withdrawn amounts for both assets.

Parameters
view
ammSleAMM ledger entry
ammAccountAMM account
clawbackIssuerwhen set (AMMClawback path), the issuer performing the clawback. A recreated MPToken is only auto-authorized when the asset's issuer matches this account, so a clawback cannot grant authorization on behalf of a different (paired-asset) issuer.
accountLP account
amountBalancecurrent LP asset1 balance
amountWithdrawasset1 withdraw amount
amount2Withdrawasset2 withdraw amount
lpTokensAMMBalancecurrent AMM LPT balance
lpTokensWithdrawamount of lptokens to withdraw
tfeetrading fee in basis points
freezeHandlingwhether a frozen balance is reported as zero
authHandlingwhether an unauthorized MPT balance is reported as zero
reserveHandlingwhether the recipient owner-reserve check is enforced when a trustline or MPToken has to be auto-created
withdrawAllif withdraw all lptokens
priorBalancebalance before fees
Returns

Definition at line 538 of file AMMWithdraw.cpp.

◆ deleteAMMAccountIfEmpty()

std::pair< TER, bool > xrpl::AMMWithdraw::deleteAMMAccountIfEmpty ( Sandbox & sb,
SLE::pointer const ammSle,
STAmount const & lpTokenBalance,
Asset const & asset1,
Asset const & asset2,
beast::Journal const & journal )
static

Definition at line 871 of file AMMWithdraw.cpp.

◆ issuerFreezeHandling()

FreezeHandling xrpl::AMMWithdraw::issuerFreezeHandling ( ) const
nodiscardprivate

Returns IgnoreFreeze when the withdrawer is the issuer of a pool asset (post-fixCleanup3_3_0), ZeroIfFrozen otherwise.

Definition at line 319 of file AMMWithdraw.cpp.

◆ applyGuts()

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

Definition at line 338 of file AMMWithdraw.cpp.

◆ withdraw() [2/2]

std::pair< TER, STAmount > xrpl::AMMWithdraw::withdraw ( Sandbox & view,
SLE const & ammSle,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amountWithdraw,
std::optional< STAmount > const & amount2Withdraw,
STAmount const & lpTokensAMMBalance,
STAmount const & lpTokensWithdraw,
std::uint16_t tfee )
private

Withdraw requested assets and token from AMM into LP account.

Return new total LPToken balance.

Parameters
view
ammSleAMM ledger entry
ammAccountAMM account
amountBalancecurrent LP asset1 balance
amountWithdrawasset1 withdraw amount
amount2Withdrawasset2 withdraw amount
lpTokensAMMBalancecurrent AMM LPT balance
lpTokensWithdrawamount of lptokens to withdraw
Returns

Definition at line 503 of file AMMWithdraw.cpp.

◆ equalWithdrawTokens() [2/2]

std::pair< TER, STAmount > xrpl::AMMWithdraw::equalWithdrawTokens ( Sandbox & view,
SLE const & ammSle,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amount2Balance,
STAmount const & lptAMMBalance,
STAmount const & lpTokens,
STAmount const & lpTokensWithdraw,
std::uint16_t tfee )
private

Equal-asset withdrawal (LPTokens) of some AMM instance pools shares represented by the number of LPTokens .

Proportional withdrawal of pool assets for the amount of LPTokens.

The trading fee is not charged.

Parameters
view
ammAccount
amountBalancecurrent LP asset1 balance
amount2Balancecurrent LP asset2 balance
lptAMMBalancecurrent AMM LPT balance
lpTokenscurrent LPT balance
lpTokensWithdrawamount of tokens to withdraw
tfeetrading fee in basis points
Returns

Definition at line 836 of file AMMWithdraw.cpp.

◆ equalWithdrawLimit()

std::pair< TER, STAmount > xrpl::AMMWithdraw::equalWithdrawLimit ( Sandbox & view,
SLE const & ammSle,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & amount2Balance,
STAmount const & lptAMMBalance,
STAmount const & amount,
STAmount const & amount2,
std::uint16_t tfee )
private

Withdraw both assets (Asset1Out, Asset2Out) with the constraints on the maximum amount of each asset that the trader is willing to withdraw.

All assets withdrawal with the constraints on the maximum amount of each asset that the trader is willing to withdraw.

The trading fee is not charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
amount2Balancecurrent AMM asset2 balance
lptAMMBalancecurrent AMM LPT balance
amountasset1 withdraw amount
amount2max asset2 withdraw amount
tfeetrading fee in basis points
Returns

a = (t/T) * A (5) b = (t/T) * B (6) where A,B: current pool composition T: current balance of outstanding LPTokens a: balance of asset A being withdrawn b: balance of asset B being withdrawn t: balance of LPTokens issued to LP after a successful transaction Use equation 5 to compute t, given the amount in Asset1Out. Let this be Z Use equation 6 to compute the amount of asset2, given Z. Let the computed amount of asset2 be X If X <= amount in Asset2Out: The amount of asset1 to be withdrawn is the one specified in Asset1Out The amount of asset2 to be withdrawn is X The amount of LPTokens redeemed is Z If X> amount in Asset2Out: Use equation 5 to compute t, given the amount in Asset2Out. Let this be Q Use equation 6 to compute the amount of asset1, given Q. Let the computed amount of asset1 be W The amount of asset2 to be withdrawn is the one specified in Asset2Out The amount of asset1 to be withdrawn is W The amount of LPTokens redeemed is Q

Definition at line 1019 of file AMMWithdraw.cpp.

◆ singleWithdraw()

std::pair< TER, STAmount > xrpl::AMMWithdraw::singleWithdraw ( Sandbox & view,
SLE const & ammSle,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & lptAMMBalance,
STAmount const & amount,
std::uint16_t tfee )
private

Single asset withdrawal (Asset1Out) equivalent to the amount specified in Asset1Out.

Withdraw single asset equivalent to the amount specified in Asset1Out.

The trading fee is charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
lptAMMBalancecurrent AMM LPT balance
amountasset1 withdraw amount
tfeetrading fee in basis points
Returns

t = T * (c - sqrt(c**2 - 4*R))/2 where R = b/B, c = R*fee + 2 - fee Use equation 7 to compute the t, given the amount in Asset1Out.

Definition at line 1090 of file AMMWithdraw.cpp.

◆ singleWithdrawTokens()

std::pair< TER, STAmount > xrpl::AMMWithdraw::singleWithdrawTokens ( Sandbox & view,
SLE const & ammSle,
AccountID const & ammAccount,
STAmount const & amountBalance,
STAmount const & lptAMMBalance,
STAmount const & amount,
STAmount const & lpTokensWithdraw,
std::uint16_t tfee )
private

Single asset withdrawal (Asset1Out, LPTokens) proportional to the share specified by tokens.

withdrawal of single asset specified in Asset1Out proportional to the share represented by the amount of LPTokens.

The trading fee is charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
lptAMMBalancecurrent AMM LPT balance
amountasset1 withdraw amount
lpTokensWithdrawamount of tokens to withdraw
tfeetrading fee in basis points
Returns

Use equation 8 to compute the amount of asset1, given the redeemed t represented by LPTokens. Let this be Y. If (amount exists for Asset1Out & Y >= amount in Asset1Out) || (amount field does not exist for Asset1Out): The amount of asset out is Y The amount of LPTokens redeemed is LPTokens Equation 8 solves equation 7

See also
singleWithdraw for b.

Definition at line 1142 of file AMMWithdraw.cpp.

◆ singleWithdrawEPrice()

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

Withdraw single asset (Asset1Out, EPrice) with two constraints.

Withdraw single asset with two constraints.

The trading fee is charged.

Parameters
view
ammAccount
amountBalancecurrent AMM asset1 balance
lptAMMBalancecurrent AMM LPT balance
amountasset1 withdraw amount
ePricemaximum asset1 effective price
tfeetrading fee in basis points
Returns

a. amount of asset1 if specified (not 0) in Asset1Out specifies the minimum amount of asset1 that the trader is willing to withdraw. b. The effective price of asset traded out does not exceed the amount specified in 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) b = B * (t1**2 + t1*(f - 2))/(t1*f - 1) (8) where t1 = t/T Use equations 8 & III and amount in EPrice to compute the two variables: asset in as LPTokens. Let this be X asset out as that in Asset1Out. Let this be Y If (amount exists for Asset1Out & Y >= amount in Asset1Out) || (amount field does not exist for Asset1Out): The amount of assetOut is given by Y The amount of LPTokens is given by X

Definition at line 1196 of file AMMWithdraw.cpp.

◆ isWithdrawAll()

WithdrawAll xrpl::AMMWithdraw::isWithdrawAll ( STTx const & tx)
staticprivate

Check from the flags if it's withdraw all.

Definition at line 1259 of file AMMWithdraw.cpp.

◆ operator()()

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

Process the transaction.

Definition at line 1553 of file Transactor.cpp.

◆ view() [1/2]

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

Definition at line 184 of file Transactor.h.

◆ view() [2/2]

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

Definition at line 190 of file Transactor.h.

◆ checkInvariants()

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

Check all invariants for the current transaction.

Delegates to the free xrpl::checkInvariants runner. When scope is InvariantScope::Full, this transactor is passed so both layers share a single walk of the modified ledger entries. A failure in either layer fails the transaction the same way: tecINVARIANT_FAILED on the first pass, which the caller may respond to by rolling the transaction back to a fee-claim state and re-invoking this with InvariantScope::ProtocolOnly; a failure on that post-reset pass escalates to tefINVARIANT_FAILED.

Parameters
resultthe tentative TER from transaction processing.
feethe fee consumed by the transaction.
scopewhich invariant layers to check.
Returns
the final TER after all invariant checks.

Definition at line 1543 of file Transactor.cpp.

◆ checkSeqProxy()

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

Definition at line 699 of file Transactor.cpp.

◆ checkPriorTxAndLastLedger()

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

Definition at line 764 of file Transactor.cpp.

◆ checkFee()

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

Definition at line 517 of file Transactor.cpp.

◆ checkSign() [1/2]

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

Definition at line 1011 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,
bool permitUncreatedAccount = false )
staticprotectedinherited

Definition at line 918 of file Transactor.cpp.

◆ calculateBaseFee() [1/2]

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

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

◆ getFeePayer()

FeePayer xrpl::Transactor::getFeePayer ( ReadView const & view,
STTx const & tx )
staticinherited

Definition at line 1381 of file Transactor.cpp.

◆ invokePreflight() [1/3]

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

Definition at line 648 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 34 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 321 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 344 of file Transactor.h.

◆ checkSponsor()

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

Definition at line 412 of file Transactor.cpp.

◆ ticketDelete()

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

Definition at line 810 of file Transactor.cpp.

◆ apply()

TER xrpl::Transactor::apply ( )
protectedinherited

Definition at line 882 of file Transactor.cpp.

◆ preCompute()

void xrpl::Transactor::preCompute ( )
protectedvirtualinherited

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

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

◆ calculateOwnerReserveFee()

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

Definition at line 487 of file Transactor.cpp.

◆ preflightSigValidated()

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

Definition at line 376 of file Transactor.cpp.

◆ validDataLength()

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

Definition at line 362 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 677 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 686 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 696 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 705 of file Transactor.h.

◆ checkSingleSign()

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

Definition at line 1019 of file Transactor.cpp.

◆ checkMultiSign()

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

Definition at line 1051 of file Transactor.cpp.

◆ checkPermission()

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

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

◆ consumeSeqProxy()

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

Definition at line 792 of file Transactor.cpp.

◆ payFee()

TER xrpl::Transactor::payFee ( )
privateinherited

Definition at line 623 of file Transactor.cpp.

◆ processPersistentChanges()

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

Definition at line 1431 of file Transactor.cpp.

◆ trapTransaction()

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

Definition at line 1425 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 232 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 303 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 343 of file Transactor.cpp.

◆ visitEntry()

void xrpl::Transactor::visitEntry ( bool isDelete,
SLE::ConstRef before,
SLE::ConstRef after )
finalprivatevirtualinherited

Bridges the two-phase TxInvariantCheck interface to this transactor's visitInvariantEntry/finalizeInvariants hooks.

Declared private (rather than protected, like the hooks they forward to) so that neither this transactor nor any subclass can call them directly through a Transactor& — only through the TxInvariantCheck& that the free xrpl::checkInvariants runner holds, which is where the two-phase ordering is enforced.

Implements xrpl::TxInvariantCheck.

Definition at line 593 of file Transactor.h.

◆ finalize()

bool xrpl::Transactor::finalize ( STTx const & tx,
TER result,
XRPAmount fee,
ReadView const & view,
beast::Journal const & j )
nodiscardfinalprivatevirtualinherited

Called after all entries have been visited.

Parameters
txthe transaction being applied.
resultthe tentative TER result of the transaction.
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 hold; false to fail with tecINVARIANT_FAILED / tefINVARIANT_FAILED.

Implements xrpl::TxInvariantCheck.

Definition at line 599 of file Transactor.h.

Member Data Documentation

◆ kConsequencesFactory

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

Definition at line 68 of file tx/transactors/dex/AMMWithdraw.h.

◆ ctx_

ApplyContext& xrpl::Transactor::ctx_
protectedinherited

Definition at line 162 of file Transactor.h.

◆ sink_

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

Definition at line 163 of file Transactor.h.

◆ j_

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

Definition at line 164 of file Transactor.h.

◆ accountID_

AccountID const xrpl::Transactor::accountID_
protectedinherited

Definition at line 166 of file Transactor.h.

◆ preFeeBalance_

XRPAmount xrpl::Transactor::preFeeBalance_ {}
protectedinherited

Definition at line 167 of file Transactor.h.