# 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>
