Skip to content

FluidDexT1 ​

Git Source

Inherits:CoreHelpers

Implements core logics for Fluid Dex protocol. Note Token transfers happen directly from user to Liquidity contract and vice-versa.

Functions ​

constructor ​

solidity
constructor(ConstantViews memory constantViews_) CoreHelpers(constantViews_);

_swapIn ​

This function allows users to swap a specific amount of input tokens for output tokens

solidity
function _swapIn(bool swap0to1_, uint256 amountIn_, SwapInExtras memory extras_)
    internal
    returns (uint256 amountOut_);

Parameters

NameTypeDescription
swap0to1_boolDirection of swap. If true, swaps token0 for token1; if false, swaps token1 for token0
amountIn_uint256The exact amount of input tokens to swap
extras_SwapInExtrasAdditional parameters for the swap: - to: Recipient of swapped tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with amountOut_ - amountOutMin: The minimum amount of output tokens the user expects to receive - isCallback: If true, indicates that the input tokens should be transferred via a callback

Returns

NameTypeDescription
amountOut_uint256The amount of output tokens received from the swap

swapIn ​

Swap tokens with perfect amount in

solidity
function swapIn(bool swap0to1_, uint256 amountIn_, uint256 amountOutMin_, address to_)
    public
    payable
    returns (uint256 amountOut_);

Parameters

NameTypeDescription
swap0to1_boolDirection of swap. If true, swaps token0 for token1; if false, swaps token1 for token0
amountIn_uint256The exact amount of tokens to swap in
amountOutMin_uint256The minimum amount of tokens to receive after swap
to_addressRecipient of swapped tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with amountOut_

Returns

NameTypeDescription
amountOut_uint256The amount of output tokens received from the swap

swapInWithCallback ​

Swap tokens with perfect amount in and callback functionality

solidity
function swapInWithCallback(bool swap0to1_, uint256 amountIn_, uint256 amountOutMin_, address to_)
    public
    payable
    returns (uint256 amountOut_);

Parameters

NameTypeDescription
swap0to1_boolDirection of swap. If true, swaps token0 for token1; if false, swaps token1 for token0
amountIn_uint256The exact amount of tokens to swap in
amountOutMin_uint256The minimum amount of tokens to receive after swap
to_addressRecipient of swapped tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with amountOut_

Returns

NameTypeDescription
amountOut_uint256The amount of output tokens received from the swap

swapOut ​

Swap tokens with perfect amount out

solidity
function swapOut(bool swap0to1_, uint256 amountOut_, uint256 amountInMax_, address to_)
    public
    payable
    returns (uint256 amountIn_);

Parameters

NameTypeDescription
swap0to1_boolDirection of swap. If true, swaps token0 for token1; if false, swaps token1 for token0
amountOut_uint256The exact amount of tokens to receive after swap
amountInMax_uint256Maximum amount of tokens to swap in
to_addressRecipient of swapped tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with amountIn_

Returns

NameTypeDescription
amountIn_uint256The amount of input tokens used for the swap

swapOutWithCallback ​

Swap tokens with perfect amount out and callback functionality

solidity
function swapOutWithCallback(bool swap0to1_, uint256 amountOut_, uint256 amountInMax_, address to_)
    public
    payable
    returns (uint256 amountIn_);

Parameters

NameTypeDescription
swap0to1_boolDirection of swap. If true, swaps token0 for token1; if false, swaps token1 for token0
amountOut_uint256The exact amount of tokens to receive after swap
amountInMax_uint256Maximum amount of tokens to swap in
to_addressRecipient of swapped tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with amountIn_

Returns

NameTypeDescription
amountIn_uint256The amount of input tokens used for the swap

depositPerfect ​

Deposit tokens in equal proportion to the current pool ratio

solidity
function depositPerfect(uint256 shares_, uint256 maxToken0Deposit_, uint256 maxToken1Deposit_, bool estimate_)
    public
    payable
    returns (uint256 token0Amt_, uint256 token1Amt_);

Parameters

NameTypeDescription
shares_uint256The number of shares to mint
maxToken0Deposit_uint256Maximum amount of token0 to deposit
maxToken1Deposit_uint256Maximum amount of token1 to deposit
estimate_boolIf true, function will revert with estimated deposit amounts without executing the deposit

Returns

NameTypeDescription
token0Amt_uint256Amount of token0 deposited
token1Amt_uint256Amount of token1 deposited

withdrawPerfect ​

This function allows users to withdraw a perfect amount of collateral liquidity

solidity
function withdrawPerfect(uint256 shares_, uint256 minToken0Withdraw_, uint256 minToken1Withdraw_, address to_)
    public
    returns (uint256 token0Amt_, uint256 token1Amt_);

Parameters

NameTypeDescription
shares_uint256The number of shares to withdraw
minToken0Withdraw_uint256The minimum amount of token0 the user is willing to accept
minToken1Withdraw_uint256The minimum amount of token1 the user is willing to accept
to_addressRecipient of withdrawn tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with token0Amt_ & token1Amt_

Returns

NameTypeDescription
token0Amt_uint256The amount of token0 withdrawn
token1Amt_uint256The amount of token1 withdrawn

borrowPerfect ​

This function allows users to borrow tokens in equal proportion to the current debt pool ratio

solidity
function borrowPerfect(uint256 shares_, uint256 minToken0Borrow_, uint256 minToken1Borrow_, address to_)
    public
    returns (uint256 token0Amt_, uint256 token1Amt_);

Parameters

NameTypeDescription
shares_uint256The number of shares to borrow
minToken0Borrow_uint256Minimum amount of token0 to borrow
minToken1Borrow_uint256Minimum amount of token1 to borrow
to_addressRecipient of borrowed tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with token0Amt_ & token1Amt_

Returns

NameTypeDescription
token0Amt_uint256Amount of token0 borrowed
token1Amt_uint256Amount of token1 borrowed

paybackPerfect ​

This function allows users to pay back borrowed tokens in equal proportion to the current debt pool ratio

solidity
function paybackPerfect(uint256 shares_, uint256 maxToken0Payback_, uint256 maxToken1Payback_, bool estimate_)
    public
    payable
    returns (uint256 token0Amt_, uint256 token1Amt_);

Parameters

NameTypeDescription
shares_uint256The number of shares to pay back
maxToken0Payback_uint256Maximum amount of token0 to pay back
maxToken1Payback_uint256Maximum amount of token1 to pay back
estimate_boolIf true, function will revert with estimated payback amounts without executing the payback

Returns

NameTypeDescription
token0Amt_uint256Amount of token0 paid back
token1Amt_uint256Amount of token1 paid back

deposit ​

This function allows users to deposit tokens in any proportion into the col pool

solidity
function deposit(uint256 token0Amt_, uint256 token1Amt_, uint256 minSharesAmt_, bool estimate_)
    public
    payable
    returns (uint256 shares_);

Parameters

NameTypeDescription
token0Amt_uint256The amount of token0 to deposit
token1Amt_uint256The amount of token1 to deposit
minSharesAmt_uint256The minimum amount of shares the user expects to receive
estimate_boolIf true, function will revert with estimated shares without executing the deposit

Returns

NameTypeDescription
shares_uint256The amount of shares minted for the deposit

withdraw ​

This function allows users to withdraw tokens in any proportion from the col pool

solidity
function withdraw(uint256 token0Amt_, uint256 token1Amt_, uint256 maxSharesAmt_, address to_)
    public
    returns (uint256 shares_);

Parameters

NameTypeDescription
token0Amt_uint256The amount of token0 to withdraw
token1Amt_uint256The amount of token1 to withdraw
maxSharesAmt_uint256The maximum number of shares the user is willing to burn
to_addressRecipient of withdrawn tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with shares_

Returns

NameTypeDescription
shares_uint256The number of shares burned for the withdrawal

borrow ​

This function allows users to borrow tokens in any proportion from the debt pool

solidity
function borrow(uint256 token0Amt_, uint256 token1Amt_, uint256 maxSharesAmt_, address to_)
    public
    returns (uint256 shares_);

Parameters

NameTypeDescription
token0Amt_uint256The amount of token0 to borrow
token1Amt_uint256The amount of token1 to borrow
maxSharesAmt_uint256The maximum amount of shares the user is willing to receive
to_addressRecipient of borrowed tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with shares_

Returns

NameTypeDescription
shares_uint256The amount of borrow shares minted to represent the borrowed amount

payback ​

This function allows users to payback tokens in any proportion to the debt pool

solidity
function payback(uint256 token0Amt_, uint256 token1Amt_, uint256 minSharesAmt_, bool estimate_)
    public
    payable
    returns (uint256 shares_);

Parameters

NameTypeDescription
token0Amt_uint256The amount of token0 to payback
token1Amt_uint256The amount of token1 to payback
minSharesAmt_uint256The minimum amount of shares the user expects to burn
estimate_boolIf true, function will revert with estimated shares without executing the payback

Returns

NameTypeDescription
shares_uint256The amount of borrow shares burned for the payback

withdrawPerfectInOneToken ​

This function allows users to withdraw their collateral with perfect shares in one token

solidity
function withdrawPerfectInOneToken(uint256 shares_, uint256 minToken0_, uint256 minToken1_, address to_)
    public
    returns (uint256 withdrawAmt_);

Parameters

NameTypeDescription
shares_uint256The number of shares to burn for withdrawal
minToken0_uint256The minimum amount of token0 the user expects to receive (set to 0 if withdrawing in token1)
minToken1_uint256The minimum amount of token1 the user expects to receive (set to 0 if withdrawing in token0)
to_addressRecipient of withdrawn tokens. If to_ == address(0) then out tokens will be sent to msg.sender. If to_ == ADDRESS_DEAD then function will revert with withdrawAmt_

Returns

NameTypeDescription
withdrawAmt_uint256The amount of tokens withdrawn in the chosen token

paybackPerfectInOneToken ​

This function allows users to payback their debt with perfect shares in one token

solidity
function paybackPerfectInOneToken(uint256 shares_, uint256 maxToken0_, uint256 maxToken1_, bool estimate_)
    public
    payable
    returns (uint256 paybackAmt_);

Parameters

NameTypeDescription
shares_uint256The number of shares to burn for payback
maxToken0_uint256The maximum amount of token0 the user is willing to pay (set to 0 if paying back in token1)
maxToken1_uint256The maximum amount of token1 the user is willing to pay (set to 0 if paying back in token0)
estimate_boolIf true, the function will revert with the estimated payback amount without executing the payback

Returns

NameTypeDescription
paybackAmt_uint256The amount of tokens paid back in the chosen token

liquidityCallback ​

liquidity callback for cheaper token transfers in case of deposit or payback. only callable by Liquidity during an operation.

solidity
function liquidityCallback(address token_, uint256 amount_, bytes calldata data_) external;

oraclePrice ​

the oracle assumes last set price of pool till the next swap happens. There's a possibility that during that time some interest is generated hence the last stored price is not the 100% correct price for the whole duration but the difference due to interest will be super low so this difference is ignored For example 2 swaps happened 10min (600 seconds) apart and 1 token has 10% higher interest than other. then that token will accrue about 10% * 600 / secondsInAYear = ~0.0002%

solidity
function oraclePrice(uint256[] memory secondsAgos_)
    external
    view
    returns (Oracle[] memory twaps_, uint256 currentPrice_);

Parameters

NameTypeDescription
secondsAgos_uint256[]array of seconds ago for which TWAP is needed. If user sends [10, 30, 60] then twaps_ will return [10-0, 30-10, 60-30]

Returns

NameTypeDescription
twaps_Oracle[]twap price, lowest price (aka minima) & highest price (aka maxima) between secondsAgo checkpoints
currentPrice_uint256price of pool after the most recent swap

getPricesAndExchangePrices ​

solidity
function getPricesAndExchangePrices() public;

_fallback ​

This function is called when a transaction is sent to the contract without matching any other function

It checks if the caller is authorized, enables re-entrancy protection, delegates the call to the admin implementation, and then disables re-entrancy protection

Only authorized callers (global or dex auth) can trigger this function

This function uses assembly to perform a delegatecall to the admin implementation to update configs related to DEX

Internal fallback function to handle calls to non-existent functions

solidity
function _fallback() private;

fallback ​

solidity
fallback() external payable;

receive ​

solidity
receive() external payable;

constantsView ​

returns all Vault constants

solidity
function constantsView() external view returns (ConstantViews memory constantsView_);

constantsView2 ​

returns all Vault constants

solidity
function constantsView2() external view returns (ConstantViews2 memory constantsView2_);

getCollateralReserves ​

Calculates the real and imaginary reserves for collateral tokens

This function retrieves the supply of both tokens from the liquidity layer, adjusts them based on exchange prices, and calculates imaginary reserves based on the geometric mean and price range

solidity
function getCollateralReserves(
    uint256 geometricMean_,
    uint256 upperRange_,
    uint256 lowerRange_,
    uint256 token0SupplyExchangePrice_,
    uint256 token1SupplyExchangePrice_
) public view returns (CollateralReserves memory c_);

Parameters

NameTypeDescription
geometricMean_uint256The geometric mean of the token prices
upperRange_uint256The upper price range
lowerRange_uint256The lower price range
token0SupplyExchangePrice_uint256The exchange price for token0 from liquidity layer
token1SupplyExchangePrice_uint256The exchange price for token1 from liquidity layer

Returns

NameTypeDescription
c_CollateralReservesA struct containing the calculated real and imaginary reserves for both tokens: - token0RealReserves: The real reserves of token0 - token1RealReserves: The real reserves of token1 - token0ImaginaryReserves: The imaginary reserves of token0 - token1ImaginaryReserves: The imaginary reserves of token1

getDebtReserves ​

Calculates the debt reserves for both tokens

solidity
function getDebtReserves(
    uint256 geometricMean_,
    uint256 upperRange_,
    uint256 lowerRange_,
    uint256 token0BorrowExchangePrice_,
    uint256 token1BorrowExchangePrice_
) public view returns (DebtReserves memory d_);

Parameters

NameTypeDescription
geometricMean_uint256The geometric mean of the upper and lower price ranges
upperRange_uint256The upper price range
lowerRange_uint256The lower price range
token0BorrowExchangePrice_uint256The exchange price of token0 from liquidity layer
token1BorrowExchangePrice_uint256The exchange price of token1 from liquidity layer

Returns

NameTypeDescription
d_DebtReservesThe calculated debt reserves for both tokens, containing: - token0Debt: The debt amount of token0 - token1Debt: The debt amount of token1 - token0RealReserves: The real reserves of token0 derived from token1 debt - token1RealReserves: The real reserves of token1 derived from token0 debt - token0ImaginaryReserves: The imaginary debt reserves of token0 - token1ImaginaryReserves: The imaginary debt reserves of token1

Structs ​

SwapInExtras ​

solidity
struct SwapInExtras {
    address to;
    uint256 amountOutMin;
    bool isCallback;
}