LpETH docs
This page provides developer documentation for the most important endpoints of the LpETH
contract. The LpETH
contract facilitates liquidity pooling of ETH, allowing users to deposit ETH and receive LP tokens, withdraw ETH, swap assets, and participate in the protocol's liquidity mechanisms.
Table of Contents
Swap
Quote
Deposit
Withdraw
Claim Withdraw Request
Redeem Unlock
Buy Unlock
Claim Relayer Rewards
Events
Disclaimer
Swap
swap(address asset, uint256 amount, uint256 minOut)
swap(address asset, uint256 amount, uint256 minOut)
Swaps a supported asset for ETH.
Parameters:
asset
(address
): The address of the asset to swap.amount
(uint256
): The amount of the asset to swap.minOut
(uint256
): The minimum amount of ETH the user expects to receive.
Returns:
out
(uint256
): The amount of ETH received.fee
(uint256
): The fee charged for the swap.
Description:
Transfers the specified asset from the user to the contract.
Approves the
UnsETH
contract to handle the asset.Requests withdrawal from
UnsETH
, receiving a token ID and expected amount.Calculates the ETH output and fee.
Reverts if the ETH output is less than
minOut
to prevent slippage.Transfers the ETH to the user.
Events:
Swap(address indexed caller, address indexed asset, uint256 amountIn, uint256 fee, uint256 unlockId)
Errors:
ErrorInvalidAsset(address asset)
: Thrown if the asset is not supported.ErrorSlippage(uint256 out, uint256 minOut)
: Thrown if the ETH output is less thanminOut
.
Quote
quote(address asset, uint256 amount)
quote(address asset, uint256 amount)
Provides an estimate of the ETH amount and fee for swapping a given asset.
Parameters:
asset
(address
): The address of the asset to swap.amount
(uint256
): The amount of the asset to swap.
Returns:
out
(uint256
): The estimated amount of ETH the user will receive.fee
(uint256
): The estimated fee for the swap.
Description:
Calculates the expected ETH output and fee based on the current pool state.
Useful for users to understand the swap outcome before executing.
Errors:
ErrorInvalidAsset(address asset)
: Thrown if the asset is not supported.
Deposit
deposit(uint256 minLpShares)
deposit(uint256 minLpShares)
Allows users to deposit ETH into the pool and receive LP tokens in return.
Parameters:
minLpShares
(uint256
): The minimum amount of LP tokens the user expects to receive to prevent slippage.
Returns:
lpShares
(uint256
): The number of LP tokens minted to the user.
Description:
Users send ETH along with this function call.
Calculates the number of LP tokens to mint based on the pool's current liabilities and total supply.
Mints LP tokens to the user.
Events:
Deposit(address indexed from, uint256 amount, uint256 lpSharesMinted)
Errors:
ErrorSlippage(uint256 out, uint256 minOut)
: Thrown if the LP shares to mint are less thanminLpShares
.ErrorDepositSharesZero()
: Thrown if the calculated LP shares are zero.
Withdraw
withdraw(uint256 amount, uint256 maxLpSharesBurnt)
withdraw(uint256 amount, uint256 maxLpSharesBurnt)
Allows users to withdraw ETH by burning their LP tokens.
Parameters:
amount
(uint256
): The amount of ETH the user wants to withdraw.maxLpSharesBurnt
(uint256
): The maximum number of LP tokens the user is willing to burn to prevent slippage.
Returns:
requestId
(uint256
): The ID of the withdrawal request if applicable.
Description:
Calculates the number of LP tokens to burn based on the withdrawal amount.
Reverts if the LP shares to burn exceed
maxLpSharesBurnt
.If there's insufficient liquidity, creates a withdrawal request for the remaining amount.
Burns the user's LP tokens.
Transfers available ETH to the user.
Events:
Withdraw(address indexed to, uint256 amount, uint256 lpSharesBurnt, uint256 requestId)
Errors:
DepositedInCurrentTx()
: Thrown if a withdrawal is attempted in the same transaction as a deposit.ErrorSlippage(uint256 out, uint256 maxLpSharesBurnt)
: Thrown if the LP shares to burn exceedmaxLpSharesBurnt
.ErrorDepositSharesZero()
: Thrown if the calculated LP shares are zero.
Claim Withdraw Request
claimWithdrawRequest(uint256 id)
claimWithdrawRequest(uint256 id)
Allows users to claim their finalized withdrawal requests.
Parameters:
id
(uint256
): The ID of the withdrawal request.
Returns:
amount
(uint256
): The amount of ETH claimed.
Description:
Finalizes the withdrawal request and transfers the ETH to the requester.
Updates the pool's liabilities.
Events:
ClaimWithdrawRequest(uint256 indexed requestId, address indexed to, uint256 amount)
Redeem Unlock
redeemUnlock()
redeemUnlock()
Allows relayers to redeem finalized unlocks and claim rewards.
Description:
Retrieves the oldest unlock from the queue.
Checks if the unlock is finalized.
Claims the withdrawal from the
UnsETH
contract.
Events:
UnlockRedeemed(address indexed relayer, uint256 tokenId, uint256 amount, uint256 reward, uint256 lpFees)
Errors:
ErrorNotFinalized(uint256 tokenId)
: Thrown if the unlock is not finalized.
Buy Unlock
buyUnlock(uint256 expectedTokenId)
buyUnlock(uint256 expectedTokenId)
Allows users to purchase unfinalized unlocks at a discounted rate.
Parameters:
expectedTokenId
(uint256
): The expected token ID of the unlock to purchase.
Returns:
tokenId
(uint256
): The actual token ID of the unlock purchased.
Description:
Retrieves the newest unlock from the queue.
Checks if the unlock is not finalized and not expired.
Verifies that the token ID matches
expectedTokenId
.Calculates the reward (discount) for purchasing the unlock.
Transfers the unlock to the buyer.
Events:
UnlockBought(address indexed caller, uint256 tokenId, uint256 amount, uint256 reward, uint256 lpFees)
Errors:
UnexpectedTokenId()
: Thrown if the token ID does not matchexpectedTokenId
.ErrorIsFinalized(uint256 tokenId)
: Thrown if the unlock is already finalized.ErrorRecoveryMode()
: Thrown if the pool is in recovery mode.ErrorInsufficientAmount()
: Thrown if the sent ETH is insufficient.
Claim Relayer Rewards
claimRelayerRewards()
claimRelayerRewards()
Allows relayers to claim their accumulated rewards.
Returns:
relayerReward
(uint256
): The amount of rewards claimed.
Description:
Transfers the accumulated rewards to the relayer.
Resets the relayer's reward balance.
Emits a
RelayerRewardsClaimed
event.
Events:
RelayerRewardsClaimed(address indexed relayer, uint256 rewards)
Events
Deposit(address indexed from, uint256 amount, uint256 lpSharesMinted)
Withdraw(address indexed to, uint256 amount, uint256 lpSharesBurnt, uint256 requestId)
ClaimWithdrawRequest(uint256 indexed requestId, address indexed to, uint256 amount)
Swap(address indexed caller, address indexed asset, uint256 amountIn, uint256 fee, uint256 unlockId)
UnlockRedeemed(address indexed relayer, uint256 tokenId, uint256 amount, uint256 reward, uint256 lpFees)
UnlockBought(address indexed caller, uint256 tokenId, uint256 amount, uint256 reward, uint256 lpFees)
RelayerRewardsClaimed(address indexed relayer, uint256 rewards)
Notes
Access Control: Some functions are restricted using modifiers like
onlyOwner
andnonreentrant
.Upgradeable Contract: The contract uses OpenZeppelin's upgradeable pattern via
UUPSUpgradeable
.External Contracts: Interacts with external contracts like
UnsETH
,Registry
, andLPToken
.Mathematical Libraries: Utilizes libraries like
FixedPointMathLib
andUD60x18
for precise calculations.ETH Handling: Functions are marked
payable
where necessary, and ETH transfers are handled carefully to prevent issues.
Disclaimer: This documentation provides a high-level overview of the most important endpoints of the LpETH
contract. Developers should refer to the actual contract code and conduct thorough testing before interacting with the contract in a production environment.
Last updated