@razorlabs/amm-sdk
Version:
🛠An SDK for building applications on top of RazorDEX.
1 lines • 63.6 kB
Source Map (JSON)
{"version":3,"sources":["../src/constants.ts","../src/trade.ts","../src/move.ts","../src/entities/pair.ts","../src/fetcher.ts","../src/entities/route.ts","../src/entities/trade.ts","../src/entities/native.ts","../src/router.ts"],"names":["invariant","AccountAddress","Token","ChainId","CurrencyAmount","output","Price","ZERO","ONE","NativeCurrency","TradeType"],"mappings":"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","file":"index.mjs","sourcesContent":["import { AccountAddress } from '@aptos-labs/ts-sdk'\nimport { ChainId, Percent, Token } from '@razorlabs/swap-sdk-core'\n\nexport const ZERO_PERCENT = new Percent('0')\nexport const ONE_HUNDRED_PERCENT = new Percent('1')\n\nexport const AMM_MODULE_ADDRESS = '0xc4e68f29fa608d2630d11513c8de731b09a975f2f75ea945160491b9bfd36992'\n\nexport const AMM_SIGNER = '0xf317511756cb5bd755a7456ad900974645788926742b39d81771e17cd54b1c80'\n\nexport const FACTORY_ADDRESS = `${AMM_MODULE_ADDRESS}::amm_factory`\n\nexport const FACTORY_ADDRESS_MAP = {\n [ChainId.BARDOCK_TESTNET]: FACTORY_ADDRESS,\n [ChainId.MAINNET]: FACTORY_ADDRESS,\n}\n\nexport const WMOVE = {\n [ChainId.BARDOCK_TESTNET]: new Token(\n ChainId.BARDOCK_TESTNET,\n AccountAddress.A.toStringLong(),\n 8,\n 'MOVE',\n 'Move Coin',\n 'https://movementlabs.xyz',\n ),\n [ChainId.MAINNET]: new Token(\n ChainId.MAINNET,\n AccountAddress.A.toStringLong(),\n 8,\n 'MOVE',\n 'Move Coin',\n 'https://movementlabs.xyz',\n ),\n}\n\nexport const WNATIVE: Record<number, Token> = {\n [ChainId.BARDOCK_TESTNET]: WMOVE[ChainId.BARDOCK_TESTNET],\n [ChainId.MAINNET]: WMOVE[ChainId.MAINNET],\n}\n\nexport const NATIVE: Record<\n number,\n {\n name: string\n symbol: string\n decimals: number\n }\n> = {\n [ChainId.BARDOCK_TESTNET]: {\n name: 'Move Coin',\n symbol: 'MOVE',\n decimals: 8,\n },\n [ChainId.MAINNET]: {\n name: 'Move Coin',\n symbol: 'MOVE',\n decimals: 8,\n },\n}\n","import { Currency, Percent, TradeType } from '@razorlabs/swap-sdk-core'\nimport { Trade } from './entities/trade'\nimport { ONE_HUNDRED_PERCENT, ZERO_PERCENT } from './constants'\n\n// returns whether tradeB is better than tradeA by at least a threshold percentage amount\nexport function isTradeBetter(\n tradeA: Trade<Currency, Currency, TradeType> | undefined | null,\n tradeB: Trade<Currency, Currency, TradeType> | undefined | null,\n minimumDelta: Percent = ZERO_PERCENT,\n): boolean | undefined {\n if (tradeA && !tradeB) return false\n if (tradeB && !tradeA) return true\n if (!tradeA || !tradeB) return undefined\n\n if (\n tradeA.tradeType !== tradeB.tradeType ||\n !tradeA.inputAmount.currency.equals(tradeB.inputAmount.currency) ||\n !tradeA.outputAmount.currency.equals(tradeB.outputAmount.currency)\n ) {\n throw new Error('Trades are not comparable')\n }\n\n if (minimumDelta.equalTo(ZERO_PERCENT)) {\n return tradeA.executionPrice.lessThan(tradeB.executionPrice)\n }\n return tradeA.executionPrice.asFraction\n .multiply(minimumDelta.add(ONE_HUNDRED_PERCENT))\n .lessThan(tradeB.executionPrice)\n}\n\nexport default isTradeBetter\n","import invariant from 'tiny-invariant'\nimport { ChainId, Currency, NativeCurrency, Token } from '@razorlabs/swap-sdk-core'\n\nimport { WMOVE } from './constants'\n\n/**\n * Move is the main usage of a 'native' currency, i.e. for Movement mainnet and all testnets\n */\nexport class Move extends NativeCurrency {\n protected constructor(chainId: number) {\n super(chainId, 8, 'MOVE', 'Move Coin')\n }\n\n public get wrapped(): Token {\n const wmove = WMOVE[this.chainId as ChainId.MAINNET |ChainId.BARDOCK_TESTNET]\n\n invariant(!!wmove, 'WRAPPED')\n\n return wmove\n }\n\n private static _moveCache: { [chainId: number]: Move } = {}\n\n public static onChain(chainId: number): Move {\n if (!this._moveCache[chainId]) {\n this._moveCache[chainId] = new Move(chainId)\n }\n\n return this._moveCache[chainId]\n }\n\n public equals(other: Currency): boolean {\n return other.isNative && other.chainId === this.chainId\n }\n}\n","import {\n InsufficientInputAmountError,\n InsufficientReservesError,\n sqrt,\n CurrencyAmount,\n Price,\n FIVE,\n ONE,\n ZERO,\n _10000,\n _9975,\n BigintIsh,\n MINIMUM_LIQUIDITY,\n Token,\n} from '@razorlabs/swap-sdk-core'\nimport invariant from 'tiny-invariant'\n\nimport { AMM_SIGNER } from '../constants'\nimport { AccountAddress, createObjectAddress, Hex } from '@aptos-labs/ts-sdk'\n\nconst getPairSeed = (token0: Token, token1: Token): string => {\n const validatedToken0Address = AccountAddress.from(token0.address).toStringLong()\n const validatedToken1Address = AccountAddress.from(token1.address).toStringLong()\n if (token0.sortsBefore(token1)) {\n return validatedToken0Address + validatedToken1Address.slice(2)\n } else {\n return validatedToken1Address + validatedToken0Address.slice(2)\n }\n}\n\nexport const computePairAddress = ({ tokenA, tokenB }: { tokenA: Token; tokenB: Token }): string => {\n const rawSeed = getPairSeed(tokenA, tokenB)\n const seed = Hex.fromHexInput(rawSeed).toUint8Array()\n const account = AccountAddress.from(AMM_SIGNER)\n const address = createObjectAddress(account, seed)\n\n return address.toString()\n}\n\nexport class Pair {\n public readonly liquidityToken: Token\n\n private readonly tokenAmounts: [CurrencyAmount<Token>, CurrencyAmount<Token>]\n\n public static getAddress(tokenA: Token, tokenB: Token): string {\n return computePairAddress({ tokenA, tokenB })\n }\n\n public constructor(currencyAmountA: CurrencyAmount<Token>, tokenAmountB: CurrencyAmount<Token>) {\n const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) // does safety checks\n ? [currencyAmountA, tokenAmountB]\n : [tokenAmountB, currencyAmountA]\n this.liquidityToken = new Token(\n tokenAmounts[0].currency.chainId,\n Pair.getAddress(tokenAmounts[0].currency, tokenAmounts[1].currency),\n 8,\n 'RAZOR LP',\n `Razor ${tokenAmounts[0].currency.symbol}-${tokenAmounts[1].currency.symbol} LP`,\n )\n this.tokenAmounts = tokenAmounts as [CurrencyAmount<Token>, CurrencyAmount<Token>]\n }\n\n /**\n * Returns true if the token is either token0 or token1\n * @param token to check\n */\n public involvesToken(token: Token): 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<Token, Token> {\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<Token, Token> {\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: Token): Price<Token, Token> {\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(): Token {\n return this.tokenAmounts[0].currency\n }\n\n public get token1(): Token {\n return this.tokenAmounts[1].currency\n }\n\n public get reserve0(): CurrencyAmount<Token> {\n return this.tokenAmounts[0]\n }\n\n public get reserve1(): CurrencyAmount<Token> {\n return this.tokenAmounts[1]\n }\n\n public reserveOf(token: Token): CurrencyAmount<Token> {\n invariant(this.involvesToken(token), 'TOKEN')\n return token.equals(this.token0) ? this.reserve0 : this.reserve1\n }\n\n public getOutputAmount(inputAmount: CurrencyAmount<Token>): [CurrencyAmount<Token>, 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\n public getInputAmount(outputAmount: CurrencyAmount<Token>): [CurrencyAmount<Token>, 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<Token>,\n tokenAmountA: CurrencyAmount<Token>,\n tokenAmountB: CurrencyAmount<Token>,\n ): CurrencyAmount<Token> {\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\n public getLiquidityValue(\n token: Token,\n totalSupply: CurrencyAmount<Token>,\n liquidity: CurrencyAmount<Token>,\n feeOn = false,\n kLast?: BigintIsh,\n ): CurrencyAmount<Token> {\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<Token>\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 { Pair } from './entities/pair'\nimport invariant from 'tiny-invariant'\nimport { AMM_MODULE_ADDRESS } from './constants'\nimport { Aptos, AptosConfig, InputViewFunctionData } from '@aptos-labs/ts-sdk'\nimport { ChainId, CurrencyAmount, Token } from '@razorlabs/swap-sdk-core'\n\nexport function getNetworkRPCUrl(chainId: ChainId) {\n switch (chainId) {\n case ChainId.BARDOCK_TESTNET:\n return 'https://rpc.sentio.xyz/movement-testnet/v1'\n default:\n return 'https://rpc.sentio.xyz/movement/v1'\n }\n}\n\nexport function getNetworkIndexerUrl(chainId: ChainId) {\n switch (chainId) {\n case ChainId.BARDOCK_TESTNET:\n return 'https://rpc.sentio.xyz/movement-testnet-indexer/v1/graphql'\n default:\n return 'https://rpc.sentio.xyz/movement-indexer/v1/graphql'\n }\n}\n\nexport function getDefaultProvider(chainId: ChainId) {\n const config = new AptosConfig({\n fullnode: getNetworkRPCUrl(chainId),\n indexer: getNetworkIndexerUrl(chainId),\n })\n const provider = new Aptos(config)\n return provider\n}\n\nexport const getReserves = (pairAddress: string): InputViewFunctionData => {\n return {\n typeArguments: [],\n functionArguments: [pairAddress],\n function: `${AMM_MODULE_ADDRESS}::amm_pair::get_reserves`,\n }\n}\n\nlet TOKEN_DECIMALS_CACHE: { [chainId: number]: { [address: string]: number } } = {\n [ChainId.BARDOCK_TESTNET]: {},\n}\n\n/**\n * Contains methods for constructing instances of pairs and tokens from on-chain data.\n */\nexport abstract class Fetcher {\n /**\n * Cannot be constructed.\n */\n private constructor() {}\n\n /**\n * Fetch information for a given token on the given chain, using the given provider.\n * @param chainId chain of the token\n * @param address address of the token on the chain\n * @param provider provider used to fetch the token\n * @param symbol optional symbol of the token\n * @param name optional name of the token\n */\n public static async fetchTokenData(\n chainId: ChainId,\n address: string,\n provider = getDefaultProvider(chainId),\n symbol: string,\n name?: string,\n ): Promise<Token> {\n const parsedDecimals =\n typeof TOKEN_DECIMALS_CACHE?.[chainId]?.[address] === 'number'\n ? TOKEN_DECIMALS_CACHE[chainId][address]\n : await provider.fungibleAsset\n .getFungibleAssetMetadataByAssetType({ assetType: address })\n .then(({ decimals }) => {\n TOKEN_DECIMALS_CACHE = {\n ...TOKEN_DECIMALS_CACHE,\n [chainId]: {\n ...TOKEN_DECIMALS_CACHE?.[chainId],\n [address]: decimals,\n },\n }\n return decimals\n })\n return new Token(chainId, address, parsedDecimals, symbol, name)\n }\n\n /**\n * Fetches information about a pair and constructs a pair from the given two tokens.\n * @param tokenA first token\n * @param tokenB second token\n * @param provider the provider to use to fetch the data\n */\n public static async fetchPairData(\n tokenA: Token,\n tokenB: Token,\n provider = getDefaultProvider(tokenA.chainId),\n ): Promise<Pair> {\n invariant(tokenA.chainId === tokenB.chainId, 'CHAIN_ID')\n const address = Pair.getAddress(tokenA, tokenB)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [reserves0, reserves1, _] = await provider.view({\n payload: getReserves(address),\n })\n const balances = tokenA.sortsBefore(tokenB) ? [reserves0, reserves1] : [reserves1, reserves0]\n return new Pair(\n CurrencyAmount.fromRawAmount(tokenA, balances[0] as string),\n CurrencyAmount.fromRawAmount(tokenB, balances[1] as string),\n )\n }\n}\n","import invariant from 'tiny-invariant'\nimport { Token, Currency, Price } from '@razorlabs/swap-sdk-core'\n\nimport { Pair } from './pair'\n\nexport class Route<TInput extends Currency, TOutput extends Currency> {\n public readonly pairs: Pair[]\n public readonly path: Token[]\n public readonly input: TInput\n public readonly output: TOutput\n\n public constructor(pairs: Pair[], input: TInput, output: TOutput) {\n invariant(pairs.length > 0, 'PAIRS')\n const chainId: number = pairs[0].chainId\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 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 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 '@razorlabs/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 /**\n * Get the minimum amount that must be received from this trade for the given slippage tolerance\n * @param slippageTolerance tolerance of unfavorable slippage from the execution pric