SwapConstraint

Enum SwapConstraint 

Source
pub enum SwapConstraint {
    TradeLimitPrice {
        limit: Price,
        tolerance: f64,
        min_amount_in: Option<BigUint>,
        max_amount_in: Option<BigUint>,
    },
    PoolTargetPrice {
        target: Price,
        tolerance: f64,
        min_amount_in: Option<BigUint>,
        max_amount_in: Option<BigUint>,
    },
}
Expand description

Options on how to constrain the pool swap query

Variants§

§

TradeLimitPrice

This mode will calculate the maximum trade that this pool can execute while respecting a trade limit price.

Fields

§limit: Price

The minimum acceptable price for the resulting trade, as a Price struct. The resulting amount_out / amount_in must be >= trade_limit_price

§tolerance: f64

The tolerance as a fraction to be applied on top of (increasing) the trade limit price, raising the acceptance threshold. This is used to loosen the acceptance criteria for implementations of this method, but will never allow violating the trade limit price itself.

§min_amount_in: Option<BigUint>

The minimum amount of token_in that must be used for this trade.

§max_amount_in: Option<BigUint>

The maximum amount of token_in that can be used for this trade.

§

PoolTargetPrice

This mode will Calculate the amount of token_in required to move the pool’s marginal price down to a target price, and the amount of token_out received.

§Edge Cases and Limitations

Computing the exact amount to move a pool’s marginal price to a target has several challenges:

  • The definition of marginal price varies between protocols. It is usually not an attribute of the pool but a consequence of its liquidity distribution and current state.
  • For protocols with concentrated liquidity, the marginal price is discrete, meaning we can’t always find an exact trade amount to reach the target price.
  • Not all protocols support analytical solutions for this problem, requiring numerical methods.

Fields

§target: Price

The marginal price we want the pool to be after the trade, as a Price struct. The pool’s price will move down to this level as token_in is sold into it

§tolerance: f64

The tolerance as a fraction of the resulting pool marginal price. After trading, the pool’s price will decrease to the interval [target, target * (1 + tolerance)].

§min_amount_in: Option<BigUint>

The lower bound for searching algorithms.

§max_amount_in: Option<BigUint>

The upper bound for searching algorithms.

Trait Implementations§

Source§

impl Clone for SwapConstraint

Source§

fn clone(&self) -> SwapConstraint

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SwapConstraint

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for SwapConstraint

Source§

fn eq(&self, other: &SwapConstraint) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for SwapConstraint

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more