Skip to main content
Version: 2.0.0

getPair

The most obvious way to get the address for a pair is to call getPair on the factory. If the pair exists, this function will return its address, else address(0) (0x0000000000000000000000000000000000000000).

  • The "canonical" way to determine whether or not a pair exists.
  • Requires an on-chain lookup.

CREATE2

Thanks to some fancy footwork in the factory, we can also compute pair addresses without any on-chain lookups because of CREATE2. The following values are required for this technique:

addressThe factory address
saltkeccak256(abi.encodePacked(token0, token1))
keccak256(init_code)0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f
  • token0 must be strictly less than token1 by sort order.
  • Can be computed offline.
  • Requires the ability to perform keccak256.

Examples#

TypeScript#

This example makes use of the Uniswap SDK. In reality, the SDK computes pair addresses behind the scenes, obviating the need to compute them manually like this.

import { FACTORY_ADDRESS, INIT_CODE_HASH } from "@uniswap/sdk";import { pack, keccak256 } from "@ethersproject/solidity";import { getCreate2Address } from "@ethersproject/address";
const token0 = "0xCAFE000000000000000000000000000000000000"; // change me!const token1 = "0xF00D000000000000000000000000000000000000"; // change me!
const pair = getCreate2Address(  FACTORY_ADDRESS,  keccak256(["bytes"], [pack(["address", "address"], [token0, token1])]),  INIT_CODE_HASH);