Check if a Pool Exists

Check if a V2 liquidity pool for two sets of HTS tokens with a specific swap fee tier exists on-chain.

Checking if the liquidity pool with the matching fee tier exists using SaucerSwap's REST API is also a suitable alternative. For more information, see Get all Liquidity Pools (V2).


Function name: getPool

No gas cost

Parameter NameDescription

address token0

The contract address of either token0 or token1

address token1

The contract address of the other token

uint24 fee

The fee collected upon every swap in the pool, denominated in hundredths of a bip

Solidity Interface
//IUniswapV3Factory.sol

/// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist
/// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order
/// @param tokenA The contract address of either token0 or token1
/// @param tokenB The contract address of the other token
/// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip
/// @return pool The pool address
function getPool(
  address tokenA,
  address tokenB,
  uint24 fee
) external view returns (address pool);

When working with HBAR, use the WHBAR (Wrapped HBAR) token address for either tokenA or tokenB.

The ordering of tokens for token0 and token1 does not matter.

If the pool does not exist, a zero address will be returned.

Code Overview

import * as ethers from 'ethers'; //V6

//Set one of Hedera's JSON RPC Relay as the provider
const provider = new ethers.JsonRpcProvider(hederaJsonRelayUrl, '', {
  batchMaxCount: 1, //workaround for V6
});

//load ABI data containing the Factory's getPool function
const interfaces = new ethers.Interface(abi);

const factoryContract = new ethers.Contract(factoryEvmAddress, interfaces.fragments, provider);
const result = await factoryContract.getPool(token0, token1); //(token1, token0) will give same result
const poolEvmAddress = result; //address pool

Last updated