NFTXVaultUpgradeableV3

NFTXVaultUpgradeableV3.sol

The NFTX vault implementation used by the vault beacon proxy (and therefore all vaults).

Table of Contents

Constants
Variables
Events
Public Write Functions
Privileged Write Functions
Owner Write Functions
Read Functions

Constants

BASE

uint256 constant BASE = 10 ** 18

10^18.

WETH

function WETH() external view returns (address)

WETH contract address.

CRYPTO_PUNKS

address constant CRYPTO_PUNKS = 0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB

CryptoPunks contract address.

CRYPTO_KITTIES

address constant CRYPTO_KITTIES = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d

CryptoKitties contract address.

assetAddress

function assetAddress() external view returns (address)

Contract address of NFT collection that can enter the vault.

vaultFactory

function vaultFactory() external view returns (address)

Address of NFTX Vault Factory.

vaultId

function vaultId() external view returns (uint256)

The vault's ID number.

is1155

function is1155() external view returns (bool)

Whether the vault is for an ERC1155 NFT.

Variables

manager

function manager() external view returns (address)

Address of vault manager.

eligibilityStorage

function eligibilityStorage() external view returns (address)

Address of Eligibility Storage.

allowAllItems

function allowAllItems() external view returns (bool)

Whether all NFT tokenIDs are eligible to enter this vault.

enableMint

function enableMint() external view returns (bool)

Whether minting is enabled.

enableRedeem

function enableRedeem() external view returns (bool)

Whether redeeming is enabled.

enableSwap

function enableSwap() external view returns (bool)

Whether swapping is enabled.

tokenDepositInfo

function tokenDepositInfo(
    uint256 tokenId
) external view returns (uint48 timestamp, address depositor)

Timestamp and depositor address of each ERC721 deposit.

depositInfo1155

function depositInfo1155(
    uint256 tokenId,
    uint256 index
) external view returns (uint256 qty, address depositor, uint48 timestamp)

Quantity, depositor address, and timestamp of each ERC1155 deposit.

pointerIndex1155

function pointerIndex1155(uint256 tokenId) external view returns (uint256)

Pointer index of oldest DepositInfo1155 object, for each ERC1155 tokenID.

Events

VaultInit

event VaultInit(
    uint256 indexed vaultId,
    address assetAddress,
    bool is1155,
    bool allowAllItems
)

Emitted by __NFTXVault_init function.

ManagerSet

event ManagerSet(address manager)

Emitted by setManager function.

EligibilityDeployed

event EligibilityDeployed(uint256 moduleIndex, address eligibilityAddr)

Emitted by deployEligibilityStorage function.

EnableMintUpdated

event EnableMintUpdated(bool enabled)

Emitted by setVaultFeatures function.

EnableRedeemUpdated

event EnableRedeemUpdated(bool enabled)

Emitted by setVaultFeatures function.

EnableSwapUpdated

event EnableSwapUpdated(bool enabled)

Emitted by setVaultFeatures function.

Minted

event Minted(
    uint256[] nftIds,
    uint256[] amounts,
    address to,
    address depositor
)

Emitted by mint function.

Redeemed

event Redeemed(uint256[] specificIds, address to)

Emitted by redeem function.

Swapped

event Swapped(
    uint256[] nftIds,
    uint256[] amounts,
    uint256[] specificIds,
    address to,
    address depositor
)

Emitted by swap function.

PremiumShared

event PremiumShared(address depositor, uint256 wethPremium)

Emitted by redeem and swap functions.

FeesDistributed

event FeesDistributed(uint256 wethFees)

Emitted by mint, redeem and swap functions.

VaultShutdown

event VaultShutdown(
    address assetAddress,
    uint256 numItems,
    address recipient
)

Emitted by shutdown.

Write Functions

mint

function mint(
    uint256[] calldata tokenIds,
    uint256[] calldata amounts,
    address depositor,
    address to
) external payable returns (uint256 vTokensMinted)

Mints vault tokens in exchange for depositing NFTs. Mint fee is paid in ETH.

redeem

function redeem(
    uint256[] calldata idsOut,
    address to,
    uint256 wethAmount,
    uint256 vTokenPremiumLimit,
    bool forceFees
) external payable returns (uint256 ethFees)

Redeems NFTs by burning vToken. Redeem fee is paid in ETH or WETH.

swap

function swap(
    uint256[] calldata idsIn,
    uint256[] calldata amounts,
    uint256[] calldata idsOut,
    address depositor,
    address to,
    uint256 vTokenPremiumLimit,
    bool forceFees
) external payable returns (uint256 ethFees)

Swap one or more NFTs (idsIn) for other NFTs from the vault (idsOut). Swap fee is paid in ETH.

flashLoan

function flashLoan(
    IERC3156FlashBorrowerUpgradeable receiver,
    address token,
    uint256 amount,
    bytes calldata data
) public returns (bool)

Performs a flash loan. New tokens are minted and sent to receiver, who is required to implement the IERC3156FlashBorrower interface. By the end of the flash loan, the receiver is expected to own amount of tokens and have them approved back to the token contract itself so they can be burned and distributed.

The fee required to execute a flash loan is paid in ETH and is the highest of the vault's mint, redeem, and swap fees. All ETH proceeds are sent to the vault's inventory stakers.

Privileged Functions

These functions can only be called by the vault manager or (if there is no vault manager) the contract owner.

finalizeVault

function finalizeVault() external

Removes the vault manager.

setVaultMetadata

function setVaultMetadata(
    string calldata name_,
    string calldata symbol_
) external

Sets the name and symbol of the vault's ERC20 vToken.

setVaultFeatures

function setVaultFeatures(
    bool enableMint_,
    bool enableRedeem_,
    bool enableSwap_
) external

Sets minting, redeeming, and swapping as either on or off.

setFees

function setFees(
    uint256 mintFee_,
    uint256 redeemFee_,
    uint256 swapFee_
) external

Sets mint, redeem, and (NFT-to-NFT) swap fees. 1e16 = 1%.

disableVaultFees

function disableVaultFees() external

Removes custom vault fee settings, reverting to the global/default vault fee settings.

deployEligibilityStorage

function deployEligibilityStorage(
    uint256 moduleIndex,
    bytes calldata initData
) external returns (address)

Deploys and initializes an eligibility module contract from the EligibilityManager.

setManager

function setManager(address manager_) external

Sets the vault manager.

Owner Functions

rescueTokens

function rescueTokens(
    TokenType tt,
    address token,
    uint256[] calldata ids,
    uint256[] calldata amounts
) external

Rescues ERC20, ERC721, or ERC1155 tokens.

shutdown

function shutdown(
    address recipient,
    uint256[] calldata tokenIds
) external

Shuts the vault down and sends its NFTs to recipient. This function is meant to be used by the DAO when a vault has lost liquidity, and the vToken is too dispersed for any one user to redeem. When this happens, one or more users can request a shutdown, which is initiated by the DAO. The DAO then sells the assets for ETH and distributes the ETH to the vToken holders.

This function works for both ERC721 and ERC1155 vaults. For ERC1155, the total amount of each tokenID will be sent to the recipient.

Read Functions

nftIdAt

function nftIdAt(
    uint256 holdingsIndex
) external view returns (uint256)

Retrieves the NFT token ID stored at a specified index in holdings.

allHoldings

function allHoldings() external view returns (uint256[] memory)

Returns an array of all NFT token IDs held by the vault.

totalHoldings

function totalHoldings() external view returns (uint256)

Returns the number of distinct NFT token IDs in holdings.

holdingsContains

function holdingsContains(uint256 tokenId) external view returns (bool)

Returns whether an NFT tokenId is in the vault.

vaultFees

function vaultFees()
    external
    view
    returns (uint256 mintFee, uint256 redeemFee, uint256 swapFee)

The mint, redeem, and swap fees.

allValidNFTs

function allValidNFTs(
    uint256[] memory tokenIds
) external view returns (bool)

Checks whether all NFT Token IDs inputed are valid for minting vToken.

vTokenToETH

function vTokenToETH(
    uint256 vTokenAmount
) external view returns (uint256 ethAmount)

Calculate ETH amount corresponding to a given vToken amount, calculated via the TWAP from the NFTX AMM.

depositInfo1155Length

function depositInfo1155Length(
    uint256 tokenId
) external view returns (uint256)

Returns length of the depositInfo1155 list for a given tokenID.

version

function version() external pure returns (string memory)

Returns the version of this contract.

Last updated