SwapUtilsGuarded
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.
Functions:
Events:
Function getA(struct SwapUtilsGuarded.Swap self) → uint256
getA(struct SwapUtilsGuarded.Swap self) → uint256
Return A, the amplification coefficient _ n _ (n - 1)
See the StableSwap paper for details
Parameters:
self
: Swap struct to read from
Return Values:
A parameter
Function getAPrecise(struct SwapUtilsGuarded.Swap self) → uint256
getAPrecise(struct SwapUtilsGuarded.Swap self) → uint256
Return A in its raw precision
See the StableSwap paper for details
Parameters:
self
: Swap struct to read from
Return Values:
A parameter in its raw precision form
Function getDepositTimestamp(struct SwapUtilsGuarded.Swap self, address user) → uint256
getDepositTimestamp(struct SwapUtilsGuarded.Swap self, address user) → uint256
Retrieves the timestamp of last deposit made by the given address
Parameters:
self
: Swap struct to read from
Return Values:
timestamp of last deposit
Function calculateWithdrawOneToken(struct SwapUtilsGuarded.Swap self, address account, uint256 tokenAmount, uint8 tokenIndex) → uint256, uint256
calculateWithdrawOneToken(struct SwapUtilsGuarded.Swap self, address account, uint256 tokenAmount, uint8 tokenIndex) → uint256, uint256
Calculate the dy, the amount of selected token that user receives and the fee of withdrawing in one token
Parameters:
account
: the address that is withdrawingtokenAmount
: the amount to withdraw in the pool's precisiontokenIndex
: which token will be withdrawnself
: Swap struct to read from
Return Values:
the amount of token user will receive and the associated swap fee
Function getVirtualPrice(struct SwapUtilsGuarded.Swap self) → uint256
getVirtualPrice(struct SwapUtilsGuarded.Swap self) → uint256
Get the virtual price, to help calculate profit
Parameters:
self
: Swap struct to read from
Return Values:
the virtual price, scaled to precision of POOL_PRECISION_DECIMALS
Function calculateSwap(struct SwapUtilsGuarded.Swap self, uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) → uint256 dy
calculateSwap(struct SwapUtilsGuarded.Swap self, uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) → uint256 dy
Externally calculates a swap between two tokens.
Parameters:
self
: Swap struct to read fromtokenIndexFrom
: the token to selltokenIndexTo
: the token to buydx
: the number of tokens to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.
Return Values:
dy the number of tokens the user will get
Function calculateRemoveLiquidity(struct SwapUtilsGuarded.Swap self, address account, uint256 amount) → uint256[]
calculateRemoveLiquidity(struct SwapUtilsGuarded.Swap self, address account, uint256 amount) → uint256[]
A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens
Parameters:
account
: the address that is removing liquidity. required for withdraw fee calculationamount
: the amount of LP tokens that would to be burned on withdrawal
Return Values:
array of amounts of tokens user will receive
Function calculateCurrentWithdrawFee(struct SwapUtilsGuarded.Swap self, address user) → uint256
calculateCurrentWithdrawFee(struct SwapUtilsGuarded.Swap self, address user) → uint256
Calculate the fee that is applied when the given user withdraws. Withdraw fee decays linearly over 4 weeks.
Parameters:
user
: address you want to calculate withdraw fee of
Return Values:
current withdraw fee of the user
Function calculateTokenAmount(struct SwapUtilsGuarded.Swap self, address account, uint256[] amounts, bool deposit) → uint256
calculateTokenAmount(struct SwapUtilsGuarded.Swap self, address account, 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.
Parameters:
self
: Swap struct to read fromaccount
: address of the account depositing or withdrawing tokensamounts
: 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
Return Values:
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
Function getAdminBalance(struct SwapUtilsGuarded.Swap self, uint256 index) → uint256
getAdminBalance(struct SwapUtilsGuarded.Swap self, uint256 index) → uint256
return accumulated amount of admin fees of the token with given index
Parameters:
self
: Swap struct to read fromindex
: Index of the pooled token
Return Values:
admin balance in the token's precision
Function swap(struct SwapUtilsGuarded.Swap self, uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy) → uint256
swap(struct SwapUtilsGuarded.Swap self, uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx, uint256 minDy) → uint256
swap two tokens in the pool
Parameters:
self
: Swap struct to read from and write totokenIndexFrom
: the token the user wants to selltokenIndexTo
: the token the user wants to buydx
: the amount of tokens the user wants to sellminDy
: the min amount the user would like to receive, or revert.
Return Values:
amount of token user received on swap
Function addLiquidity(struct SwapUtilsGuarded.Swap self, uint256[] amounts, uint256 minToMint, bytes32[] merkleProof) → uint256
addLiquidity(struct SwapUtilsGuarded.Swap self, uint256[] amounts, uint256 minToMint, bytes32[] merkleProof) → uint256
Add liquidity to the pool
Parameters:
self
: Swap struct to read from and write toamounts
: the amounts of each token to add, in their native precisionminToMint
: the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigationmerkleProof
: bytes32 array that will be used to prove the existence of the caller's address in the list of allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.
Return Values:
amount of LP token user received
Function updateUserWithdrawFee(struct SwapUtilsGuarded.Swap self, address user, uint256 toMint)
updateUserWithdrawFee(struct SwapUtilsGuarded.Swap self, address user, uint256 toMint)
Update the withdraw fee for user
. If the user is currently not providing liquidity in the pool, sets to default value. If not, recalculate the starting withdraw fee based on the last deposit's time & amount relative to the new deposit.
Parameters:
self
: Swap struct to read from and write touser
: address of the user depositing tokenstoMint
: amount of pool tokens to be minted
Function removeLiquidity(struct SwapUtilsGuarded.Swap self, uint256 amount, uint256[] minAmounts) → uint256[]
removeLiquidity(struct SwapUtilsGuarded.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.
Parameters:
self
: Swap struct to read from and write toamount
: the amount of LP tokens to burnminAmounts
: the minimum amounts of each token in the pool acceptable for this burn. Useful as a front-running mitigation
Return Values:
amounts of tokens the user received
Function removeLiquidityOneToken(struct SwapUtilsGuarded.Swap self, uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount) → uint256
removeLiquidityOneToken(struct SwapUtilsGuarded.Swap self, uint256 tokenAmount, uint8 tokenIndex, uint256 minAmount) → uint256
Remove liquidity from the pool all in one token.
Parameters:
self
: Swap struct to read from and write totokenAmount
: the amount of the lp tokens to burntokenIndex
: the index of the token you want to receiveminAmount
: the minimum amount to withdraw, otherwise revert
Return Values:
amount chosen token that user received
Function removeLiquidityImbalance(struct SwapUtilsGuarded.Swap self, uint256[] amounts, uint256 maxBurnAmount) → uint256
removeLiquidityImbalance(struct SwapUtilsGuarded.Swap self, uint256[] amounts, uint256 maxBurnAmount) → uint256
Remove liquidity from the pool, weighted differently than the pool's current balances.
Parameters:
self
: Swap struct to read from and write toamounts
: how much of each token to withdrawmaxBurnAmount
: the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation.
Return Values:
actual amount of LP tokens burned in the withdrawal
Function withdrawAdminFees(struct SwapUtilsGuarded.Swap self, address to)
withdrawAdminFees(struct SwapUtilsGuarded.Swap self, address to)
withdraw all admin fees to a given address
Parameters:
self
: Swap struct to withdraw fees fromto
: Address to send the fees to
Function setAdminFee(struct SwapUtilsGuarded.Swap self, uint256 newAdminFee)
setAdminFee(struct SwapUtilsGuarded.Swap self, uint256 newAdminFee)
Sets the admin fee
adminFee cannot be higher than 100% of the swap fee
Parameters:
self
: Swap struct to updatenewAdminFee
: new admin fee to be applied on future transactions
Function setSwapFee(struct SwapUtilsGuarded.Swap self, uint256 newSwapFee)
setSwapFee(struct SwapUtilsGuarded.Swap self, uint256 newSwapFee)
update the swap fee
fee cannot be higher than 1% of each swap
Parameters:
self
: Swap struct to updatenewSwapFee
: new swap fee to be applied on future transactions
Function setDefaultWithdrawFee(struct SwapUtilsGuarded.Swap self, uint256 newWithdrawFee)
setDefaultWithdrawFee(struct SwapUtilsGuarded.Swap self, uint256 newWithdrawFee)
update the default withdraw fee. This also affects deposits made in the past as well.
Parameters:
self
: Swap struct to updatenewWithdrawFee
: new withdraw fee to be applied
Function rampA(struct SwapUtilsGuarded.Swap self, uint256 futureA_, uint256 futureTime_)
rampA(struct SwapUtilsGuarded.Swap self, uint256 futureA_, uint256 futureTime_)
Start ramping up or down A parameter towards given futureA* and futureTime* Checks if the change is too rapid, and commits the new A value only when it falls under the limit range.
Parameters:
self
: Swap struct to updatefutureA_
: the new A to ramp towardsfutureTime_
: timestamp when the new A should be reached
Function stopRampA(struct SwapUtilsGuarded.Swap self)
stopRampA(struct SwapUtilsGuarded.Swap self)
Stops ramping A immediately. Once this function is called, rampA() cannot be called for another 24 hours
Parameters:
self
: Swap struct to update
Event TokenSwap(address buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId)
TokenSwap(address buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId)
No description
Event AddLiquidity(address provider, uint256[] tokenAmounts, uint256[] fees, uint256 invariant, uint256 lpTokenSupply)
AddLiquidity(address provider, uint256[] tokenAmounts, uint256[] fees, uint256 invariant, uint256 lpTokenSupply)
No description
Event RemoveLiquidity(address provider, uint256[] tokenAmounts, uint256 lpTokenSupply)
RemoveLiquidity(address provider, uint256[] tokenAmounts, uint256 lpTokenSupply)
No description
Event RemoveLiquidityOne(address provider, uint256 lpTokenAmount, uint256 lpTokenSupply, uint256 boughtId, uint256 tokensBought)
RemoveLiquidityOne(address provider, uint256 lpTokenAmount, uint256 lpTokenSupply, uint256 boughtId, uint256 tokensBought)
No description
Event RemoveLiquidityImbalance(address provider, uint256[] tokenAmounts, uint256[] fees, uint256 invariant, uint256 lpTokenSupply)
RemoveLiquidityImbalance(address provider, uint256[] tokenAmounts, uint256[] fees, uint256 invariant, uint256 lpTokenSupply)
No description
Event NewAdminFee(uint256 newAdminFee)
NewAdminFee(uint256 newAdminFee)
No description
Event NewSwapFee(uint256 newSwapFee)
NewSwapFee(uint256 newSwapFee)
No description
Event NewWithdrawFee(uint256 newWithdrawFee)
NewWithdrawFee(uint256 newWithdrawFee)
No description
Event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime)
RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime)
No description
Event StopRampA(uint256 currentA, uint256 time)
StopRampA(uint256 currentA, uint256 time)
No description
Last updated