Pair Addresses
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.
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:
| |
address | |
salt | keccak256(abi.encodePacked(token0, token1)) |
keccak256(init_code) | 0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f |
token0
must be strictly less thantoken1
by sort order.- Can be computed offline.
- Requires the ability to perform
keccak256
.
This example makes use of the WhiteSwap 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 '@whiteswap/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'
)
Last modified 2yr ago