@pancakeswap/v2-sdk
Version:
An SDK for Pancakeswap V2
1 lines • 82.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/constants.ts","../src/entities/pair.ts","../src/entities/route.ts","../src/entities/trade.ts","../src/abis/IPancakePair.ts","../src/router.ts","../src/fetcher.ts","../src/trade.ts"],"names":["ChainId","invariant","Price","output","ONE","ZERO","CurrencyAmount","TradeType","Token"],"mappings":"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","sourcesContent":["import { ChainId } from '@pancakeswap/chains'\nimport type { Address, Hash } from 'viem'\n\nexport const FACTORY_ADDRESS = '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73'\n\nconst FACTORY_ADDRESS_ETH = '0x1097053Fd2ea711dad45caCcc45EfF7548fCB362'\n\nexport const FACTORY_ADDRESS_MAP = {\n [ChainId.ETHEREUM]: FACTORY_ADDRESS_ETH,\n [ChainId.GOERLI]: FACTORY_ADDRESS_ETH,\n [ChainId.BSC]: FACTORY_ADDRESS,\n [ChainId.BSC_TESTNET]: '0x6725F303b657a9451d8BA641348b6761A6CC7a17',\n [ChainId.ARBITRUM_ONE]: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E',\n [ChainId.ARBITRUM_GOERLI]: '0x333EAE459075b1d7dE8eb57997b5d4eee5F1070a',\n [ChainId.POLYGON_ZKEVM]: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E',\n [ChainId.POLYGON_ZKEVM_TESTNET]: '0xBA40c83026213F9cbc79998752721a0312bdB74a',\n [ChainId.ZKSYNC]: '0xd03D8D566183F0086d8D09A84E1e30b58Dd5619d',\n [ChainId.ZKSYNC_TESTNET]: '0x48a33610Cd0E130af2024D55F67aE72a8C51aC27',\n [ChainId.LINEA]: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E',\n [ChainId.LINEA_TESTNET]: '0xB6FAfd4ADbCd21cF665909767e0eD0D05709abfB',\n [ChainId.OPBNB]: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E',\n [ChainId.OPBNB_TESTNET]: '0x776e4bD2f72de2176A59465e316335aaf8ed4E8F',\n [ChainId.BASE]: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E',\n [ChainId.BASE_TESTNET]: '0x715303D2eF7dA7FFAbF637651D71FD11d41fAf7F',\n [ChainId.SCROLL_SEPOLIA]: '0x2B3C5df29F73dbF028BA82C33e0A5A6e5800F75e',\n [ChainId.SEPOLIA]: '0x1bdc540dEB9Ed1fA29964DeEcCc524A8f5e2198e',\n [ChainId.ARBITRUM_SEPOLIA]: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E',\n [ChainId.BASE_SEPOLIA]: '0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E',\n [ChainId.MONAD_TESTNET]: '0x82438CE666d9403e488bA720c7424434e8Aa47CD',\n} as const satisfies Record<ChainId, Address>\n\nexport const INIT_CODE_HASH = '0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5'\n\nconst INIT_CODE_HASH_ETH = '0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d'\nexport const INIT_CODE_HASH_MAP = {\n [ChainId.ETHEREUM]: INIT_CODE_HASH_ETH,\n [ChainId.GOERLI]: INIT_CODE_HASH_ETH,\n [ChainId.BSC]: INIT_CODE_HASH,\n [ChainId.BSC_TESTNET]: '0xd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66',\n [ChainId.ARBITRUM_ONE]: INIT_CODE_HASH_ETH,\n [ChainId.ARBITRUM_GOERLI]: INIT_CODE_HASH_ETH,\n [ChainId.POLYGON_ZKEVM]: INIT_CODE_HASH_ETH,\n [ChainId.POLYGON_ZKEVM_TESTNET]: INIT_CODE_HASH_ETH,\n [ChainId.ZKSYNC]: '0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43',\n [ChainId.ZKSYNC_TESTNET]: '0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43',\n [ChainId.LINEA]: INIT_CODE_HASH_ETH,\n [ChainId.LINEA_TESTNET]: INIT_CODE_HASH_ETH,\n [ChainId.OPBNB]: INIT_CODE_HASH_ETH,\n [ChainId.OPBNB_TESTNET]: INIT_CODE_HASH_ETH,\n [ChainId.BASE]: INIT_CODE_HASH_ETH,\n [ChainId.BASE_TESTNET]: '0xa5934690703a592a07e841ca29d5e5c79b5e22ed4749057bb216dc31100be1c0',\n [ChainId.SCROLL_SEPOLIA]: INIT_CODE_HASH_ETH,\n [ChainId.SEPOLIA]: INIT_CODE_HASH_ETH,\n [ChainId.ARBITRUM_SEPOLIA]: INIT_CODE_HASH_ETH,\n [ChainId.BASE_SEPOLIA]: INIT_CODE_HASH_ETH,\n [ChainId.MONAD_TESTNET]: '0xa5934690703a592a07e841ca29d5e5c79b5e22ed4749057bb216dc31100be1c0',\n} as const satisfies Record<ChainId, Hash>\n","import { ChainId } from '@pancakeswap/chains'\nimport {\n _10000,\n _9975,\n BigintIsh,\n CurrencyAmount,\n FIVE,\n InsufficientInputAmountError,\n InsufficientReservesError,\n MINIMUM_LIQUIDITY,\n ONE,\n Price,\n sqrt,\n ZERO,\n} from '@pancakeswap/swap-sdk-core'\nimport { ERC20Token } from '@pancakeswap/swap-sdk-evm'\nimport invariant from 'tiny-invariant'\nimport {\n Address,\n ByteArray,\n concat,\n encodePacked,\n getAddress,\n GetCreate2AddressOptions,\n Hex,\n isBytes,\n keccak256,\n pad,\n slice,\n toBytes,\n} from 'viem'\n\nimport { FACTORY_ADDRESS_MAP, INIT_CODE_HASH_MAP } from '../constants'\n\nlet PAIR_ADDRESS_CACHE: { [key: string]: Address } = {}\n\nconst composeKey = (token0: ERC20Token, token1: ERC20Token) => `${token0.chainId}-${token0.address}-${token1.address}`\n\nfunction getCreate2Address(\n from_: GetCreate2AddressOptions['from'],\n salt_: GetCreate2AddressOptions['salt'],\n initCodeHash: Hex,\n) {\n const from = toBytes(getAddress(from_))\n const salt = pad(isBytes(salt_) ? salt_ : toBytes(salt_ as Hex), {\n size: 32,\n }) as ByteArray\n\n return getAddress(slice(keccak256(concat([toBytes('0xff'), from, salt, toBytes(initCodeHash)])), 12))\n}\n\nconst EMPTY_INPU_HASH = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'\nconst ZKSYNC_PREFIX = '0x2020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494' // keccak256('zksyncCreate2')\n\nfunction getCreate2AddressZkSync(from: Address, salt: `0x${string}`, initCodeHash: `0x${string}`): `0x${string}` {\n return getAddress(\n `0x${keccak256(concat([ZKSYNC_PREFIX, pad(from, { size: 32 }), salt, initCodeHash, EMPTY_INPU_HASH])).slice(26)}`,\n )\n}\n\nexport const computePairAddress = ({\n factoryAddress,\n tokenA,\n tokenB,\n}: {\n factoryAddress: Address\n tokenA: ERC20Token\n tokenB: ERC20Token\n}): Address => {\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA] // does safety checks\n const key = composeKey(token0, token1)\n\n if (PAIR_ADDRESS_CACHE?.[key] === undefined) {\n const getCreate2Address_ =\n token0.chainId === ChainId.ZKSYNC_TESTNET || token1.chainId === ChainId.ZKSYNC\n ? getCreate2AddressZkSync\n : getCreate2Address\n PAIR_ADDRESS_CACHE = {\n ...PAIR_ADDRESS_CACHE,\n [key]: getCreate2Address_(\n factoryAddress,\n keccak256(encodePacked(['address', 'address'], [token0.address, token1.address])),\n INIT_CODE_HASH_MAP[token0.chainId as keyof typeof INIT_CODE_HASH_MAP],\n ),\n }\n }\n\n return PAIR_ADDRESS_CACHE[key]\n}\n\nexport class Pair {\n public readonly liquidityToken: ERC20Token\n\n private readonly tokenAmounts: [CurrencyAmount<ERC20Token>, CurrencyAmount<ERC20Token>]\n\n public static getAddress(tokenA: ERC20Token, tokenB: ERC20Token): Address {\n return computePairAddress({\n factoryAddress: FACTORY_ADDRESS_MAP[tokenA.chainId as keyof typeof FACTORY_ADDRESS_MAP],\n tokenA,\n tokenB,\n })\n }\n\n public constructor(currencyAmountA: CurrencyAmount<ERC20Token>, tokenAmountB: CurrencyAmount<ERC20Token>) {\n const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) // does safety checks\n ? [currencyAmountA, tokenAmountB]\n : [tokenAmountB, currencyAmountA]\n this.liquidityToken = new ERC20Token(\n tokenAmounts[0].currency.chainId,\n Pair.getAddress(tokenAmounts[0].currency, tokenAmounts[1].currency),\n 18,\n 'Cake-LP',\n 'Pancake LPs',\n )\n this.tokenAmounts = tokenAmounts as [CurrencyAmount<ERC20Token>, CurrencyAmount<ERC20Token>]\n }\n\n /**\n * Returns true if the token is either token0 or token1\n * @param token to check\n */\n public involvesToken(token: ERC20Token): boolean {\n return token.equals(this.token0) || token.equals(this.token1)\n }\n\n /**\n * Returns the current mid price of the pair in terms of token0, i.e. the ratio of reserve1 to reserve0\n */\n public get token0Price(): Price<ERC20Token, ERC20Token> {\n const result = this.tokenAmounts[1].divide(this.tokenAmounts[0])\n return new Price(this.token0, this.token1, result.denominator, result.numerator)\n }\n\n /**\n * Returns the current mid price of the pair in terms of token1, i.e. the ratio of reserve0 to reserve1\n */\n public get token1Price(): Price<ERC20Token, ERC20Token> {\n const result = this.tokenAmounts[0].divide(this.tokenAmounts[1])\n return new Price(this.token1, this.token0, result.denominator, result.numerator)\n }\n\n /**\n * Return the price of the given token in terms of the other token in the pair.\n * @param token token to return price of\n */\n public priceOf(token: ERC20Token): Price<ERC20Token, ERC20Token> {\n invariant(this.involvesToken(token), 'TOKEN')\n return token.equals(this.token0) ? this.token0Price : this.token1Price\n }\n\n /**\n * Returns the chain ID of the tokens in the pair.\n */\n public get chainId(): number {\n return this.token0.chainId\n }\n\n public get token0(): ERC20Token {\n return this.tokenAmounts[0].currency\n }\n\n public get token1(): ERC20Token {\n return this.tokenAmounts[1].currency\n }\n\n public get reserve0(): CurrencyAmount<ERC20Token> {\n return this.tokenAmounts[0]\n }\n\n public get reserve1(): CurrencyAmount<ERC20Token> {\n return this.tokenAmounts[1]\n }\n\n public reserveOf(token: ERC20Token): CurrencyAmount<ERC20Token> {\n invariant(this.involvesToken(token), 'TOKEN')\n return token.equals(this.token0) ? this.reserve0 : this.reserve1\n }\n\n public getOutputAmount(inputAmount: CurrencyAmount<ERC20Token>): [CurrencyAmount<ERC20Token>, Pair] {\n invariant(this.involvesToken(inputAmount.currency), 'TOKEN')\n if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO) {\n throw new InsufficientReservesError()\n }\n const inputReserve = this.reserveOf(inputAmount.currency)\n const outputReserve = this.reserveOf(inputAmount.currency.equals(this.token0) ? this.token1 : this.token0)\n const inputAmountWithFee = inputAmount.quotient * _9975\n const numerator = inputAmountWithFee * outputReserve.quotient\n const denominator = inputReserve.quotient * _10000 + inputAmountWithFee\n const outputAmount = CurrencyAmount.fromRawAmount(\n inputAmount.currency.equals(this.token0) ? this.token1 : this.token0,\n numerator / denominator,\n )\n if (outputAmount.quotient === ZERO) {\n throw new InsufficientInputAmountError()\n }\n return [outputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))]\n }\n\n public getInputAmount(outputAmount: CurrencyAmount<ERC20Token>): [CurrencyAmount<ERC20Token>, Pair] {\n invariant(this.involvesToken(outputAmount.currency), 'TOKEN')\n if (\n this.reserve0.quotient === ZERO ||\n this.reserve1.quotient === ZERO ||\n outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient\n ) {\n throw new InsufficientReservesError()\n }\n\n const outputReserve = this.reserveOf(outputAmount.currency)\n const inputReserve = this.reserveOf(outputAmount.currency.equals(this.token0) ? this.token1 : this.token0)\n const numerator = inputReserve.quotient * outputAmount.quotient * _10000\n const denominator = (outputReserve.quotient - outputAmount.quotient) * _9975\n const inputAmount = CurrencyAmount.fromRawAmount(\n outputAmount.currency.equals(this.token0) ? this.token1 : this.token0,\n numerator / denominator + ONE,\n )\n return [inputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))]\n }\n\n public getLiquidityMinted(\n totalSupply: CurrencyAmount<ERC20Token>,\n tokenAmountA: CurrencyAmount<ERC20Token>,\n tokenAmountB: CurrencyAmount<ERC20Token>,\n ): CurrencyAmount<ERC20Token> {\n invariant(totalSupply.currency.equals(this.liquidityToken), 'LIQUIDITY')\n const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) // does safety checks\n ? [tokenAmountA, tokenAmountB]\n : [tokenAmountB, tokenAmountA]\n invariant(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), 'TOKEN')\n\n let liquidity: bigint\n if (totalSupply.quotient === ZERO) {\n liquidity = sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - MINIMUM_LIQUIDITY\n } else {\n const amount0 = (tokenAmounts[0].quotient * totalSupply.quotient) / this.reserve0.quotient\n const amount1 = (tokenAmounts[1].quotient * totalSupply.quotient) / this.reserve1.quotient\n liquidity = amount0 <= amount1 ? amount0 : amount1\n }\n if (!(liquidity > ZERO)) {\n throw new InsufficientInputAmountError()\n }\n return CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity)\n }\n\n public getLiquidityValue(\n token: ERC20Token,\n totalSupply: CurrencyAmount<ERC20Token>,\n liquidity: CurrencyAmount<ERC20Token>,\n feeOn = false,\n kLast?: BigintIsh,\n ): CurrencyAmount<ERC20Token> {\n invariant(this.involvesToken(token), 'TOKEN')\n invariant(totalSupply.currency.equals(this.liquidityToken), 'TOTAL_SUPPLY')\n invariant(liquidity.currency.equals(this.liquidityToken), 'LIQUIDITY')\n invariant(liquidity.quotient <= totalSupply.quotient, 'LIQUIDITY')\n\n let totalSupplyAdjusted: CurrencyAmount<ERC20Token>\n if (!feeOn) {\n totalSupplyAdjusted = totalSupply\n } else {\n invariant(!!kLast, 'K_LAST')\n const kLastParsed = BigInt(kLast)\n if (!(kLastParsed === ZERO)) {\n const rootK = sqrt(this.reserve0.quotient * this.reserve1.quotient)\n const rootKLast = sqrt(kLastParsed)\n if (rootK > rootKLast) {\n const numerator = totalSupply.quotient * (rootK - rootKLast)\n const denominator = rootK * FIVE + rootKLast\n const feeLiquidity = numerator / denominator\n totalSupplyAdjusted = totalSupply.add(CurrencyAmount.fromRawAmount(this.liquidityToken, feeLiquidity))\n } else {\n totalSupplyAdjusted = totalSupply\n }\n } else {\n totalSupplyAdjusted = totalSupply\n }\n }\n\n if (totalSupply.equalTo(0)) {\n return CurrencyAmount.fromRawAmount(token, 0)\n }\n\n return CurrencyAmount.fromRawAmount(\n token,\n (liquidity.quotient * this.reserveOf(token).quotient) / totalSupplyAdjusted.quotient,\n )\n }\n}\n","import invariant from 'tiny-invariant'\nimport { Token, Currency, Price } from '@pancakeswap/swap-sdk-core'\n\nimport { Pair } from './pair'\n\nexport class Route<TInput extends Currency, TOutput extends Currency> {\n public readonly pairs: Pair[]\n\n public readonly path: Token[]\n\n public readonly input: TInput\n\n public readonly output: TOutput\n\n public constructor(pairs: Pair[], input: TInput, output: TOutput) {\n invariant(pairs.length > 0, 'PAIRS')\n const { chainId } = pairs[0]\n invariant(\n pairs.every((pair) => pair.chainId === chainId),\n 'CHAIN_IDS',\n )\n\n const wrappedInput = input.wrapped\n invariant(pairs[0].involvesToken(wrappedInput), 'INPUT')\n invariant(typeof output === 'undefined' || pairs[pairs.length - 1].involvesToken(output.wrapped), 'OUTPUT')\n\n const path: Token[] = [wrappedInput]\n for (const [i, pair] of pairs.entries()) {\n const currentInput = path[i]\n invariant(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), 'PATH')\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const output = currentInput.equals(pair.token0) ? pair.token1 : pair.token0\n path.push(output)\n }\n\n this.pairs = pairs\n this.path = path\n this.input = input\n this.output = output\n }\n\n private _midPrice: Price<TInput, TOutput> | null = null\n\n public get midPrice(): Price<TInput, TOutput> {\n if (this._midPrice !== null) return this._midPrice\n const prices: Price<Currency, Currency>[] = []\n for (const [i, pair] of this.pairs.entries()) {\n prices.push(\n this.path[i].equals(pair.token0)\n ? new Price(pair.reserve0.currency, pair.reserve1.currency, pair.reserve0.quotient, pair.reserve1.quotient)\n : new Price(pair.reserve1.currency, pair.reserve0.currency, pair.reserve1.quotient, pair.reserve0.quotient),\n )\n }\n const reduced = prices.slice(1).reduce((accumulator, currentValue) => accumulator.multiply(currentValue), prices[0])\n // eslint-disable-next-line no-return-assign\n return (this._midPrice = new Price(this.input, this.output, reduced.denominator, reduced.numerator))\n }\n\n public get chainId(): number {\n return this.pairs[0].chainId\n }\n}\n","import invariant from 'tiny-invariant'\nimport {\n InsufficientInputAmountError,\n InsufficientReservesError,\n ONE,\n TradeType,\n ZERO,\n CurrencyAmount,\n Currency,\n Fraction,\n Percent,\n Price,\n Token,\n sortedInsert,\n computePriceImpact,\n} from '@pancakeswap/swap-sdk-core'\n\nimport { Pair } from './pair'\nimport { Route } from './route'\n\n// minimal interface so the input output comparator may be shared across types\ninterface InputOutput<TInput extends Currency, TOutput extends Currency> {\n readonly inputAmount: CurrencyAmount<TInput>\n readonly outputAmount: CurrencyAmount<TOutput>\n}\n\n// comparator function that allows sorting trades by their output amounts, in decreasing order, and then input amounts\n// in increasing order. i.e. the best trades have the most outputs for the least inputs and are sorted first\nexport function inputOutputComparator<TInput extends Currency, TOutput extends Currency>(\n a: InputOutput<TInput, TOutput>,\n b: InputOutput<TInput, TOutput>,\n): number {\n // must have same input and output token for comparison\n invariant(a.inputAmount.currency.equals(b.inputAmount.currency), 'INPUT_CURRENCY')\n invariant(a.outputAmount.currency.equals(b.outputAmount.currency), 'OUTPUT_CURRENCY')\n if (a.outputAmount.equalTo(b.outputAmount)) {\n if (a.inputAmount.equalTo(b.inputAmount)) {\n return 0\n }\n // trade A requires less input than trade B, so A should come first\n if (a.inputAmount.lessThan(b.inputAmount)) {\n return -1\n }\n return 1\n }\n // tradeA has less output than trade B, so should come second\n if (a.outputAmount.lessThan(b.outputAmount)) {\n return 1\n }\n return -1\n}\n\n// extension of the input output comparator that also considers other dimensions of the trade in ranking them\nexport function tradeComparator<TInput extends Currency, TOutput extends Currency, TTradeType extends TradeType>(\n a: Trade<TInput, TOutput, TTradeType>,\n b: Trade<TInput, TOutput, TTradeType>,\n) {\n const ioComp = inputOutputComparator(a, b)\n if (ioComp !== 0) {\n return ioComp\n }\n\n // consider lowest slippage next, since these are less likely to fail\n if (a.priceImpact.lessThan(b.priceImpact)) {\n return -1\n }\n if (a.priceImpact.greaterThan(b.priceImpact)) {\n return 1\n }\n\n // finally consider the number of hops since each hop costs gas\n return a.route.path.length - b.route.path.length\n}\n\nexport interface BestTradeOptions {\n // how many results to return\n maxNumResults?: number\n // the maximum number of hops a trade should contain\n maxHops?: number\n}\n\n/**\n * Represents a trade executed against a list of pairs.\n * Does not account for slippage, i.e. trades that front run this trade and move the price.\n */\nexport class Trade<TInput extends Currency, TOutput extends Currency, TTradeType extends TradeType> {\n /**\n * The route of the trade, i.e. which pairs the trade goes through and the input/output currencies.\n */\n public readonly route: Route<TInput, TOutput>\n\n /**\n * The type of the trade, either exact in or exact out.\n */\n public readonly tradeType: TTradeType\n\n /**\n * The input amount for the trade assuming no slippage.\n */\n public readonly inputAmount: CurrencyAmount<TInput>\n\n /**\n * The output amount for the trade assuming no slippage.\n */\n public readonly outputAmount: CurrencyAmount<TOutput>\n\n /**\n * The price expressed in terms of output amount/input amount.\n */\n public readonly executionPrice: Price<TInput, TOutput>\n\n /**\n * The percent difference between the mid price before the trade and the trade execution price.\n */\n public readonly priceImpact: Percent\n\n /**\n * Constructs an exact in trade with the given amount in and route\n * @param route route of the exact in trade\n * @param amountIn the amount being passed in\n */\n public static exactIn<TInput extends Currency, TOutput extends Currency>(\n route: Route<TInput, TOutput>,\n amountIn: CurrencyAmount<TInput>,\n ): Trade<TInput, TOutput, TradeType.EXACT_INPUT> {\n return new Trade(route, amountIn, TradeType.EXACT_INPUT)\n }\n\n /**\n * Constructs an exact out trade with the given amount out and route\n * @param route route of the exact out trade\n * @param amountOut the amount returned by the trade\n */\n public static exactOut<TInput extends Currency, TOutput extends Currency>(\n route: Route<TInput, TOutput>,\n amountOut: CurrencyAmount<TOutput>,\n ): Trade<TInput, TOutput, TradeType.EXACT_OUTPUT> {\n return new Trade(route, amountOut, TradeType.EXACT_OUTPUT)\n }\n\n public constructor(\n route: Route<TInput, TOutput>,\n amount: TTradeType extends TradeType.EXACT_INPUT ? CurrencyAmount<TInput> : CurrencyAmount<TOutput>,\n tradeType: TTradeType,\n ) {\n this.route = route\n this.tradeType = tradeType\n\n const tokenAmounts: CurrencyAmount<Token>[] = new Array(route.path.length)\n if (tradeType === TradeType.EXACT_INPUT) {\n invariant(amount.currency.equals(route.input), 'INPUT')\n tokenAmounts[0] = amount.wrapped\n for (let i = 0; i < route.path.length - 1; i++) {\n const pair = route.pairs[i]\n const [outputAmount] = pair.getOutputAmount(tokenAmounts[i])\n tokenAmounts[i + 1] = outputAmount\n }\n this.inputAmount = CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator)\n this.outputAmount = CurrencyAmount.fromFractionalAmount(\n route.output,\n tokenAmounts[tokenAmounts.length - 1].numerator,\n tokenAmounts[tokenAmounts.length - 1].denominator,\n )\n } else {\n invariant(amount.currency.equals(route.output), 'OUTPUT')\n tokenAmounts[tokenAmounts.length - 1] = amount.wrapped\n for (let i = route.path.length - 1; i > 0; i--) {\n const pair = route.pairs[i - 1]\n const [inputAmount] = pair.getInputAmount(tokenAmounts[i])\n tokenAmounts[i - 1] = inputAmount\n }\n this.inputAmount = CurrencyAmount.fromFractionalAmount(\n route.input,\n tokenAmounts[0].numerator,\n tokenAmounts[0].denominator,\n )\n this.outputAmount = CurrencyAmount.fromFractionalAmount(route.output, amount.numerator, amount.denominator)\n }\n this.executionPrice = new Price(\n this.inputAmount.currency,\n this.outputAmount.currency,\n this.inputAmount.quotient,\n this.outputAmount.quotient,\n )\n this.priceImpact = computePriceImpact(route.midPrice, this.inputAmount, this.outputAmount)\n }\n\n