@maxosllc/smart-order-router
Version:
BlockDAG Smart Order Router
29 lines • 3.23 kB
JavaScript
import { defaultAbiCoder } from '@ethersproject/abi';
import { getCreate2Address } from '@ethersproject/address';
import { keccak256 } from '@ethersproject/solidity';
import { computeZksyncCreate2Address } from '@uniswap/sdk-core';
import { ChainId } from '../../../src/util/chains';
/**
* Computes a pool address
* @param factoryAddress The Uniswap V3 factory address
* @param tokenA The first token of the pair, irrespective of sort order
* @param tokenB The second token of the pair, irrespective of sort order
* @param fee The fee tier of the pool
* @param initCodeHashManualOverride Override the init code hash used to compute the pool address if necessary
* @param chainId
* @returns The pool address
*/
export function computePoolAddress({ factoryAddress, tokenA, tokenB, fee, initCodeHashManualOverride, chainId, }) {
const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA]; // does safety checks
const salt = keccak256(['bytes'], [defaultAbiCoder.encode(['address', 'address', 'uint24'], [token0.address, token1.address, fee])]);
const initCodeHash = initCodeHashManualOverride !== null && initCodeHashManualOverride !== void 0 ? initCodeHashManualOverride : "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54";
// ZKSync uses a different create2 address computation
// Most likely all ZKEVM chains will use the different computation from standard create2
switch (chainId) {
case ChainId.ZKSYNC:
return computeZksyncCreate2Address(factoryAddress, initCodeHash, salt);
default:
return getCreate2Address(factoryAddress, salt, initCodeHash);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS1wb29sLWFkZHJlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3YzL2NvbXB1dGUtcG9vbC1hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLDJCQUEyQixFQUFTLE1BQU0sbUJBQW1CLENBQUE7QUFFdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRW5EOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUNqQyxjQUFjLEVBQ2QsTUFBTSxFQUNOLE1BQU0sRUFDTixHQUFHLEVBQ0gsMEJBQTBCLEVBQzFCLE9BQU8sR0FRUjtJQUNDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBLENBQUMscUJBQXFCO0lBQy9HLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FDcEIsQ0FBQyxPQUFPLENBQUMsRUFDVCxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDbEcsQ0FBQTtJQUNELE1BQU0sWUFBWSxHQUFHLDBCQUEwQixhQUExQiwwQkFBMEIsY0FBMUIsMEJBQTBCLEdBQUksb0VBQW9FLENBQUE7SUFFdkgsc0RBQXNEO0lBQ3RELHdGQUF3RjtJQUN4RixRQUFRLE9BQU8sRUFBRTtRQUNmLEtBQUssT0FBTyxDQUFDLE1BQU07WUFDakIsT0FBTywyQkFBMkIsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3hFO1lBQ0UsT0FBTyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFBO0tBQy9EO0FBQ0gsQ0FBQyJ9