Check if a Pool Exists

Check if the liquidity pool for a pair of HTS tokens exists on-chain.

When adding a new or existing liquidity pool, the initial step is typically to verify if the liquidity pool already exists before determining the next course of action. The factory contract provides a method to retrieve the pool address, if it exists, as shown below.

Checking if the liquidity pool exists using SaucerSwap's REST API is also a suitable alternative. For more information, see Get V1 liquidity pools


Get the Existing Liquidity Pool if it Exists

No gas cost

Get the existing liquidity pool's CREATE2 EVM address if it exists. If the pool does not exist on-chain, a zero address will be returned.

Function name: getPair

Parameter NameDescription

address tokenA

EVM address of the first token

address tokenB

EVM address of the second token

Solidity Interface
//IUniswapV2Factory.sol

function getPair(
  address tokenA,
  address tokenB
) external view returns (address pair);

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

The ordering of tokens for tokenA and tokenB does not matter.

Code Overview

Resources:

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 getPair function
const interfaces = new ethers.Interface(abi);

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

Last updated