This contract interacts with the NFTX AMM for adding & removing liquidity, and facilitating buys & sells. It also handles minting and burning vTokens when necessary.
Contract address of the AMM's NonfungiblePositionManager.
router
Contract address of the AMM's SwapRouter.
quoter
Contract address of the AMM's QuoterV2.
nftxVaultFactory
Contract address of the NFTX vault factory.
inventoryStaking
Address of inventory staking contract.
Variables
lpTimelock
The timelock duration to apply to new positions.
earlyWithdrawPenaltyInWei
Early withdrawal fee. 1e16 = 1%.
vTokenDustThreshold
Threshold amount for vToken dust to be returned.
Events
AddLiquidity
Emitted by addLiquidity() and addLiquidityWithPermit2().
Parameters
Type
Description
positionId
uint256
ID of liquidity position.
vaultId
uint256
ID of vault.
vTokensAmount
uint256
Amount of vToken deposited.
nftIds
uint256[]
IDs of NFTs deposited.
pool
address
Address of pool contract.
RemoveLiquidity
Emitted by removeLiquidity().
Parameters
Type
Description
positionId
uint256
ID number of liquidity position.
vaultId
uint256
ID number of vault.
vTokensAmount
uint256
Amount of vToken received.
nftIds
uint256[]
IDs of NFTs received.
pool
address
Address of pool contract.
IncreaseLiquidity
Emitted by increaseLiquidity() and increaseLiquidityWithPermit2().
Parameters
Type
Description
positionId
uint256
ID of liquidity position.
vaultId
uint256
ID of vault.
vTokensAmount
uint256
Amount of vToken deposited.
nftIds
uint256[]
IDs of NFTs deposited.
SellNFTs
Emitted by sellNFTs().
Parameters
Type
Description
nftCount
uint256
Number of NFTs sold.
ethReceived
uint256
Amount of ETH received.
BuyNFTs
Emitted by buyNFTs().
Parameters
Type
Description
nftCount
uint256
Number of NFTs bought.
ethSpent
uint256
Amount of ETH spent.
Write Functions
addLiquidity
Adds liquidity to an AMM pool (specified by a vToken address and a trading fee). Returns the token ID of the newly minted liquidity NFT. There can be at most one pool for each vToken/WETH pair and fee. If a pool with the specified fee and vToken does not already exist then one is created.
Parameters
Type
Description
params
AddLiquidityParams
See table below.
msg.value
uint256
Amount of ETH to send.
AddLiquidityParams
Type
Description
vaultId
uint256
ID number of vault.
vTokensAmount
uint256
Amount of vToken to add as liquidity.
nftIds
uint256[]
NFT IDs to have converted to vToken, then used for liquidity.
nftAmounts
uint256[]
Amounts of NFTs.
tickLower
int24
Lower end of the price range for the liquidity. Minimum value is -887272.
tickUpper
int24
Upper end of the price range for the liquidity. Maximum value is 887272.
fee
uint24
The pool's trading fee, denominated in hundredths of a bip.
sqrtPriceX96
uint160
Fixed point Q64.96 number equalling the sqrt of the desired asset ratio (token1/token0). Only used if pool with fee does not already exist, in which case it determines the starting price.
vTokenMin
uint256
Minimum required vToken amount added.
wethMin
uint256
Minimum required WETH amount added.
deadline
uint256
Unix timestamp after which the transaction will revert.
forceTimelock
bool
Whether a timelock is forced, only applicable for vToken deposits. Forcing a timelock allows for off-ramping to NFTs when finished LPing, if desired.
NFT IDs to have converted to vToken, then used for liquidity.
nftAmounts
uint256[]
Amount of NFTs (for ERC1155).
vTokenMin
uint256
Minimum required vToken amount added.
wethMin
uint256
Minimum required WETH amount added.
deadline
uint256
Unix timestamp after which the transaction will revert.
forceTimelock
bool
Whether to force a timelock.
increaseLiquidityWithPermit2
Increase the size of a liquidity position, using permit2 for vTokens instead of regular approvals.
Parameters
Type
Description
params
IncreaseLiquidityParams
See table above.
encodedPermit2
bytes
Encoded Permit2 data:
msg.value
uint256
Amount of ETH to send.
removeLiquidity
Removes liquidity from an AMM pool and claims any available fees.
Parameters
Type
Description
params
RemoveLiquidityParams
See table below.
msg.value
uint256
Amount of ETH to send.
RemoveLiquidityParams
Type
Description
positionId
uint256
ID number of the liquidity position.
vaultId
uint256
Vault ID of associated vToken.
nftIds
uint256[]
The requested NFT IDs.
liquidity
uint128
The amount of liquidity to remove.
amount0Min
uint256
The minimum amount of token0 that must result from removing liquidity.
amount1Min
uint256
The minimum amount of token1 that must result from removing liquidity for the transaction to not revert.
deadline
uint256
Unix timestamp after which the transaction will revert.
sellNFTs
Takes NFTs from caller and returns ETH. First, the NFTs are converted to vToken, and then the vToken is swapped for WETH through a single pool determined by the fee param.
Parameters
Type
Description
params
SellNFTsParams
See table below.
msg.value
uint256
Amount of ETH to send.
SellNFTsParams
Type
Description
vaultId
uint256
Vault ID of the associated vToken.
nftIds
uint256[]
The IDs of the NFTs to sell.
nftAmounts
uint256
Amounts of NFTs.
deadline
uint256
Unix timestamp after which the transaction will revert.
fee
uint24
The fee of the AMM pool which the trade will route through.
amountOutMinimum
uint256
The minimum amount of ETH required in return.
sqrtPriceLimitX96
uint160
The price limit that the swap can push the pool to. Can be left as 0, in which case it is ignored.
Return values
Type
Description
wethReceived
uint256
The amount of WETH received.
buyNFTs
Takes ETH from caller in return for NFTs. First, the ETH is swapped for vToken, and then the vToken is used to redeem the NFTs. The swap is routed through a single pool, determined by the fee param.
Parameters
Type
Description
params
BuyNFTsParams
See table below.
msg.value
uint256
Amount of ETH to send.
BuyNFTsParams
Type
Description
vaultId
uint256
ID of vault that holds the requested NFTs.
nftIds
uint256[]
The IDs of the NFTs to be purchased.
vTokenPremiumLimit
uint256
Max total premium fee (in vToken) to be paid.
deadline
uint256
Unix timestamp after which the transaction will revert.
fee
uint24
Fee of the AMM pool which the trade will route through.
sqrtPriceLimitX96
uint160
The max spot price which cannot be exceeded. Can be left as 0, in which case it is ignored.
Owner Functions
rescueTokens
Sends balance of an ERC20 token to caller. Also works for ETH.
Parameters
Type
Description
token
IERC20
Address of the token contract being requested. Set to 0 to retrieve ETH.
setLpTimelock
Sets the LP timelock duration.
Parameters
Type
Description
lpTimelock_
uint256
New LP timelock duration. In seconds.
setVTokenDustThreshold
Sets the vToken dust threshold (minimum amount required to be returned to sender).
Parameters
Type
Description
vTokenDustThreshold_
uint256
New vToken dust threshold.
setEarlyWithdrawPenalty
Sets the early withdrawal penalty. 1e16 = 1%.
Parameters
Type
Description
earlyWithdrawPenaltyInWei_
uint256
New early withdrawal penalty.
Read Functions
quoteBuyNFTs
Computes the cost in ETH to purchase one or more NFTs.
Parameters
Type
Description
vtoken
address
Address of vToken/vault which holds the NFTs.
nftsCount
uint256[]
Total number of NFTs.
fee
uint24
The fee of the AMM pool used to facilitate the swap.
sqrtPriceLimitX96
uint160
The max spot price that can't be exceeded. Can be left as 0, in which case it is ignored.
Return values
Type
Description
ethRequired
uint256
The quoted ETH price to make the purchase.
getPoolExists
Checks for the existence of a pool.
Parameters
Type
Description
vaultId
uint256
The vault ID of the vToken.
fee
uint24
The pool's trading fee, denominated in hundredths of a bip.
Return values
Type
Description
pool
address
Address of the pool contract. Returns 0 if the pool does not exist.
exists
bool
True if the pool already exists.
getPool
Retrieves the address of the pool (if it exists) for a vToken and fee setting.
Parameters
Type
Description
vToken_
address
Address of vToken from the pool.
fee
uint24
The pool's trading fee, denominated in hundredths of a bip.
Return values
Type
Description
pool
address
Address of the pool contract. Returns 0 if the pool does not exist.
computePool
Computes the deterministically generated pool address.
Parameters
Type
Description
vToken_
address
Address of vToken from the pool.
fee
uint24
The pool's trading fee, denominated in hundredths of a bip.
Return values
Type
Description
unnamed
address
The deterministically generated address of the pool, given the vToken and fee.
isVToken0
Checks if a vToken is token0 when paired with WETH.
Parameters
Type
Description
vtoken
address
Address of vToken which forms the vToken/ETH pair of a pool.
Return values
Type
Description
unnamed
bool
True if vToken address is "token0" of a vToken/WETH pair.