SwapUtils
Last updated
Was this helpful?
Last updated
Was this helpful?
A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.
Contracts relying on this library must initialize SwapUtils.Swap struct then use this library for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins. Admin functions should be protected within contracts using this library.
calculateWithdrawOneToken(struct SwapUtils.Swap self, uint256 tokenAmount, uint8 tokenIndex) → uint256
Calculate the dy, the amount of selected token that user receives and the fee of withdrawing in one token
tokenAmount
: the amount to withdraw in the pool's precision
tokenIndex
: which token will be withdrawn
self
: Swap struct to read from
the amount of token user will receive
getVirtualPrice(struct SwapUtils.Swap self) → uint256
Get the virtual price, to help calculate profit
self
: Swap struct to read from
the virtual price, scaled to precision of POOL_PRECISION_DECIMALS
calculateSwap(struct SwapUtils.Swap self, uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) → uint256 dy
Externally calculates a swap between two tokens.
self
: Swap struct to read from
tokenIndexFrom
: the token to sell
tokenIndexTo
: the token to buy
dx
: the number of tokens to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.
dy the number of tokens the user will get
calculateRemoveLiquidity(struct SwapUtils.Swap self, uint256 amount) → uint256[]
A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens
amount
: the amount of LP tokens that would to be burned on withdrawal
array of amounts of tokens user will receive
calculateTokenAmount(struct SwapUtils.Swap self, uint256[] amounts, bool deposit) → uint256
A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various "min" parameters on calls to fight front-running
This shouldn't be used outside frontends for user estimates.
self
: Swap struct to read from
amounts
: an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.
deposit
: whether this is a deposit or a withdrawal
if deposit was true, total amount of lp token that will be minted and if deposit was false, total amount of lp token that will be burned
getAdminBalance(struct SwapUtils.Swap self, uint256 index) → uint256
return accumulated amount of admin fees of the token with given index
self
: Swap struct to read from
index
: Index of the pooled token
admin balance in the token's precision
swap(struct SwapUtils.Swap self, uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy) → uint256
swap two tokens in the pool
self
: Swap struct to read from and write to
tokenIndexFrom
: the token the user wants to sell
tokenIndexTo
: the token the user wants to buy
dx
: the amount of tokens the user wants to sell
minDy
: the min amount the user would like to receive, or revert.
amount of token user received on swap
addLiquidity(struct SwapUtils.Swap self, uint256[] amounts, uint256 minToMint) → uint256
Add liquidity to the pool
self
: Swap struct to read from and write to
amounts
: the amounts of each token to add, in their native precision
minToMint
: the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.
amount of LP token user received
removeLiquidity(struct SwapUtils.Swap self, uint256 amount, uint256[] minAmounts) → uint256[]
Burn LP tokens to remove liquidity from the pool.
Liquidity can always be removed, even when the pool is paused.
self
: Swap struct to read from and write to
amount
: the amount of LP tokens to burn
minAmounts
: the minimum amounts of each token in the pool acceptable for this burn. Useful as a front-running mitigation
amounts of tokens the user received
removeLiquidityOneToken(struct SwapUtils.Swap self, uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount) → uint256
Remove liquidity from the pool all in one token.
self
: Swap struct to read from and write to
tokenAmount
: the amount of the lp tokens to burn
tokenIndex
: the index of the token you want to receive
minAmount
: the minimum amount to withdraw, otherwise revert
amount chosen token that user received
removeLiquidityImbalance(struct SwapUtils.Swap self, uint256[] amounts, uint256 maxBurnAmount) → uint256
Remove liquidity from the pool, weighted differently than the pool's current balances.
self
: Swap struct to read from and write to
amounts
: how much of each token to withdraw
maxBurnAmount
: the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation.
actual amount of LP tokens burned in the withdrawal
withdrawAdminFees(struct SwapUtils.Swap self, address to)
withdraw all admin fees to a given address
self
: Swap struct to withdraw fees from
to
: Address to send the fees to
setAdminFee(struct SwapUtils.Swap self, uint256 newAdminFee)
Sets the admin fee
adminFee cannot be higher than 100% of the swap fee
self
: Swap struct to update
newAdminFee
: new admin fee to be applied on future transactions
setSwapFee(struct SwapUtils.Swap self, uint256 newSwapFee)
update the swap fee
fee cannot be higher than 1% of each swap
self
: Swap struct to update
newSwapFee
: new swap fee to be applied on future transactions
TokenSwap(address buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId)
No description
AddLiquidity(address provider, uint256[] tokenAmounts, uint256[] fees, uint256 invariant, uint256 lpTokenSupply)
No description
RemoveLiquidity(address provider, uint256[] tokenAmounts, uint256 lpTokenSupply)
No description
RemoveLiquidityOne(address provider, uint256 lpTokenAmount, uint256 lpTokenSupply, uint256 boughtId, uint256 tokensBought)
No description
RemoveLiquidityImbalance(address provider, uint256[] tokenAmounts, uint256[] fees, uint256 invariant, uint256 lpTokenSupply)
No description
NewAdminFee(uint256 newAdminFee)
No description
NewSwapFee(uint256 newSwapFee)
No description