# NFTXRouter

This contract interacts with the NFTX AMM for adding & removing liquidity, and facilitating buys & sells. It also handles minting and burning vTokens when necessary.

## Table of Contents

<details>

<summary>Constants</summary>

[#weth](#weth "mention")\
[#permit2](#permit2 "mention")\
[#positionmanager](#positionmanager "mention")\
[#router](#router "mention")\
[#quoter](#quoter "mention")\
[#nftxvaultfactory](#nftxvaultfactory "mention")\
[#inventorystaking](#inventorystaking "mention")

</details>

<details>

<summary>Variables</summary>

[#lptimelock](#lptimelock "mention")\
[#earlywithdrawpenaltyinwei](#earlywithdrawpenaltyinwei "mention")\
[#vtokendustthreshold](#vtokendustthreshold "mention")

</details>

<details>

<summary>Events</summary>

[#addliquidity](#addliquidity "mention")\
[#removeliquidity](#removeliquidity "mention")\
[#increaseliquidity](#increaseliquidity "mention")\
[#sellnfts](#sellnfts "mention")\
[#buynfts](#buynfts "mention")

</details>

<details>

<summary>Public Write Functions</summary>

[#addliquidity-1](#addliquidity-1 "mention")\
[#addliquiditywithpermit2](#addliquiditywithpermit2 "mention")\
[#increaseliquidity-1](#increaseliquidity-1 "mention")\
[#increaseliquiditywithpermit2](#increaseliquiditywithpermit2 "mention")\
[#removeliquidity-1](#removeliquidity-1 "mention")\
[#sellnfts-1](#sellnfts-1 "mention")\
[#buynfts-1](#buynfts-1 "mention")

</details>

<details>

<summary>Owner Write Functions</summary>

[#rescuetokens](#rescuetokens "mention")\
[#setlptimelock](#setlptimelock "mention")\
[#setvtokendustthreshold](#setvtokendustthreshold "mention")\
[#setearlywithdrawpenalty](#setearlywithdrawpenalty "mention")

</details>

<details>

<summary>Read Functions</summary>

[#quotebuynfts](#quotebuynfts "mention")\
[#getpoolexists](#getpoolexists "mention")\
[#getpool](#getpool "mention")\
[#computepool](#computepool "mention")\
[#isvtoken0](#isvtoken0 "mention")

</details>

## Constants

#### WETH

```solidity
function WETH() external returns (address)
```

Contract address of `WETH`.

#### PERMIT2

```solidity
function PERMIT2() external returns (address)
```

Contract address of PERMIT2.&#x20;

#### positionManager

```solidity
function positionManager() external returns (address)
```

Contract address of the AMM's `NonfungiblePositionManager`.

#### router

```solidity
function router() external returns (address)
```

Contract address of the AMM's `SwapRouter`.

#### quoter

```solidity
function quoter() external returns (address)
```

Contract address of the AMM's `QuoterV2`.

#### nftxVaultFactory

```solidity
function nftxVaultFactory() external returns (address)
```

Contract address of the NFTX vault factory.

#### inventoryStaking

```solidity
function inventoryStaking() external returns (address)
```

Address of inventory staking contract.

## Variables

#### lpTimelock

```solidity
function lpTimelock() external returns (uint256)
```

The timelock duration to apply to new positions.

#### earlyWithdrawPenaltyInWei

```solidity
function earlyWithdrawPenaltyInWei() external returns (uint256)
```

Early withdrawal fee. 1e16 = 1%.

#### vTokenDustThreshold

```solidity
function vTokenDustThreshold() external returns (uint256)
```

Threshold amount for vToken dust to be returned.

## Events

#### AddLiquidity

```solidity
event AddLiquidity(
    uint256 indexed positionId,
    uint256 vaultId,
    uint256 vTokensAmount,
    uint256[] nftIds,
    address pool
)
```

Emitted by `addLiquidity()` and `addLiquidityWithPermit2()`.

<table><thead><tr><th width="204">Parameters</th><th width="130.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>positionId</td><td><code>uint256</code></td><td>ID of liquidity position.</td></tr><tr><td>vaultId</td><td><code>uint256</code></td><td>ID of vault. </td></tr><tr><td>vTokensAmount</td><td><code>uint256</code></td><td>Amount of vToken deposited.</td></tr><tr><td>nftIds</td><td><code>uint256[]</code></td><td>IDs of NFTs deposited.</td></tr><tr><td>pool</td><td><code>address</code></td><td>Address of pool contract.</td></tr></tbody></table>

#### RemoveLiquidity

```solidity
event RemoveLiquidity(
    uint256 indexed positionId,
    uint256 vaultId,
    uint256 vTokenAmt,
    uint256 wethAmt
)
```

Emitted by `removeLiquidity()`.

<table><thead><tr><th width="204">Parameters</th><th width="130.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>positionId</td><td><code>uint256</code></td><td>ID number of liquidity position.</td></tr><tr><td>vaultId</td><td><code>uint256</code></td><td>ID number of vault.</td></tr><tr><td>vTokensAmount</td><td><code>uint256</code></td><td>Amount of vToken received.</td></tr><tr><td>nftIds</td><td><code>uint256[]</code></td><td>IDs of NFTs received.</td></tr><tr><td>pool</td><td><code>address</code></td><td>Address of pool contract.</td></tr></tbody></table>

#### IncreaseLiquidity

```solidity
event IncreaseLiquidity(
    uint256 indexed positionId,
    uint256 vaultId,
    uint256 vTokensAmount,
    uint256[] nftIds
)
```

Emitted by `increaseLiquidity()` and `increaseLiquidityWithPermit2()`.

<table><thead><tr><th width="204">Parameters</th><th width="130.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>positionId</td><td><code>uint256</code></td><td>ID of liquidity position.</td></tr><tr><td>vaultId</td><td><code>uint256</code></td><td>ID of vault.</td></tr><tr><td>vTokensAmount</td><td><code>uint256</code></td><td>Amount of vToken deposited.</td></tr><tr><td>nftIds</td><td><code>uint256[]</code></td><td>IDs of NFTs deposited.</td></tr></tbody></table>

#### SellNFTs

```solidity
event SellNFTs(uint256 nftCount, uint256 ethReceived)
```

Emitted by `sellNFTs()`.

<table><thead><tr><th width="204">Parameters</th><th width="130.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>nftCount</td><td><code>uint256</code></td><td>Number of NFTs sold.</td></tr><tr><td>ethReceived</td><td><code>uint256</code></td><td>Amount of ETH received.</td></tr></tbody></table>

#### BuyNFTs

```solidity
event BuyNFTs(uint256 nftCount, uint256 ethSpent)
```

Emitted by `buyNFTs()`.

<table><thead><tr><th width="204">Parameters</th><th width="130.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>nftCount</td><td><code>uint256</code></td><td>Number of NFTs bought.</td></tr><tr><td>ethSpent</td><td><code>uint256</code></td><td>Amount of ETH spent.</td></tr></tbody></table>

## Write Functions

#### addLiquidity

```solidity
function addLiquidity(
    AddLiquidityParams calldata params
) external payable returns (uint256 positionId)
```

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.

<table><thead><tr><th width="179.5">Parameters</th><th width="214">Type</th><th>Description</th></tr></thead><tbody><tr><td>params</td><td><code>AddLiquidityParams</code></td><td>See table below.</td></tr><tr><td><code>msg.value</code></td><td><code>uint256</code></td><td>Amount of ETH to send.</td></tr></tbody></table>

<table><thead><tr><th width="207.5">AddLiquidityParams</th><th width="129">Type</th><th>Description</th></tr></thead><tbody><tr><td>vaultId</td><td><code>uint256</code></td><td>ID number of vault.</td></tr><tr><td>vTokensAmount</td><td><code>uint256</code></td><td>Amount of vToken to add as liquidity.</td></tr><tr><td>nftIds</td><td><code>uint256[]</code></td><td>NFT IDs to have converted to vToken, then used for liquidity.</td></tr><tr><td>nftAmounts</td><td><code>uint256[]</code></td><td>Amounts of NFTs.</td></tr><tr><td>tickLower</td><td><code>int24</code></td><td>Lower end of the price range for the liquidity. Minimum value is -887272.</td></tr><tr><td>tickUpper</td><td><code>int24</code></td><td>Upper end of the price range for the liquidity. Maximum value is 887272.</td></tr><tr><td>fee</td><td><code>uint24</code></td><td>The pool's trading fee, denominated in hundredths of a bip. </td></tr><tr><td>sqrtPriceX96</td><td><code>uint160</code></td><td>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. </td></tr><tr><td>vTokenMin</td><td><code>uint256</code></td><td>Minimum required vToken amount added.</td></tr><tr><td>wethMin</td><td><code>uint256</code></td><td>Minimum required WETH amount added.</td></tr><tr><td>deadline</td><td><code>uint256</code></td><td>Unix timestamp after which the transaction will revert. </td></tr><tr><td>forceTimelock</td><td><code>bool</code></td><td>Whether a timelock is forced, only applicable for vToken deposits. Forcing a timelock allows for off-ramping to NFTs when finished LPing, if desired.</td></tr></tbody></table>

<table><thead><tr><th width="211.5">Return values</th><th width="126">Type</th><th>Description</th></tr></thead><tbody><tr><td>positionId</td><td><code>uint256</code></td><td>ID number of liquidity position NFT.</td></tr></tbody></table>

#### addLiquidityWithPermit2

```solidity
function addLiquidityWithPermit2(
    AddLiquidityParams calldata params,
    bytes calldata encodedPermit2
) external payable returns (uint256 positionId)
```

Adds liquidity using Permit2 contract.

<table><thead><tr><th width="179.5">Parameters</th><th width="214">Type</th><th>Description</th></tr></thead><tbody><tr><td>params</td><td><code>AddLiquidityParams</code></td><td>See <a data-mention href="#addliquidity-1">#addliquidity-1</a> function above.</td></tr><tr><td>encodedPermit2</td><td><code>bytes</code></td><td><p>Encoded Permit2 data:</p><pre class="language-solidity"><code class="lang-solidity">address owner,
IPermitAllowanceTransfer.PermitSingle,
bytes memory signature
</code></pre></td></tr><tr><td><code>msg.value</code></td><td><code>uint256</code></td><td>Amount of ETH to send. </td></tr></tbody></table>

<table><thead><tr><th width="179.5">Return values</th><th width="216">Type</th><th>Description</th></tr></thead><tbody><tr><td>positionId</td><td><code>uint256</code></td><td>ID number of liquidity position NFT.</td></tr></tbody></table>

#### increaseLiquidity

```solidity
function increaseLiquidity(
    IncreaseLiquidityParams calldata params
) external payable
```

Increase the size of a liquidity position.

<table><thead><tr><th width="179.5">Parameters</th><th width="262">Type</th><th>Description</th></tr></thead><tbody><tr><td>params</td><td><code>IncreaseLiquidityParams</code></td><td>See table below.</td></tr><tr><td><code>msg.value</code></td><td><code>uint256</code></td><td>Amount of ETH to send.</td></tr></tbody></table>

<table><thead><tr><th width="239.5">IncreaseLiquidityParams</th><th width="129">Type</th><th>Description</th></tr></thead><tbody><tr><td>positionId</td><td><code>uint256</code></td><td>ID number of liquidity position</td></tr><tr><td>vaultId</td><td><code>uint256</code></td><td>ID of vault.</td></tr><tr><td>vTokensAmount</td><td><code>uint256</code></td><td>Amount of vToken to add as liquidity.</td></tr><tr><td>nftIds</td><td><code>uint256[]</code></td><td>NFT IDs to have converted to vToken, then used for liquidity.</td></tr><tr><td>nftAmounts</td><td><code>uint256[]</code></td><td>Amount of NFTs (for ERC1155).</td></tr><tr><td>vTokenMin</td><td><code>uint256</code></td><td>Minimum required vToken amount added.</td></tr><tr><td>wethMin</td><td><code>uint256</code></td><td>Minimum required WETH amount added.</td></tr><tr><td>deadline</td><td><code>uint256</code></td><td>Unix timestamp after which the transaction will revert. </td></tr><tr><td>forceTimelock</td><td><code>bool</code></td><td>Whether to force a timelock.</td></tr></tbody></table>

#### increaseLiquidityWithPermit2

```solidity
function increaseLiquidityWithPermit2(
    IncreaseLiquidityParams calldata params,
    bytes calldata encodedPermit2
) external payable
```

Increase the size of a liquidity position, using permit2 for vTokens instead of regular approvals.

<table><thead><tr><th width="176.5">Parameters</th><th width="121">Type</th><th>Description</th></tr></thead><tbody><tr><td>params</td><td><code>IncreaseLiquidityParams</code></td><td>See table above.</td></tr><tr><td>encodedPermit2</td><td><code>bytes</code></td><td><p>Encoded Permit2 data:</p><pre class="language-solidity"><code class="lang-solidity">address owner,
IPermitAllowanceTransfer.PermitSingle,
bytes memory signature
</code></pre></td></tr><tr><td><code>msg.value</code></td><td><code>uint256</code></td><td>Amount of ETH to send. </td></tr></tbody></table>

#### removeLiquidity

```solidity
function removeLiquidity(
    RemoveLiquidityParams calldata params
) external payable
```

Removes liquidity from an AMM pool and claims any available fees.

<table><thead><tr><th width="179.5">Parameters</th><th width="244">Type</th><th>Description</th></tr></thead><tbody><tr><td>params</td><td><code>RemoveLiquidityParams</code></td><td>See table below.</td></tr><tr><td><code>msg.value</code></td><td><code>uint256</code></td><td>Amount of ETH to send.</td></tr></tbody></table>

<table><thead><tr><th width="233.5">RemoveLiquidityParams</th><th width="128">Type</th><th>Description</th></tr></thead><tbody><tr><td>positionId</td><td><code>uint256</code></td><td>ID number of the liquidity position.</td></tr><tr><td>vaultId</td><td><code>uint256</code></td><td>Vault ID of associated vToken.</td></tr><tr><td>nftIds</td><td><code>uint256[]</code></td><td>The requested NFT IDs.</td></tr><tr><td>liquidity</td><td><code>uint128</code></td><td>The amount of liquidity to remove.</td></tr><tr><td>amount0Min</td><td><code>uint256</code></td><td>The minimum amount of token0 that must result from removing liquidity.</td></tr><tr><td>amount1Min</td><td><code>uint256</code></td><td>The minimum amount of token1 that must result from removing liquidity for the transaction to not revert.</td></tr><tr><td>deadline</td><td><code>uint256</code></td><td>Unix timestamp after which the transaction will revert.</td></tr></tbody></table>

#### sellNFTs

```solidity
function sellNFTs(
    SellNFTsParams calldata params
) external payable returns (uint256 wethReceived)
```

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.&#x20;

<table><thead><tr><th width="199.5">Parameters</th><th width="190">Type</th><th>Description</th></tr></thead><tbody><tr><td>params</td><td><code>SellNFTsParams</code></td><td>See table below.</td></tr><tr><td><code>msg.value</code></td><td><code>uint256</code></td><td>Amount of ETH to send.</td></tr></tbody></table>

<table><thead><tr><th width="201.5">SellNFTsParams</th><th width="130">Type</th><th>Description</th></tr></thead><tbody><tr><td>vaultId</td><td><code>uint256</code></td><td>Vault ID of the associated vToken.</td></tr><tr><td>nftIds</td><td><code>uint256[]</code></td><td>The IDs of the NFTs to sell.</td></tr><tr><td>nftAmounts</td><td><code>uint256</code></td><td>Amounts of NFTs.</td></tr><tr><td>deadline</td><td><code>uint256</code></td><td>Unix timestamp after which the transaction will revert.</td></tr><tr><td>fee</td><td><code>uint24</code></td><td>The fee of the AMM pool which the trade will route through.</td></tr><tr><td>amountOutMinimum</td><td><code>uint256</code></td><td>The minimum amount of ETH required in return.</td></tr><tr><td>sqrtPriceLimitX96</td><td><code>uint160</code></td><td>The price limit that the swap can push the pool to. Can be left as 0, in which case it is ignored.</td></tr></tbody></table>

<table><thead><tr><th width="204">Return values</th><th width="130.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>wethReceived</td><td><code>uint256</code></td><td>The amount of WETH received.</td></tr></tbody></table>

#### buyNFTs

```solidity
function buyNFTs(BuyNFTsParams calldata params) external payable
```

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.&#x20;

<table><thead><tr><th width="202.5">Parameters</th><th width="170">Type</th><th>Description</th></tr></thead><tbody><tr><td>params</td><td><code>BuyNFTsParams</code></td><td>See table below.</td></tr><tr><td><code>msg.value</code></td><td><code>uint256</code></td><td>Amount of ETH to send.</td></tr></tbody></table>

<table><thead><tr><th width="205.5">BuyNFTsParams</th><th width="133">Type</th><th>Description</th></tr></thead><tbody><tr><td>vaultId</td><td><code>uint256</code></td><td>ID of vault that holds the requested NFTs. </td></tr><tr><td>nftIds</td><td><code>uint256[]</code></td><td>The IDs of the NFTs to be purchased.</td></tr><tr><td>vTokenPremiumLimit</td><td><code>uint256</code></td><td>Max total premium fee (in vToken) to be paid. </td></tr><tr><td>deadline</td><td><code>uint256</code></td><td>Unix timestamp after which the transaction will revert.</td></tr><tr><td>fee</td><td><code>uint24</code></td><td>Fee of the AMM pool which the trade will route through.</td></tr><tr><td>sqrtPriceLimitX96</td><td><code>uint160</code></td><td>The max spot price which cannot be exceeded. Can be left as 0, in which case it is ignored.</td></tr></tbody></table>

## Owner Functions

#### rescueTokens

```solidity
function rescueTokens(IERC20 token) external
```

Sends balance of an ERC20 token to caller. Also works for ETH.&#x20;

<table><thead><tr><th width="154.5">Parameters</th><th width="110">Type</th><th>Description</th></tr></thead><tbody><tr><td>token</td><td><code>IERC20</code></td><td>Address of the token contract being requested. Set to 0 to retrieve ETH.</td></tr></tbody></table>

#### setLpTimelock

```solidity
function setLpTimelock(uint256 lpTimelock_) external
```

Sets the LP timelock duration.

<table><thead><tr><th width="154.5">Parameters</th><th width="110">Type</th><th>Description</th></tr></thead><tbody><tr><td>lpTimelock_</td><td><code>uint256</code></td><td>New LP timelock duration. In seconds.</td></tr></tbody></table>

#### setVTokenDustThreshold

```solidity
function setVTokenDustThreshold(
    uint256 vTokenDustThreshold_
) external
```

Sets the vToken dust threshold (minimum amount required to be returned to sender).&#x20;

<table><thead><tr><th width="223.5">Parameters</th><th width="110">Type</th><th>Description</th></tr></thead><tbody><tr><td>vTokenDustThreshold_</td><td><code>uint256</code></td><td>New vToken dust threshold.</td></tr></tbody></table>

#### setEarlyWithdrawPenalty

```solidity
function setEarlyWithdrawPenalty(
    uint256 earlyWithdrawPenaltyInWei_
) external
```

Sets the early withdrawal penalty. 1e16 = 1%.

<table><thead><tr><th width="264.5">Parameters</th><th width="110">Type</th><th>Description</th></tr></thead><tbody><tr><td>earlyWithdrawPenaltyInWei_</td><td><code>uint256</code></td><td>New early withdrawal penalty.</td></tr></tbody></table>

## Read Functions

#### quoteBuyNFTs

```solidity
function quoteBuyNFTs(
    address vtoken,
    uint256 nftsCount,
    uint24 fee,
    uint160 sqrtPriceLimitX96
) external returns (uint256 ethRequired)
```

Computes the cost in ETH to purchase one or more NFTs.&#x20;

<table><thead><tr><th width="185.5">Parameters</th><th width="129">Type</th><th>Description</th></tr></thead><tbody><tr><td>vtoken</td><td><code>address</code></td><td>Address of vToken/vault which holds the NFTs.</td></tr><tr><td>nftsCount</td><td><code>uint256[]</code></td><td>Total number of NFTs.</td></tr><tr><td>fee</td><td><code>uint24</code></td><td>The fee of the AMM pool used to facilitate the swap.</td></tr><tr><td>sqrtPriceLimitX96</td><td><code>uint160</code></td><td>The max spot price that can't be exceeded. Can be left as 0, in which case it is ignored.</td></tr></tbody></table>

<table><thead><tr><th width="185.5">Return values</th><th width="134">Type</th><th>Description</th></tr></thead><tbody><tr><td>ethRequired</td><td><code>uint256</code></td><td>The quoted ETH price to make the purchase.</td></tr></tbody></table>

#### getPoolExists

```solidity
function getPoolExists(
    uint256 vaultId,
    uint24 fee
) external view returns (address pool, bool exists)
```

Checks for the existence of a pool.&#x20;

<table><thead><tr><th width="185.5">Parameters</th><th width="133">Type</th><th>Description</th></tr></thead><tbody><tr><td>vaultId</td><td><code>uint256</code></td><td>The vault ID of the vToken.</td></tr><tr><td>fee</td><td><code>uint24</code></td><td>The pool's trading fee, denominated in hundredths of a bip.</td></tr></tbody></table>

<table><thead><tr><th width="185.5">Return values</th><th width="136">Type</th><th>Description</th></tr></thead><tbody><tr><td>pool</td><td><code>address</code></td><td>Address of the pool contract. Returns <code>0</code> if the pool does not exist.</td></tr><tr><td>exists</td><td><code>bool</code></td><td>True if the pool already exists.</td></tr></tbody></table>

#### getPool

```solidity
function getPool(
    address vToken_,
    uint24 fee
) external view returns (address pool)
```

Retrieves the address of the pool (if it exists) for a vToken and fee setting.&#x20;

<table><thead><tr><th width="183.5">Parameters</th><th width="120">Type</th><th>Description</th></tr></thead><tbody><tr><td>vToken_</td><td><code>address</code></td><td>Address of vToken from the pool.</td></tr><tr><td>fee</td><td><code>uint24</code></td><td>The pool's trading fee, denominated in hundredths of a bip.</td></tr></tbody></table>

<table><thead><tr><th width="184.5">Return values</th><th width="119">Type</th><th>Description</th></tr></thead><tbody><tr><td>pool</td><td><code>address</code></td><td>Address of the pool contract. Returns <code>0</code> if the pool does not exist.</td></tr></tbody></table>

#### computePool

```solidity
function computePool(
    address vToken_,
    uint24 fee
) external view returns (address)
```

Computes the deterministically generated pool address.&#x20;

<table><thead><tr><th width="154.5">Parameters</th><th width="141">Type</th><th>Description</th></tr></thead><tbody><tr><td>vToken_</td><td><code>address</code></td><td>Address of vToken from the pool.</td></tr><tr><td>fee</td><td><code>uint24</code></td><td>The pool's trading fee, denominated in hundredths of a bip.</td></tr></tbody></table>

<table><thead><tr><th width="156.5">Return values</th><th width="140">Type</th><th>Description</th></tr></thead><tbody><tr><td><em>unnamed</em></td><td><code>address</code></td><td>The deterministically generated address of the pool, given the vToken and fee.</td></tr></tbody></table>

#### isVToken0

```solidity
function isVToken0(address vtoken) external view returns (bool)
```

Checks if a vToken is token0 when paired with WETH.

<table><thead><tr><th width="159.5">Parameters</th><th width="158">Type</th><th>Description</th></tr></thead><tbody><tr><td>vtoken</td><td><code>address</code></td><td>Address of vToken which forms the vToken/ETH pair of a pool.</td></tr></tbody></table>

<table><thead><tr><th width="160.5">Return values</th><th width="155">Type</th><th>Description</th></tr></thead><tbody><tr><td><em>unnamed</em></td><td><code>bool</code></td><td>True if vToken address is "token0" of a vToken/WETH pair.</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nftx.io/core-contracts/nftxrouter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
