From b64cd760ab933c3e4857f01b3a9f566be1465f4e Mon Sep 17 00:00:00 2001 From: Miguel Cervera Date: Tue, 20 Feb 2024 09:26:47 -0800 Subject: [PATCH] Use default FACTORY_ADDRESS if the chain is not in the map (#160) * Use default FACTORY_ADDRESS if the chain is not in the map * Fix code style issues with Prettier * test * conflict * Fix code style issues with Prettier --------- Co-authored-by: Lint Action --- src/entities/pair.test.ts | 10 +++++++++- src/entities/pair.ts | 24 +++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/entities/pair.test.ts b/src/entities/pair.test.ts index ccc45bc4a..ba397e773 100644 --- a/src/entities/pair.test.ts +++ b/src/entities/pair.test.ts @@ -1,7 +1,8 @@ +import { BigNumber } from '@ethersproject/bignumber' import { ChainId, CurrencyAmount, Price, Token, WETH9 } from '@uniswap/sdk-core' +import { FACTORY_ADDRESS } from '../constants' import { InsufficientInputAmountError } from '../errors' import { computePairAddress, Pair } from './pair' -import { BigNumber } from '@ethersproject/bignumber' describe('computePairAddress', () => { it('should correctly compute the pool address', () => { @@ -42,6 +43,9 @@ describe('Pair', () => { const USDC = new Token(1, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 18, 'USDC', 'USD Coin') const DAI = new Token(1, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'DAI Stablecoin') + const USDC_SEPOLIA = new Token(11155111, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 18, 'USDC', 'USD Coin') + const DAI_SEPOLIA = new Token(11155111, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'DAI Stablecoin') + describe('constructor', () => { it('cannot be used for tokens on different chains', () => { expect( @@ -54,6 +58,10 @@ describe('Pair', () => { it('returns the correct address', () => { expect(Pair.getAddress(USDC, DAI)).toEqual('0xAE461cA67B15dc8dc81CE7615e0320dA1A9aB8D5') }) + + it('returns the default address for a testnet not in the map', () => { + expect(Pair.getAddress(USDC_SEPOLIA, DAI_SEPOLIA)).toEqual(FACTORY_ADDRESS) + }) }) describe('#token0', () => { diff --git a/src/entities/pair.ts b/src/entities/pair.ts index 1a8a01cb4..708f8b244 100644 --- a/src/entities/pair.ts +++ b/src/entities/pair.ts @@ -1,24 +1,25 @@ -import { BigintIsh, Price, sqrt, Token, CurrencyAmount, Percent } from '@uniswap/sdk-core' -import invariant from 'tiny-invariant' -import JSBI from 'jsbi' -import { pack, keccak256 } from '@ethersproject/solidity' import { getCreate2Address } from '@ethersproject/address' import { BigNumber } from '@ethersproject/bignumber' +import { keccak256, pack } from '@ethersproject/solidity' +import { BigintIsh, CurrencyAmount, Percent, Price, sqrt, Token } from '@uniswap/sdk-core' +import JSBI from 'jsbi' +import invariant from 'tiny-invariant' import { + _1000, + _997, + BASIS_POINTS, + FACTORY_ADDRESS, FACTORY_ADDRESS_MAP, + FIVE, INIT_CODE_HASH, MINIMUM_LIQUIDITY, - FIVE, - _997, - _1000, ONE, - ZERO, - BASIS_POINTS, ONE_HUNDRED_PERCENT, + ZERO, ZERO_PERCENT } from '../constants' -import { InsufficientReservesError, InsufficientInputAmountError } from '../errors' +import { InsufficientInputAmountError, InsufficientReservesError } from '../errors' export const computePairAddress = ({ factoryAddress, @@ -41,7 +42,8 @@ export class Pair { private readonly tokenAmounts: [CurrencyAmount, CurrencyAmount] public static getAddress(tokenA: Token, tokenB: Token): string { - return computePairAddress({ factoryAddress: FACTORY_ADDRESS_MAP[tokenA.chainId], tokenA, tokenB }) + const factoryAddress = FACTORY_ADDRESS_MAP[tokenA.chainId] ?? FACTORY_ADDRESS + return computePairAddress({ factoryAddress, tokenA, tokenB }) } public constructor(currencyAmountA: CurrencyAmount, tokenAmountB: CurrencyAmount) {