Pair Addresses
Compute deterministic Uniswap v2 pair addresses with CREATE2 and verify pair ordering and factory inputs.
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 onchain lookup.
CREATE2
Thanks to some fancy footwork in the factory, we can also compute pair addresses without any onchain lookups because of CREATE2. The following values are required for this technique:
address | The factory address |
salt | keccak256(abi.encodePacked(token0, token1)) |
keccak256(init_code) | 0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f |
token0must be strictly less thantoken1by sort order.
- Can be computed offline.
- Requires the ability to performÂ
keccak256.
Examples
Solidity
address factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
address token0 = 0xCAFE000000000000000000000000000000000000; // change me!
address token1 = 0xF00D000000000000000000000000000000000000; // change me!
address pair = address(uint160(bytes20(keccak256(abi.encodePacked(
hex'ff',
factory,
keccak256(abi.encodePacked(token0, token1)),
hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'
))));