@ring-protocol/smart-order-router 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/build/main/index.js.map +1 -0
  2. package/build/main/providers/cache-node.js.map +1 -0
  3. package/build/main/providers/cache.js.map +1 -0
  4. package/build/main/providers/caching/route/index.js.map +1 -0
  5. package/build/main/providers/caching/route/model/cache-mode.js.map +1 -0
  6. package/build/main/providers/caching/route/model/cached-route.js.map +1 -0
  7. package/build/main/providers/caching/route/model/cached-routes.js.map +1 -0
  8. package/build/main/providers/caching/route/model/index.js.map +1 -0
  9. package/build/main/providers/caching/route/route-caching-provider.js.map +1 -0
  10. package/build/main/providers/caching-gas-provider.js.map +1 -0
  11. package/build/main/providers/caching-subgraph-provider.js.map +1 -0
  12. package/build/main/providers/caching-token-list-provider.js.map +1 -0
  13. package/build/main/providers/caching-token-provider.js.map +1 -0
  14. package/build/main/providers/eip-1559-gas-price-provider.js.map +1 -0
  15. package/build/main/providers/eth-estimate-gas-provider.js.map +1 -0
  16. package/build/main/providers/eth-gas-station-info-gas-price-provider.js.map +1 -0
  17. package/build/main/providers/fewV2/ring-caching-pool-provider.js.map +1 -0
  18. package/build/main/providers/fewV2/ring-caching-subgraph-provider.js.map +1 -0
  19. package/build/main/providers/fewV2/ring-pool-provider.js.map +1 -0
  20. package/build/main/providers/fewV2/ring-quote-provider.js.map +1 -0
  21. package/build/main/providers/fewV2/ring-static-subgraph-provider.js.map +1 -0
  22. package/build/main/providers/fewV2/ring-subgraph-provider-with-fallback.js.map +1 -0
  23. package/build/main/providers/fewV2/ring-subgraph-provider.js.map +1 -0
  24. package/build/main/providers/fewV2/ring-uri-subgraph-provider.js.map +1 -0
  25. package/build/main/providers/gas-price-provider.js.map +1 -0
  26. package/build/main/providers/index.js.map +1 -0
  27. package/build/main/providers/legacy-gas-price-provider.js.map +1 -0
  28. package/build/main/providers/multicall-provider.js.map +1 -0
  29. package/build/main/providers/multicall-ringswap-provider.js.map +1 -0
  30. package/build/main/providers/multicall-uniswap-provider.js.map +1 -0
  31. package/build/main/providers/on-chain-gas-price-provider.js.map +1 -0
  32. package/build/main/providers/on-chain-quote-provider.d.ts +4 -4
  33. package/build/main/providers/on-chain-quote-provider.js +35 -37
  34. package/build/main/providers/on-chain-quote-provider.js.map +1 -0
  35. package/build/main/providers/pool-provider.js.map +1 -0
  36. package/build/main/providers/portion-provider.js.map +1 -0
  37. package/build/main/providers/provider.js.map +1 -0
  38. package/build/main/providers/simulation-provider.js.map +1 -0
  39. package/build/main/providers/static-gas-price-provider.js.map +1 -0
  40. package/build/main/providers/subgraph-provider-with-fallback.js.map +1 -0
  41. package/build/main/providers/subgraph-provider.js.map +1 -0
  42. package/build/main/providers/swap-router-provider.js.map +1 -0
  43. package/build/main/providers/tenderly-simulation-provider.js.map +1 -0
  44. package/build/main/providers/token-fee-fetcher.js.map +1 -0
  45. package/build/main/providers/token-properties-provider.js.map +1 -0
  46. package/build/main/providers/token-provider.js.map +1 -0
  47. package/build/main/providers/token-validator-provider.js.map +1 -0
  48. package/build/main/providers/uri-subgraph-provider.js.map +1 -0
  49. package/build/main/providers/v2/caching-pool-provider.js.map +1 -0
  50. package/build/main/providers/v2/caching-subgraph-provider.js.map +1 -0
  51. package/build/main/providers/v2/pool-provider.js.map +1 -0
  52. package/build/main/providers/v2/quote-provider.js.map +1 -0
  53. package/build/main/providers/v2/static-subgraph-provider.js.map +1 -0
  54. package/build/main/providers/v2/subgraph-provider-with-fallback.js.map +1 -0
  55. package/build/main/providers/v2/subgraph-provider.js.map +1 -0
  56. package/build/main/providers/v2/uri-subgraph-provider.js.map +1 -0
  57. package/build/main/providers/v3/caching-pool-provider.js.map +1 -0
  58. package/build/main/providers/v3/caching-subgraph-provider.js.map +1 -0
  59. package/build/main/providers/v3/gas-data-provider.js.map +1 -0
  60. package/build/main/providers/v3/pool-provider.js.map +1 -0
  61. package/build/main/providers/v3/static-subgraph-provider.js.map +1 -0
  62. package/build/main/providers/v3/subgraph-provider-with-fallback.js.map +1 -0
  63. package/build/main/providers/v3/subgraph-provider.js.map +1 -0
  64. package/build/main/providers/v3/uri-subgraph-provider.js.map +1 -0
  65. package/build/main/providers/v4/caching-pool-provider.js.map +1 -0
  66. package/build/main/providers/v4/caching-subgraph-provider.js.map +1 -0
  67. package/build/main/providers/v4/pool-provider.js.map +1 -0
  68. package/build/main/providers/v4/static-subgraph-provider.js.map +1 -0
  69. package/build/main/providers/v4/subgraph-provider-with-fallback.js.map +1 -0
  70. package/build/main/providers/v4/subgraph-provider.js.map +1 -0
  71. package/build/main/providers/v4/uri-subgraph-provider.js.map +1 -0
  72. package/build/main/routers/alpha-router/alpha-router.d.ts +9 -0
  73. package/build/main/routers/alpha-router/alpha-router.js +4 -1
  74. package/build/main/routers/alpha-router/alpha-router.js.map +1 -0
  75. package/build/main/routers/alpha-router/config.js.map +1 -0
  76. package/build/main/routers/alpha-router/entities/index.js.map +1 -0
  77. package/build/main/routers/alpha-router/entities/route-with-valid-quote.js.map +1 -0
  78. package/build/main/routers/alpha-router/functions/best-swap-route.js.map +1 -0
  79. package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js.map +1 -0
  80. package/build/main/routers/alpha-router/functions/compute-all-routes.js.map +1 -0
  81. package/build/main/routers/alpha-router/functions/get-candidate-pools.js.map +1 -0
  82. package/build/main/routers/alpha-router/gas-models/fewV2/v2-heuristic-gas-model.js.map +1 -0
  83. package/build/main/routers/alpha-router/gas-models/gas-costs.js.map +1 -0
  84. package/build/main/routers/alpha-router/gas-models/gas-model.js.map +1 -0
  85. package/build/main/routers/alpha-router/gas-models/index.js.map +1 -0
  86. package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js.map +1 -0
  87. package/build/main/routers/alpha-router/gas-models/ring-gas-model.js.map +1 -0
  88. package/build/main/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.js.map +1 -0
  89. package/build/main/routers/alpha-router/gas-models/uniswapFewV3/v3-heuristic-gas-model.js.map +1 -0
  90. package/build/main/routers/alpha-router/gas-models/uniswapFewV4/v4-heuristic-gas-model.js.map +1 -0
  91. package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js.map +1 -0
  92. package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js.map +1 -0
  93. package/build/main/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.js.map +1 -0
  94. package/build/main/routers/alpha-router/index.js.map +1 -0
  95. package/build/main/routers/alpha-router/quoters/base-quoter.js.map +1 -0
  96. package/build/main/routers/alpha-router/quoters/few-v2-quoter.js.map +1 -0
  97. package/build/main/routers/alpha-router/quoters/index.js.map +1 -0
  98. package/build/main/routers/alpha-router/quoters/mixed-quoter.js.map +1 -0
  99. package/build/main/routers/alpha-router/quoters/model/index.js.map +1 -0
  100. package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.js.map +1 -0
  101. package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.js.map +1 -0
  102. package/build/main/routers/alpha-router/quoters/model/results/index.js.map +1 -0
  103. package/build/main/routers/alpha-router/quoters/uniswap-few-v3-quoter.js.map +1 -0
  104. package/build/main/routers/alpha-router/quoters/uniswap-few-v4-quoter.js.map +1 -0
  105. package/build/main/routers/alpha-router/quoters/v2-quoter.js.map +1 -0
  106. package/build/main/routers/alpha-router/quoters/v3-quoter.js.map +1 -0
  107. package/build/main/routers/alpha-router/quoters/v4-quoter.js.map +1 -0
  108. package/build/main/routers/index.js.map +1 -0
  109. package/build/main/routers/legacy-router/bases.js.map +1 -0
  110. package/build/main/routers/legacy-router/index.js.map +1 -0
  111. package/build/main/routers/legacy-router/legacy-router.js.map +1 -0
  112. package/build/main/routers/router.js.map +1 -0
  113. package/build/main/tsconfig.tsbuildinfo +1 -1
  114. package/build/main/types/other/commons.js.map +1 -0
  115. package/build/main/types/other/factories/Erc20__factory.js.map +1 -0
  116. package/build/main/types/other/factories/GasDataArbitrum__factory.js.map +1 -0
  117. package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js.map +1 -0
  118. package/build/main/types/other/factories/ITokenValidator__factory.js.map +1 -0
  119. package/build/main/types/other/factories/MixedRouteQuoterV2__factory.js.map +1 -0
  120. package/build/main/types/other/factories/Permit2__factory.js.map +1 -0
  121. package/build/main/types/other/factories/StateView__factory.js.map +1 -0
  122. package/build/main/types/other/factories/SwapRouter02__factory.js.map +1 -0
  123. package/build/main/types/other/factories/TokenFeeDetector__factory.js.map +1 -0
  124. package/build/main/types/other/factories/V4Quoter__factory.js.map +1 -0
  125. package/build/main/types/v2/commons.js.map +1 -0
  126. package/build/main/types/v2/factories/IUniswapV2Pair__factory.js.map +1 -0
  127. package/build/main/types/v3/commons.js.map +1 -0
  128. package/build/main/types/v3/factories/IERC20Metadata__factory.js.map +1 -0
  129. package/build/main/types/v3/factories/IQuoterV2__factory.js.map +1 -0
  130. package/build/main/types/v3/factories/IUniswapV3PoolState__factory.js.map +1 -0
  131. package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.js.map +1 -0
  132. package/build/main/util/addresses.js.map +1 -0
  133. package/build/main/util/amounts.js.map +1 -0
  134. package/build/main/util/callData.js.map +1 -0
  135. package/build/main/util/chains.js.map +1 -0
  136. package/build/main/util/defaultBlocksToLive.js.map +1 -0
  137. package/build/main/util/fewAddress.js.map +1 -0
  138. package/build/main/util/gas-factory-helpers.js.map +1 -0
  139. package/build/main/util/hooksOptions.js.map +1 -0
  140. package/build/main/util/index.js.map +1 -0
  141. package/build/main/util/intent.js.map +1 -0
  142. package/build/main/util/l2FeeChains.js.map +1 -0
  143. package/build/main/util/log.js.map +1 -0
  144. package/build/main/util/methodParameters.js +3 -1
  145. package/build/main/util/methodParameters.js.map +1 -0
  146. package/build/main/util/metric.js.map +1 -0
  147. package/build/main/util/mixedRouteFilterOutV4Pools.js.map +1 -0
  148. package/build/main/util/onchainQuoteProviderConfigs.js.map +1 -0
  149. package/build/main/util/pool.js.map +1 -0
  150. package/build/main/util/protocols.js.map +1 -0
  151. package/build/main/util/routes.js.map +1 -0
  152. package/build/main/util/serializeRouteIds.js.map +1 -0
  153. package/build/main/util/simple-perf-tracker.js.map +1 -0
  154. package/build/main/util/tenderlySimulationErrorBreakDown.js.map +1 -0
  155. package/build/main/util/unsupported-tokens.js.map +1 -0
  156. package/build/module/providers/on-chain-quote-provider.d.ts +4 -4
  157. package/build/module/providers/on-chain-quote-provider.js +35 -37
  158. package/build/module/routers/alpha-router/alpha-router.d.ts +9 -0
  159. package/build/module/routers/alpha-router/alpha-router.js +4 -1
  160. package/build/module/tsconfig.module.tsbuildinfo +1 -1
  161. package/build/module/util/methodParameters.js +3 -1
  162. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2-quoter.js","sourceRoot":"","sources":["../../../../../src/routers/alpha-router/quoters/v2-quoter.ts"],"names":[],"mappings":"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","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber';\nimport { Protocol } from '@fewprotocol/router-sdk';\nimport { ChainId, Currency, Token, TradeType } from '@fewprotocol/sdk-core';\nimport _ from 'lodash';\n\nimport {\n ITokenListProvider,\n ITokenProvider,\n ITokenValidatorProvider,\n IV2PoolProvider,\n IV2QuoteProvider,\n IV2SubgraphProvider,\n TokenValidationResult,\n} from '../../../providers';\nimport {\n ArbitrumGasData,\n IL2GasDataProvider,\n} from '../../../providers/v3/gas-data-provider';\nimport {\n CurrencyAmount,\n log,\n metric,\n MetricLoggerUnit,\n routeToString,\n} from '../../../util';\nimport { V2Route } from '../../router';\nimport { AlphaRouterConfig } from '../alpha-router';\nimport { V2RouteWithValidQuote } from '../entities';\nimport { computeAllV2Routes } from '../functions/compute-all-routes';\nimport {\n CandidatePoolsBySelectionCriteria,\n V2CandidatePools,\n} from '../functions/get-candidate-pools';\nimport { IGasModel, IV2GasModelFactory } from '../gas-models';\nimport { NATIVE_OVERHEAD } from '../gas-models/gas-costs';\n\nimport { BaseQuoter } from './base-quoter';\nimport { GetQuotesResult } from './model/results/get-quotes-result';\nimport { GetRoutesResult } from './model/results/get-routes-result';\n\nexport class V2Quoter extends BaseQuoter<V2CandidatePools, V2Route, Token> {\n protected v2SubgraphProvider: IV2SubgraphProvider;\n protected v2PoolProvider: IV2PoolProvider;\n protected v2QuoteProvider: IV2QuoteProvider;\n protected v2GasModelFactory: IV2GasModelFactory;\n protected l2GasDataProvider?: IL2GasDataProvider<ArbitrumGasData>;\n\n constructor(\n v2SubgraphProvider: IV2SubgraphProvider,\n v2PoolProvider: IV2PoolProvider,\n v2QuoteProvider: IV2QuoteProvider,\n v2GasModelFactory: IV2GasModelFactory,\n tokenProvider: ITokenProvider,\n chainId: ChainId,\n blockedTokenListProvider?: ITokenListProvider,\n tokenValidatorProvider?: ITokenValidatorProvider,\n l2GasDataProvider?: IL2GasDataProvider<ArbitrumGasData>\n ) {\n super(\n tokenProvider,\n chainId,\n Protocol.V2,\n blockedTokenListProvider,\n tokenValidatorProvider\n );\n this.v2SubgraphProvider = v2SubgraphProvider;\n this.v2PoolProvider = v2PoolProvider;\n this.v2QuoteProvider = v2QuoteProvider;\n this.v2GasModelFactory = v2GasModelFactory;\n this.l2GasDataProvider = l2GasDataProvider;\n }\n\n protected async getRoutes(\n tokenIn: Token,\n tokenOut: Token,\n v2CandidatePools: V2CandidatePools,\n _tradeType: TradeType,\n routingConfig: AlphaRouterConfig\n ): Promise<GetRoutesResult<V2Route>> {\n const beforeGetRoutes = Date.now();\n // Fetch all the pools that we will consider routing via. There are thousands\n // of pools, so we filter them to a set of candidate pools that we expect will\n // result in good prices.\n const { poolAccessor, candidatePools } = v2CandidatePools;\n const poolsRaw = poolAccessor.getAllPools();\n\n // Drop any pools that contain tokens that can not be transferred according to the token validator.\n const pools = await this.applyTokenValidatorToPools(\n poolsRaw,\n (\n token: Currency,\n tokenValidation: TokenValidationResult | undefined\n ): boolean => {\n // If there is no available validation result we assume the token is fine.\n if (!tokenValidation) {\n return false;\n }\n\n // Only filters out *intermediate* pools that involve tokens that we detect\n // cant be transferred. This prevents us trying to route through tokens that may\n // not be transferrable, but allows users to still swap those tokens if they\n // specify.\n if (\n tokenValidation == TokenValidationResult.STF &&\n (token.equals(tokenIn) || token.equals(tokenOut))\n ) {\n return false;\n }\n\n return tokenValidation == TokenValidationResult.STF;\n }\n );\n\n // Given all our candidate pools, compute all the possible ways to route from tokenIn to tokenOut.\n const { maxSwapsPerPath } = routingConfig;\n const routes = computeAllV2Routes(\n tokenIn,\n tokenOut,\n pools,\n maxSwapsPerPath\n );\n\n metric.putMetric(\n 'V2GetRoutesLoad',\n Date.now() - beforeGetRoutes,\n MetricLoggerUnit.Milliseconds\n );\n\n metric.putMetric(\n `V2GetRoutesLoad_Chain${this.chainId}`,\n Date.now() - beforeGetRoutes,\n MetricLoggerUnit.Milliseconds\n );\n\n return {\n routes,\n candidatePools,\n };\n }\n\n public override async getQuotes(\n routes: V2Route[],\n amounts: CurrencyAmount[],\n percents: number[],\n quoteToken: Token,\n tradeType: TradeType,\n _routingConfig: AlphaRouterConfig,\n candidatePools?: CandidatePoolsBySelectionCriteria,\n _gasModel?: IGasModel<V2RouteWithValidQuote>,\n gasPriceWei?: BigNumber\n ): Promise<GetQuotesResult> {\n const beforeGetQuotes = Date.now();\n log.info('Starting to get V2 quotes');\n if (gasPriceWei === undefined) {\n throw new Error('GasPriceWei for V2Routes is required to getQuotes');\n }\n // throw if we have no amounts or if there are different tokens in the amounts\n if (\n amounts.length == 0 ||\n !amounts.every((amount) => amount.currency.equals(amounts[0]!.currency))\n ) {\n throw new Error(\n 'Amounts must have at least one amount and must be same token'\n );\n }\n // safe to force unwrap here because we throw if there are no amounts\n const amountToken = amounts[0]!.currency;\n const gasToken = _routingConfig.gasToken\n ? (\n await this.tokenProvider.getTokens([_routingConfig.gasToken])\n ).getTokenByAddress(_routingConfig.gasToken)\n : undefined;\n\n if (routes.length == 0) {\n return { routesWithValidQuotes: [], candidatePools };\n }\n\n // For all our routes, and all the fractional amounts, fetch quotes on-chain.\n const quoteFn =\n tradeType == TradeType.EXACT_INPUT\n ? this.v2QuoteProvider.getQuotesManyExactIn.bind(this.v2QuoteProvider)\n : this.v2QuoteProvider.getQuotesManyExactOut.bind(this.v2QuoteProvider);\n\n const beforeQuotes = Date.now();\n\n log.info(\n `Getting quotes for V2 for ${routes.length} routes with ${amounts.length} amounts per route.`\n );\n const { routesWithQuotes } = await quoteFn(amounts, routes, _routingConfig);\n\n const v2GasModel = await this.v2GasModelFactory.buildGasModel({\n chainId: this.chainId,\n gasPriceWei,\n poolProvider: this.v2PoolProvider,\n token: quoteToken,\n l2GasDataProvider: this.l2GasDataProvider,\n providerConfig: {\n ..._routingConfig,\n additionalGasOverhead: NATIVE_OVERHEAD(\n this.chainId,\n amountToken,\n quoteToken\n ),\n gasToken,\n },\n });\n\n metric.putMetric(\n 'V2QuotesLoad',\n Date.now() - beforeQuotes,\n MetricLoggerUnit.Milliseconds\n );\n\n metric.putMetric(\n 'V2QuotesFetched',\n _(routesWithQuotes)\n .map(([, quotes]) => quotes.length)\n .sum(),\n MetricLoggerUnit.Count\n );\n\n const routesWithValidQuotes = [];\n\n for (const routeWithQuote of routesWithQuotes) {\n const [route, quotes] = routeWithQuote;\n\n for (let i = 0; i < quotes.length; i++) {\n const percent = percents[i]!;\n const amountQuote = quotes[i]!;\n const { quote, amount } = amountQuote;\n\n if (!quote) {\n log.debug(\n {\n route: routeToString(route),\n amountQuote,\n },\n 'Dropping a null V2 quote for route.'\n );\n continue;\n }\n\n const routeWithValidQuote = new V2RouteWithValidQuote({\n route,\n rawQuote: quote,\n amount,\n percent,\n gasModel: v2GasModel,\n quoteToken,\n tradeType,\n v2PoolProvider: this.v2PoolProvider,\n });\n\n routesWithValidQuotes.push(routeWithValidQuote);\n }\n }\n\n metric.putMetric(\n 'V2GetQuotesLoad',\n Date.now() - beforeGetQuotes,\n MetricLoggerUnit.Milliseconds\n );\n\n return {\n routesWithValidQuotes,\n candidatePools,\n };\n }\n\n public async refreshRoutesThenGetQuotes(\n tokenIn: Token,\n tokenOut: Token,\n routes: V2Route[],\n amounts: CurrencyAmount[],\n percents: number[],\n quoteToken: Token,\n tradeType: TradeType,\n routingConfig: AlphaRouterConfig,\n gasPriceWei?: BigNumber\n ): Promise<GetQuotesResult> {\n const tokenPairs: [Token, Token][] = [];\n routes.forEach((route) =>\n route.pairs.forEach((pair) => tokenPairs.push([pair.token0, pair.token1]))\n );\n\n return this.v2PoolProvider\n .getPools(tokenPairs, routingConfig)\n .then((poolAccesor) => {\n const routes = computeAllV2Routes(\n tokenIn,\n tokenOut,\n poolAccesor.getAllPools(),\n routingConfig.maxSwapsPerPath\n );\n\n return this.getQuotes(\n routes,\n amounts,\n percents,\n quoteToken,\n tradeType,\n routingConfig,\n undefined,\n undefined,\n gasPriceWei\n );\n });\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3-quoter.js","sourceRoot":"","sources":["../../../../../src/routers/alpha-router/quoters/v3-quoter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Protocol } from '@fewprotocol/router-sdk';\nimport { ChainId, Currency, Token, TradeType } from '@fewprotocol/sdk-core';\nimport _ from 'lodash';\n\nimport {\n IOnChainQuoteProvider,\n ITokenListProvider,\n ITokenProvider,\n ITokenValidatorProvider,\n IV3PoolProvider,\n IV3SubgraphProvider,\n TokenValidationResult,\n} from '../../../providers';\nimport {\n CurrencyAmount,\n log,\n metric,\n MetricLoggerUnit,\n routeToString,\n} from '../../../util';\nimport { V3Route } from '../../router';\nimport { AlphaRouterConfig } from '../alpha-router';\nimport { V3RouteWithValidQuote } from '../entities';\nimport { computeAllV3Routes } from '../functions/compute-all-routes';\nimport {\n CandidatePoolsBySelectionCriteria,\n V3CandidatePools,\n} from '../functions/get-candidate-pools';\nimport { IGasModel } from '../gas-models';\n\nimport { BaseQuoter } from './base-quoter';\nimport { GetQuotesResult } from './model/results/get-quotes-result';\nimport { GetRoutesResult } from './model/results/get-routes-result';\n\nexport class V3Quoter extends BaseQuoter<V3CandidatePools, V3Route, Token> {\n protected v3SubgraphProvider: IV3SubgraphProvider;\n protected v3PoolProvider: IV3PoolProvider;\n protected onChainQuoteProvider: IOnChainQuoteProvider;\n\n constructor(\n v3SubgraphProvider: IV3SubgraphProvider,\n v3PoolProvider: IV3PoolProvider,\n onChainQuoteProvider: IOnChainQuoteProvider,\n tokenProvider: ITokenProvider,\n chainId: ChainId,\n blockedTokenListProvider?: ITokenListProvider,\n tokenValidatorProvider?: ITokenValidatorProvider\n ) {\n super(\n tokenProvider,\n chainId,\n Protocol.V3,\n blockedTokenListProvider,\n tokenValidatorProvider\n );\n this.v3SubgraphProvider = v3SubgraphProvider;\n this.v3PoolProvider = v3PoolProvider;\n this.onChainQuoteProvider = onChainQuoteProvider;\n }\n\n protected async getRoutes(\n tokenIn: Token,\n tokenOut: Token,\n v3CandidatePools: V3CandidatePools,\n _tradeType: TradeType,\n routingConfig: AlphaRouterConfig\n ): Promise<GetRoutesResult<V3Route>> {\n const beforeGetRoutes = Date.now();\n // Fetch all the pools that we will consider routing via. There are thousands\n // of pools, so we filter them to a set of candidate pools that we expect will\n // result in good prices.\n const { poolAccessor, candidatePools } = v3CandidatePools;\n const poolsRaw = poolAccessor.getAllPools();\n\n // Drop any pools that contain fee on transfer tokens (not supported by v3) or have issues with being transferred.\n const pools = await this.applyTokenValidatorToPools(\n poolsRaw,\n (\n token: Currency,\n tokenValidation: TokenValidationResult | undefined\n ): boolean => {\n // If there is no available validation result we assume the token is fine.\n if (!tokenValidation) {\n return false;\n }\n\n // Only filters out *intermediate* pools that involve tokens that we detect\n // cant be transferred. This prevents us trying to route through tokens that may\n // not be transferrable, but allows users to still swap those tokens if they\n // specify.\n //\n if (\n tokenValidation == TokenValidationResult.STF &&\n (token.equals(tokenIn) || token.equals(tokenOut))\n ) {\n return false;\n }\n\n return (\n tokenValidation == TokenValidationResult.FOT ||\n tokenValidation == TokenValidationResult.STF\n );\n }\n );\n\n // Given all our candidate pools, compute all the possible ways to route from tokenIn to tokenOut.\n const { maxSwapsPerPath } = routingConfig;\n const routes = computeAllV3Routes(\n tokenIn,\n tokenOut,\n pools,\n maxSwapsPerPath\n );\n\n metric.putMetric(\n 'V3GetRoutesLoad',\n Date.now() - beforeGetRoutes,\n MetricLoggerUnit.Milliseconds\n );\n\n metric.putMetric(\n `V3GetRoutesLoad_Chain${this.chainId}`,\n Date.now() - beforeGetRoutes,\n MetricLoggerUnit.Milliseconds\n );\n\n return {\n routes,\n candidatePools,\n };\n }\n\n public override async getQuotes(\n routes: V3Route[],\n amounts: CurrencyAmount[],\n percents: number[],\n quoteToken: Token,\n tradeType: TradeType,\n routingConfig: AlphaRouterConfig,\n candidatePools?: CandidatePoolsBySelectionCriteria,\n gasModel?: IGasModel<V3RouteWithValidQuote>\n ): Promise<GetQuotesResult> {\n const beforeGetQuotes = Date.now();\n log.info('Starting to get V3 quotes');\n\n if (gasModel === undefined) {\n throw new Error(\n 'GasModel for V3RouteWithValidQuote is required to getQuotes'\n );\n }\n\n if (routes.length == 0) {\n return { routesWithValidQuotes: [], candidatePools };\n }\n\n // For all our routes, and all the fractional amounts, fetch quotes on-chain.\n const quoteFn =\n tradeType == TradeType.EXACT_INPUT\n ? this.onChainQuoteProvider.getQuotesManyExactIn.bind(\n this.onChainQuoteProvider\n )\n : this.onChainQuoteProvider.getQuotesManyExactOut.bind(\n this.onChainQuoteProvider\n );\n\n const beforeQuotes = Date.now();\n log.info(\n `Getting quotes for V3 for ${routes.length} routes with ${amounts.length} amounts per route.`\n );\n\n const { routesWithQuotes } = await quoteFn<V3Route>(\n amounts,\n routes,\n routingConfig\n );\n\n metric.putMetric(\n 'V3QuotesLoad',\n Date.now() - beforeQuotes,\n MetricLoggerUnit.Milliseconds\n );\n\n metric.putMetric(\n 'V3QuotesFetched',\n _(routesWithQuotes)\n .map(([, quotes]) => quotes.length)\n .sum(),\n MetricLoggerUnit.Count\n );\n\n const routesWithValidQuotes = [];\n\n for (const routeWithQuote of routesWithQuotes) {\n const [route, quotes] = routeWithQuote;\n\n for (let i = 0; i < quotes.length; i++) {\n const percent = percents[i]!;\n const amountQuote = quotes[i]!;\n const {\n quote,\n amount,\n sqrtPriceX96AfterList,\n initializedTicksCrossedList,\n gasEstimate,\n } = amountQuote;\n\n if (\n !quote ||\n !sqrtPriceX96AfterList ||\n !initializedTicksCrossedList ||\n !gasEstimate\n ) {\n log.debug(\n {\n route: routeToString(route),\n amountQuote,\n },\n 'Dropping a null V3 quote for route.'\n );\n continue;\n }\n\n const routeWithValidQuote = new V3RouteWithValidQuote({\n route,\n rawQuote: quote,\n amount,\n percent,\n sqrtPriceX96AfterList,\n initializedTicksCrossedList,\n quoterGasEstimate: gasEstimate,\n gasModel,\n quoteToken,\n tradeType,\n v3PoolProvider: this.v3PoolProvider,\n });\n\n routesWithValidQuotes.push(routeWithValidQuote);\n }\n }\n\n metric.putMetric(\n 'V3GetQuotesLoad',\n Date.now() - beforeGetQuotes,\n MetricLoggerUnit.Milliseconds\n );\n\n return {\n routesWithValidQuotes,\n candidatePools,\n };\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v4-quoter.js","sourceRoot":"","sources":["../../../../../src/routers/alpha-router/quoters/v4-quoter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Protocol } from '@fewprotocol/router-sdk';\nimport { ChainId, Currency, TradeType } from '@fewprotocol/sdk-core';\nimport _ from 'lodash';\n\nimport {\n IOnChainQuoteProvider,\n ITokenListProvider,\n ITokenProvider,\n ITokenValidatorProvider,\n IV4PoolProvider,\n IV4SubgraphProvider,\n TokenValidationResult,\n} from '../../../providers';\nimport {\n CurrencyAmount,\n log,\n metric,\n MetricLoggerUnit,\n routeToString,\n} from '../../../util';\nimport { V4Route } from '../../router';\nimport { AlphaRouterConfig } from '../alpha-router';\nimport { RouteWithValidQuote, V4RouteWithValidQuote } from '../entities';\nimport { computeAllV4Routes } from '../functions/compute-all-routes';\nimport {\n CandidatePoolsBySelectionCriteria,\n V4CandidatePools,\n} from '../functions/get-candidate-pools';\nimport { IGasModel } from '../gas-models';\n\nimport { BaseQuoter } from './base-quoter';\nimport { GetQuotesResult, GetRoutesResult } from './model';\n\nexport class V4Quoter extends BaseQuoter<V4CandidatePools, V4Route, Currency> {\n protected v4SubgraphProvider: IV4SubgraphProvider;\n protected v4PoolProvider: IV4PoolProvider;\n protected onChainQuoteProvider: IOnChainQuoteProvider;\n\n constructor(\n v4SubgraphProvider: IV4SubgraphProvider,\n v4PoolProvider: IV4PoolProvider,\n onChainQuoteProvider: IOnChainQuoteProvider,\n tokenProvider: ITokenProvider,\n chainId: ChainId,\n blockedTokenListProvider?: ITokenListProvider,\n tokenValidatorProvider?: ITokenValidatorProvider\n ) {\n super(\n tokenProvider,\n chainId,\n Protocol.V4,\n blockedTokenListProvider,\n tokenValidatorProvider\n );\n this.v4SubgraphProvider = v4SubgraphProvider;\n this.v4PoolProvider = v4PoolProvider;\n this.onChainQuoteProvider = onChainQuoteProvider;\n }\n\n protected async getRoutes(\n currencyIn: Currency,\n currencyOut: Currency,\n v4CandidatePools: V4CandidatePools,\n _tradeType: TradeType,\n routingConfig: AlphaRouterConfig\n ): Promise<GetRoutesResult<V4Route>> {\n const beforeGetRoutes = Date.now();\n // Fetch all the pools that we will consider routing via. There are thousands\n // of pools, so we filter them to a set of candidate pools that we expect will\n // result in good prices.\n const { poolAccessor, candidatePools } = v4CandidatePools;\n const poolsRaw = poolAccessor.getAllPools();\n\n // Drop any pools that contain fee on transfer tokens (not supported by v4) or have issues with being transferred.\n const pools = await this.applyTokenValidatorToPools(\n poolsRaw,\n (\n token: Currency,\n tokenValidation: TokenValidationResult | undefined\n ): boolean => {\n // If there is no available validation result we assume the token is fine.\n if (!tokenValidation) {\n return false;\n }\n\n // Only filters out *intermediate* pools that involve tokens that we detect\n // cant be transferred. This prevents us trying to route through tokens that may\n // not be transferrable, but allows users to still swap those tokens if they\n // specify.\n //\n if (\n tokenValidation == TokenValidationResult.STF &&\n (token.equals(currencyIn) || token.equals(currencyOut))\n ) {\n return false;\n }\n\n return (\n tokenValidation == TokenValidationResult.FOT ||\n tokenValidation == TokenValidationResult.STF\n );\n }\n );\n\n // Given all our candidate pools, compute all the possible ways to route from currencyIn to tokenOut.\n const { maxSwapsPerPath } = routingConfig;\n const routes = computeAllV4Routes(\n currencyIn,\n currencyOut,\n pools,\n maxSwapsPerPath,\n routingConfig.hooksOptions\n );\n\n metric.putMetric(\n 'V4GetRoutesLoad',\n Date.now() - beforeGetRoutes,\n MetricLoggerUnit.Milliseconds\n );\n\n metric.putMetric(\n `V4GetRoutesLoad_Chain${this.chainId}`,\n Date.now() - beforeGetRoutes,\n MetricLoggerUnit.Milliseconds\n );\n\n return {\n routes,\n candidatePools,\n };\n }\n\n public override async getQuotes(\n routes: V4Route[],\n amounts: CurrencyAmount[],\n percents: number[],\n quoteCurrency: Currency,\n tradeType: TradeType,\n routingConfig: AlphaRouterConfig,\n candidatePools?: CandidatePoolsBySelectionCriteria,\n gasModel?: IGasModel<RouteWithValidQuote>\n ): Promise<GetQuotesResult> {\n const beforeGetQuotes = Date.now();\n log.info('Starting to get V4 quotes');\n\n if (gasModel === undefined) {\n throw new Error(\n 'GasModel for V4RouteWithValidQuote is required to getQuotes'\n );\n }\n\n if (routes.length == 0) {\n return { routesWithValidQuotes: [], candidatePools };\n }\n\n // For all our routes, and all the fractional amounts, fetch quotes on-chain.\n const quoteFn =\n tradeType == TradeType.EXACT_INPUT\n ? this.onChainQuoteProvider.getQuotesManyExactIn.bind(\n this.onChainQuoteProvider\n )\n : this.onChainQuoteProvider.getQuotesManyExactOut.bind(\n this.onChainQuoteProvider\n );\n\n const beforeQuotes = Date.now();\n log.info(\n `Getting quotes for V4 for ${routes.length} routes with ${amounts.length} amounts per route.`\n );\n\n const { routesWithQuotes } = await quoteFn<V4Route>(\n amounts,\n routes,\n routingConfig\n );\n\n metric.putMetric(\n 'V4QuotesLoad',\n Date.now() - beforeQuotes,\n MetricLoggerUnit.Milliseconds\n );\n\n metric.putMetric(\n 'V4QuotesFetched',\n _(routesWithQuotes)\n .map(([, quotes]) => quotes.length)\n .sum(),\n MetricLoggerUnit.Count\n );\n\n const routesWithValidQuotes = [];\n\n for (const routeWithQuote of routesWithQuotes) {\n const [route, quotes] = routeWithQuote;\n\n for (let i = 0; i < quotes.length; i++) {\n const percent = percents[i]!;\n const amountQuote = quotes[i]!;\n const {\n quote,\n amount,\n sqrtPriceX96AfterList,\n initializedTicksCrossedList,\n gasEstimate,\n } = amountQuote;\n\n if (\n !quote ||\n !sqrtPriceX96AfterList ||\n !initializedTicksCrossedList ||\n !gasEstimate\n ) {\n log.debug(\n {\n route: routeToString(route),\n amountQuote,\n },\n 'Dropping a null V4 quote for route.'\n );\n continue;\n }\n\n const routeWithValidQuote = new V4RouteWithValidQuote({\n route,\n rawQuote: quote,\n amount,\n percent,\n sqrtPriceX96AfterList,\n initializedTicksCrossedList,\n quoterGasEstimate: gasEstimate,\n gasModel,\n // TODO: ROUTE-306 make it unwrapped, once v4 gas model supports native quote currency\n // For now it's ok to keep it wrapped,\n // because the quote is the fairly accurate quote from the native currency routing\n quoteToken: quoteCurrency.wrapped,\n tradeType,\n v4PoolProvider: this.v4PoolProvider,\n });\n\n routesWithValidQuotes.push(routeWithValidQuote);\n }\n }\n\n metric.putMetric(\n 'V4GetQuotesLoad',\n Date.now() - beforeGetQuotes,\n MetricLoggerUnit.Milliseconds\n );\n\n return {\n routesWithValidQuotes,\n candidatePools,\n };\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,iDAA+B;AAC/B,kDAAgC;AAChC,2CAAyB","sourcesContent":["export * from '../util/metric';\nexport * from './alpha-router';\nexport * from './legacy-router';\nexport * from './router';\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bases.js","sourceRoot":"","sources":["../../../../src/routers/legacy-router/bases.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { ChainId, Token } from '@fewprotocol/sdk-core';\n\nimport {\n BTC_BNB,\n BUSD_BNB,\n DAI_AVAX,\n DAI_BNB,\n DAI_MAINNET,\n DAI_UNICHAIN,\n FEW_USDT_HYPER_MAINNET,\n ITokenProvider,\n USDB_BLAST,\n USDC_AVAX,\n USDC_BASE,\n USDC_BASE_SEPOLIA,\n USDC_BNB,\n USDC_MAINNET,\n USDC_SONEIUM,\n USDC_UNICHAIN,\n USDC_UNICHAIN_SEPOLIA,\n USDC_WORLDCHAIN,\n USDC_ZKSYNC,\n USDCE_ZKSYNC,\n USDT_BNB,\n USDT_MAINNET,\n USDT_MONAD_TESTNET,\n WBTC_MAINNET,\n WBTC_WORLDCHAIN,\n WLD_WORLDCHAIN,\n WMATIC_POLYGON,\n WMATIC_POLYGON_MUMBAI,\n} from '../../providers/token-provider';\nimport { FEW_WRAPPED_NATIVE_CURRENCY, WRAPPED_NATIVE_CURRENCY } from '../../util/chains';\n\ntype ChainTokenList = {\n readonly [chainId in ChainId]: Token[];\n};\n\nexport const BASES_TO_CHECK_TRADES_AGAINST = (\n _tokenProvider: ITokenProvider\n): ChainTokenList => {\n return {\n [ChainId.HYPER_MAINNET]: [\n FEW_WRAPPED_NATIVE_CURRENCY[ChainId.HYPER_MAINNET]!,\n FEW_USDT_HYPER_MAINNET,\n ],\n [ChainId.MAINNET]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.MAINNET]!,\n DAI_MAINNET,\n USDC_MAINNET,\n USDT_MAINNET,\n WBTC_MAINNET,\n ],\n [ChainId.GOERLI]: [WRAPPED_NATIVE_CURRENCY[ChainId.GOERLI]!],\n [ChainId.SEPOLIA]: [WRAPPED_NATIVE_CURRENCY[ChainId.SEPOLIA]!],\n [ChainId.OPTIMISM]: [WRAPPED_NATIVE_CURRENCY[ChainId.OPTIMISM]!],\n [ChainId.OPTIMISM_GOERLI]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.OPTIMISM_GOERLI]!,\n ],\n [ChainId.OPTIMISM_SEPOLIA]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.OPTIMISM_SEPOLIA]!,\n ],\n [ChainId.BLAST_SEPOLIA]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.BLAST_SEPOLIA]!,\n ],\n [ChainId.STORY_ODYSSEY]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.STORY_ODYSSEY]!,\n ],\n [ChainId.STORY_MAINNET]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.STORY_MAINNET]!,\n ],\n [ChainId.ARBITRUM_ONE]: [WRAPPED_NATIVE_CURRENCY[ChainId.ARBITRUM_ONE]!],\n [ChainId.ARBITRUM_GOERLI]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.ARBITRUM_GOERLI]!,\n ],\n [ChainId.ARBITRUM_SEPOLIA]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.ARBITRUM_SEPOLIA]!,\n ],\n [ChainId.POLYGON]: [WMATIC_POLYGON],\n [ChainId.POLYGON_MUMBAI]: [WMATIC_POLYGON_MUMBAI],\n [ChainId.CELO]: [WRAPPED_NATIVE_CURRENCY[ChainId.CELO]],\n [ChainId.CELO_ALFAJORES]: [WRAPPED_NATIVE_CURRENCY[ChainId.CELO_ALFAJORES]],\n [ChainId.GNOSIS]: [WRAPPED_NATIVE_CURRENCY[ChainId.GNOSIS]],\n [ChainId.MOONBEAM]: [WRAPPED_NATIVE_CURRENCY[ChainId.MOONBEAM]],\n [ChainId.BNB]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.BNB]!,\n BUSD_BNB,\n DAI_BNB,\n USDC_BNB,\n USDT_BNB,\n BTC_BNB,\n ],\n [ChainId.AVALANCHE]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.AVALANCHE]!,\n USDC_AVAX,\n DAI_AVAX,\n ],\n [ChainId.BASE]: [WRAPPED_NATIVE_CURRENCY[ChainId.BASE]!, USDC_BASE],\n [ChainId.BASE_GOERLI]: [WRAPPED_NATIVE_CURRENCY[ChainId.BASE_GOERLI]!],\n [ChainId.ZORA]: [WRAPPED_NATIVE_CURRENCY[ChainId.ZORA]!],\n [ChainId.ZORA_SEPOLIA]: [WRAPPED_NATIVE_CURRENCY[ChainId.ZORA_SEPOLIA]!],\n [ChainId.ROOTSTOCK]: [WRAPPED_NATIVE_CURRENCY[ChainId.ROOTSTOCK]!],\n [ChainId.BLAST]: [WRAPPED_NATIVE_CURRENCY[ChainId.BLAST]!, USDB_BLAST],\n [ChainId.ZKSYNC]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.ZKSYNC]!,\n USDCE_ZKSYNC,\n USDC_ZKSYNC,\n ],\n [ChainId.WORLDCHAIN]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.WORLDCHAIN]!,\n USDC_WORLDCHAIN,\n WLD_WORLDCHAIN,\n WBTC_WORLDCHAIN,\n ],\n [ChainId.UNICHAIN_SEPOLIA]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.UNICHAIN_SEPOLIA]!,\n USDC_UNICHAIN_SEPOLIA,\n ],\n [ChainId.UNICHAIN]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.UNICHAIN]!,\n DAI_UNICHAIN,\n USDC_UNICHAIN,\n ],\n [ChainId.MONAD_TESTNET]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.MONAD_TESTNET]!,\n USDT_MONAD_TESTNET,\n ],\n [ChainId.BASE_SEPOLIA]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.BASE_SEPOLIA]!,\n USDC_BASE_SEPOLIA,\n ],\n [ChainId.SONEIUM]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.SONEIUM]!,\n USDC_SONEIUM,\n ],\n };\n};\n\nconst getBasePairByAddress = async (\n tokenProvider: ITokenProvider,\n _chainId: ChainId,\n fromAddress: string,\n toAddress: string\n): Promise<{ [tokenAddress: string]: Token[] }> => {\n const accessor = await tokenProvider.getTokens([toAddress]);\n const toToken: Token | undefined = accessor.getTokenByAddress(toAddress);\n\n if (!toToken) return {};\n\n return {\n [fromAddress]: [toToken],\n };\n};\n\nexport const ADDITIONAL_BASES = async (\n tokenProvider: ITokenProvider\n): Promise<{\n [chainId in ChainId]?: { [tokenAddress: string]: Token[] };\n}> => {\n return {\n [ChainId.MAINNET]: {\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0xA948E86885e12Fb09AfEF8C52142EBDbDf73cD18',\n '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'\n )),\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0x561a4717537ff4AF5c687328c0f7E90a319705C0',\n '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984'\n )),\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0x956F47F50A910163D8BF957Cf5846D573E7f87CA',\n '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B'\n )),\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B',\n '0x956F47F50A910163D8BF957Cf5846D573E7f87CA'\n )),\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0x853d955acef822db058eb8505911ed77f175b99e',\n '0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0'\n )),\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0',\n '0x853d955acef822db058eb8505911ed77f175b99e'\n )),\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',\n '0xeb4c2781e4eba804ce9a9803c67d0893436bb27d'\n )),\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0xeb4c2781e4eba804ce9a9803c67d0893436bb27d',\n '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599'\n )),\n },\n };\n};\n\n/**\n * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these\n * tokens.\n */\nexport const CUSTOM_BASES = async (\n tokenProvider: ITokenProvider\n): Promise<{\n [chainId in ChainId]?: { [tokenAddress: string]: Token[] };\n}> => {\n return {\n [ChainId.MAINNET]: {\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0xd46ba6d942050d489dbd938a2c909a5d5039a161',\n DAI_MAINNET.address\n )),\n ...(await getBasePairByAddress(\n tokenProvider,\n ChainId.MAINNET,\n '0xd46ba6d942050d489dbd938a2c909a5d5039a161',\n WRAPPED_NATIVE_CURRENCY[1]!.address\n )),\n },\n };\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/routers/legacy-router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC","sourcesContent":["export * from './legacy-router';\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-router.js","sourceRoot":"","sources":["../../../../src/routers/legacy-router/legacy-router.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAqD;AACrD,kDAA+C;AAC/C,wDAA4D;AAC5D,oDAA4E;AAC5E,gEAAuF;AACvF,oDAAuB;AAIvB,mEAIwC;AAExC,qCAAsD;AACtD,gDAAoD;AACpD,wCAAqC;AACrC,8CAAkD;AAClD,kDAAwD;AACxD,sCAAwE;AAExE,mCAIiB;AAUjB,2BAA2B;AAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC;AAMnB;;;;GAIG;AACH,MAAa,YAAY;IAOvB,YAAY,EACV,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,aAAa,GACM;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IACM,KAAK,CAAC,KAAK,CAChB,MAAsB,EACtB,aAAuB,EACvB,QAAmB,EACnB,UAAoC,EACpC,oBAAmD;QAEnD,IAAI,QAAQ,IAAI,oBAAS,CAAC,WAAW,EAAE;YACrC,OAAO,IAAI,CAAC,YAAY,CACtB,MAAM,CAAC,QAAQ,EACf,aAAa,EACb,MAAM,EACN,UAAU,EACV,oBAAoB,CACrB,CAAC;SACH;QAED,OAAO,IAAI,CAAC,aAAa,CACvB,aAAa,EACb,MAAM,CAAC,QAAQ,EACf,MAAM,EACN,UAAU,EACV,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,UAAoB,EACpB,WAAqB,EACrB,QAAwB,EACxB,UAAoC,EACpC,aAAmC;QAEnC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAChD,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,aAAa,CACd,CAAC;QAEF,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAC3B,UAAU,EACV,WAAW,EACX,oBAAS,CAAC,WAAW,EACrB,UAAU,CACX,CAAC;QAEF,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,gBAAgB,EAAE,UAAU,CAAC,KAAK;YAClC,KAAK,EAAE,CAAC,UAAU,CAAC;YACnB,gBAAgB,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,0BAA0B,EAAE,wBAAc,CAAC,oBAAoB,CAC7D,QAAQ,EACR,CAAC,EACD,CAAC,CACF;YACD,mBAAmB,EAAE,wBAAc,CAAC,oBAAoB,CACtD,4BAAY,EACZ,CAAC,EACD,CAAC,CACF;YACD,WAAW,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,KAAK;YACL,gBAAgB,EAAE,UAAU;gBAC1B,CAAC,iCACM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,KAChD,EAAE,EAAE,IAAA,+BAAwB,EAAC,IAAI,CAAC,OAAO,CAAC,IAE9C,CAAC,CAAC,SAAS;YACb,WAAW,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SAC/B,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,UAAoB,EACpB,WAAqB,EACrB,SAAyB,EACzB,UAAoC,EACpC,aAAmC;QAEnC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,qBAAqB,CACjD,SAAS,EACT,OAAO,EACP,MAAM,EACN,aAAa,CACd,CAAC;QAEF,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAC3B,UAAU,EACV,WAAW,EACX,oBAAS,CAAC,YAAY,EACtB,UAAU,CACX,CAAC;QAEF,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,gBAAgB,EAAE,UAAU,CAAC,KAAK;YAClC,KAAK,EAAE,CAAC,UAAU,CAAC;YACnB,gBAAgB,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,0BAA0B,EAAE,wBAAc,CAAC,oBAAoB,CAC7D,OAAO,EACP,CAAC,EACD,CAAC,CACF;YACD,mBAAmB,EAAE,wBAAc,CAAC,oBAAoB,CACtD,4BAAW,EACX,CAAC,EACD,CAAC,CACF;YACD,WAAW,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,KAAK;YACL,gBAAgB,EAAE,UAAU;gBAC1B,CAAC,iCACM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,KAChD,EAAE,EAAE,IAAA,+BAAwB,EAAC,IAAI,CAAC,OAAO,CAAC,IAE9C,CAAC,CAAC,SAAS;YACb,WAAW,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SAC/B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,QAAwB,EACxB,QAAe,EACf,MAAiB,EACjB,aAAmC;QAEnC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GACnC,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAC3C,CAAC,QAAQ,CAAC,EACV,MAAM,EACN;YACE,WAAW,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW;SACxC,CACF,CAAC;QAEJ,MAAM,gBAAgB,GAAG,gBAAC,CAAC,GAAG,CAC5B,SAAS,EACT,CAAC,CAAC,KAAK,EAAE,MAAM,CAA2B,EAAE,EAAE,eAC5C,OAAA,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,MAAM,MAAA,MAAA,MAAM,CAAC,CAAC,CAAC,0CAAE,KAAK,0CAAE,QAAQ,EAAE,EAAE,CAAA,EAAA,CAC9D,CAAC;QACF,SAAG,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,aAAa,CAAC,CAAC;QAE9C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CACvC,MAAM,EACN,SAAS,EACT,QAAQ,EACR,oBAAS,CAAC,WAAW,CACtB,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,SAAyB,EACzB,OAAc,EACd,MAAiB,EACjB,aAAmC;QAEnC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GACnC,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAC5C,CAAC,SAAS,CAAC,EACX,MAAM,EACN;YACE,WAAW,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW;SACxC,CACF,CAAC;QACJ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CACvC,MAAM,EACN,SAAS,EACT,OAAO,EACP,oBAAS,CAAC,YAAY,CACvB,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,MAAiB,EACjB,SAAqC,EACrC,UAAiB,EACjB,SAAoB;QAEpB,SAAG,CAAC,KAAK,CACP,OACE,gBAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MACpD,sBAAsB,MAAM,CAAC,MAAM,mBAAmB,CACvD,CAAC;QAEF,MAAM,cAAc,GAId,EAAE,CAAC;QAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;YACtC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YAErC,IAAI,CAAC,KAAK,EAAE;gBACV,eAAM,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,gBAAgB,IAAA,sBAAa,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpE,SAAS;aACV;YAED,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;SAC/C;QAED,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;QAED,cAAc,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE;YAC/C,IAAI,SAAS,IAAI,oBAAS,CAAC,WAAW,EAAE;gBACtC,OAAO,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACzD;iBAAM;gBACL,OAAO,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACzD;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,gBAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACrE,OAAO,IAAI,oCAAqB,CAAC;gBAC/B,KAAK;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM;gBACN,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE;oBACR,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;wBACtB,cAAc,EAAE,wBAAc,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC3D,YAAY,EAAE,wBAAc,CAAC,aAAa,CAAC,6BAAY,EAAE,CAAC,CAAC;wBAC3D,WAAW,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;qBAC/B,CAAC;iBACH;gBACD,qBAAqB,EAAE,EAAE;gBACzB,2BAA2B,EAAE,EAAE;gBAC/B,iBAAiB,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpC,SAAS,EAAE,SAAS;gBACpB,UAAU;gBACV,cAAc,EAAE,IAAI,CAAC,YAAY;aAClC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE;YAC5B,SAAG,CAAC,KAAK,CACP,UAAU,EAAE,CAAC,MAAM,CAAC,OAAO,CACzB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CACzC,WAAW,IAAA,sBAAa,EAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CACtC,CAAC;SACH;QAED,OAAO,WAAW,CAAC,CAAC,CAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,OAAc,EACd,QAAe,EACf,aAAmC;QAEnC,MAAM,UAAU,GACd,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEvD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE;YAChE,WAAW,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW;SACxC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAEzC,MAAM,MAAM,GAAc,IAAI,CAAC,gBAAgB,CAC7C,OAAO,EACP,QAAQ,EACR,KAAK,EACL,IAAI,CAAC,OAAO,EACZ,EAAE,EACF,EAAE,EACF,OAAO,EACP,QAAQ,CACT,CAAC;QAEF,SAAG,CAAC,IAAI,CACN,EAAE,MAAM,EAAE,gBAAC,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAa,CAAC,EAAE,EACxC,YAAY,MAAM,CAAC,MAAM,mBAAmB,CAC7C,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,OAAc,EACd,QAAe;;QAEf,MAAM,MAAM,GACV,MAAA,IAAA,qCAA6B,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;QACxE,MAAM,WAAW,GACf,MAAA,MAAA,CAAC,MAAM,IAAA,wBAAgB,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,0CACxD,OAAO,CAAC,OAAO,CAChB,mCAAI,EAAE,CAAC;QACV,MAAM,WAAW,GACf,MAAA,MAAA,CAAC,MAAM,IAAA,wBAAgB,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,0CACxD,QAAQ,CAAC,OAAO,CACjB,mCAAI,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAqB,gBAAC,CAAC,OAAO,CAC3C,KAAK,EACL,CAAC,IAAI,EAAoB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CACxE,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,MAAM,IAAA,oBAAY,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAgC,IAAA,gBAAC,EAAC;YAC9C,kBAAkB;YAClB,CAAC,OAAO,EAAE,QAAQ,CAAC;YACnB,4BAA4B;YAC5B,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,4BAA4B;YAC5B,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACxD,8BAA8B;YAC9B,GAAG,SAAS;SACb,CAAC;aACC,MAAM,CAAC,CAAC,MAAM,EAA4B,EAAE,CAC3C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAChC;aACA,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CACnB,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAC9D;aACA,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;YAC3B,MAAM,YAAY,GAAwB,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YACxE,MAAM,YAAY,GAAwB,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAExE,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC;YAEhD,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnE,OAAO,KAAK,CAAC;YACf,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnE,OAAO,KAAK,CAAC;YAEf,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,OAAO,CAA4B,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;YACvD,OAAO;gBACL,CAAC,MAAM,EAAE,MAAM,EAAE,0BAAS,CAAC,GAAG,CAAC;gBAC/B,CAAC,MAAM,EAAE,MAAM,EAAE,0BAAS,CAAC,MAAM,CAAC;gBAClC,CAAC,MAAM,EAAE,MAAM,EAAE,0BAAS,CAAC,IAAI,CAAC;aACjC,CAAC;QACJ,CAAC,CAAC;aACD,KAAK,EAAE,CAAC;QAEX,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,gBAAgB,CACtB,OAAc,EACd,QAAe,EACf,KAAa,EACb,OAAgB,EAChB,cAAsB,EAAE,EACxB,WAAsB,EAAE,EACxB,eAAsB,OAAO,EAC7B,OAAO,GAAG,CAAC;QAEX,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBAClE,SAAS;YAEX,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,MAAM;gBACb,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAChB,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAChC,QAAQ,CAAC,IAAI,CACX,IAAI,gBAAO,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAC5D,CAAC;aACH;iBAAM,IAAI,OAAO,GAAG,CAAC,EAAE;gBACtB,IAAI,CAAC,gBAAgB,CACnB,WAAW,EACX,QAAQ,EACR,KAAK,EACL,OAAO,EACP,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,EACtB,QAAQ,EACR,YAAY,EACZ,OAAO,GAAG,CAAC,CACZ,CAAC;aACH;SACF;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,UAAU,CAChB,eAAyB,EACzB,gBAA0B,EAC1B,SAAqB,EACrB,WAAkC;QAElC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC;QAE7C,kEAAkE;QAClE,uEAAuE;QACvE,sFAAsF;QACtF,IAAI,SAAS,IAAI,oBAAS,CAAC,WAAW,EAAE;YACtC,MAAM,cAAc,GAAG,wBAAc,CAAC,oBAAoB,CACxD,eAAe,EACf,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,CACnB,CAAC;YACF,MAAM,aAAa,GAAG,wBAAc,CAAC,oBAAoB,CACvD,gBAAgB,EAChB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,WAAW,CAClB,CAAC;YAEF,MAAM,aAAa,GAAG,IAAI,sBAAK,CAC7B,KAAK,CAAC,KAAK,EACX,cAAc,CAAC,QAAQ,EACvB,aAAa,CAAC,QAAQ,CACvB,CAAC;YAEF,OAAO,IAAI,kBAAK,CAAC;gBACf,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE;oBACR;wBACE,OAAO,EAAE,aAAa;wBACtB,WAAW,EAAE,cAAc;wBAC3B,YAAY,EAAE,aAAa;qBAC5B;iBACF;gBACD,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,aAAa,GAAG,wBAAc,CAAC,oBAAoB,CACvD,eAAe,EACf,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,WAAW,CAClB,CAAC;YAEF,MAAM,cAAc,GAAG,wBAAc,CAAC,oBAAoB,CACxD,gBAAgB,EAChB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,CACnB,CAAC;YAEF,MAAM,aAAa,GAAG,IAAI,sBAAK,CAC7B,KAAK,CAAC,KAAK,EACX,aAAa,CAAC,QAAQ,EACtB,cAAc,CAAC,QAAQ,CACxB,CAAC;YAEF,OAAO,IAAI,kBAAK,CAAC;gBACf,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE;oBACR;wBACE,OAAO,EAAE,aAAa;wBACtB,WAAW,EAAE,aAAa;wBAC1B,YAAY,EAAE,cAAc;qBAC7B;iBACF;gBACD,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,qBAAqB,CAC3B,KAA4C,EAC5C,UAAmC;QAEnC,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;QAE9D,MAAM,gBAAgB,GAAG,uBAAU,CAAC,kBAAkB,CAAC,KAAK,EAAE;YAC5D,SAAS;YACT,iBAAiB;YACjB,2BAA2B,EAAE,QAAQ;YACrC,oBAAoB;YACpB,QAAQ;YACR,0BAA0B;YAC1B,qCAAqC;YACrC,gBAAgB;YAChB,gDAAgD;YAChD,4CAA4C;YAC5C,oCAAoC;YACpC,oCAAoC;YACpC,2CAA2C;YAC3C,gBAAgB;YAChB,gBAAgB;YAChB,kDAAkD;YAClD,8CAA8C;YAC9C,oCAAoC;YACpC,oCAAoC;YACpC,2CAA2C;YAC3C,iBAAiB;YACjB,QAAQ;YACR,WAAW;SACZ,CAAC,CAAC;QAEH,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CACF;AAnhBD,oCAmhBC","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber';\nimport { Logger } from '@ethersproject/logger';\nimport { SwapRouter, Trade } from '@fewprotocol/router-sdk';\nimport { ChainId, Currency, Token, TradeType } from '@fewprotocol/sdk-core';\nimport { FeeAmount, MethodParameters, Pool, Route } from '@fewprotocol/uniswap-v3-sdk';\nimport _ from 'lodash';\n\nimport { IOnChainQuoteProvider, RouteWithQuotes } from '../../providers';\nimport { IMulticallProvider } from '../../providers/multicall-provider';\nimport {\n DAI_MAINNET,\n ITokenProvider,\n USDC_MAINNET,\n} from '../../providers/token-provider';\nimport { IV3PoolProvider } from '../../providers/v3/pool-provider';\nimport { SWAP_ROUTER_02_ADDRESSES } from '../../util';\nimport { CurrencyAmount } from '../../util/amounts';\nimport { log } from '../../util/log';\nimport { routeToString } from '../../util/routes';\nimport { V3RouteWithValidQuote } from '../alpha-router';\nimport { SwapOptionsSwapRouter02, SwapRoute, V3Route } from '../router';\n\nimport {\n ADDITIONAL_BASES,\n BASES_TO_CHECK_TRADES_AGAINST,\n CUSTOM_BASES,\n} from './bases';\n\nexport type LegacyRouterParams = {\n chainId: ChainId;\n multicall2Provider: IMulticallProvider;\n poolProvider: IV3PoolProvider;\n quoteProvider: IOnChainQuoteProvider;\n tokenProvider: ITokenProvider;\n};\n\n// Interface defaults to 2.\nconst MAX_HOPS = 2;\n\nexport type LegacyRoutingConfig = {\n blockNumber?: number;\n};\n\n/**\n * Replicates the router implemented in the V3 interface.\n * Code is mostly a copy from https://github.com/Uniswap/uniswap-interface/blob/0190b5a408c13016c87e1030ffc59326c085f389/src/hooks/useBestV3Trade.ts#L22-L23\n * with React/Redux hooks removed, and refactoring to allow re-use in other routers.\n */\nexport class LegacyRouter {\n protected chainId: ChainId;\n protected multicall2Provider: IMulticallProvider;\n protected poolProvider: IV3PoolProvider;\n protected quoteProvider: IOnChainQuoteProvider;\n protected tokenProvider: ITokenProvider;\n\n constructor({\n chainId,\n multicall2Provider,\n poolProvider,\n quoteProvider,\n tokenProvider,\n }: LegacyRouterParams) {\n this.chainId = chainId;\n this.multicall2Provider = multicall2Provider;\n this.poolProvider = poolProvider;\n this.quoteProvider = quoteProvider;\n this.tokenProvider = tokenProvider;\n }\n public async route(\n amount: CurrencyAmount,\n quoteCurrency: Currency,\n swapType: TradeType,\n swapConfig?: SwapOptionsSwapRouter02,\n partialRoutingConfig?: Partial<LegacyRoutingConfig>\n ): Promise<SwapRoute | null> {\n if (swapType == TradeType.EXACT_INPUT) {\n return this.routeExactIn(\n amount.currency,\n quoteCurrency,\n amount,\n swapConfig,\n partialRoutingConfig\n );\n }\n\n return this.routeExactOut(\n quoteCurrency,\n amount.currency,\n amount,\n swapConfig,\n partialRoutingConfig\n );\n }\n\n public async routeExactIn(\n currencyIn: Currency,\n currencyOut: Currency,\n amountIn: CurrencyAmount,\n swapConfig?: SwapOptionsSwapRouter02,\n routingConfig?: LegacyRoutingConfig\n ): Promise<SwapRoute | null> {\n const tokenIn = currencyIn.wrapped;\n const tokenOut = currencyOut.wrapped;\n const routes = await this.getAllRoutes(tokenIn, tokenOut, routingConfig);\n const routeQuote = await this.findBestRouteExactIn(\n amountIn,\n tokenOut,\n routes,\n routingConfig\n );\n\n if (!routeQuote) {\n return null;\n }\n\n const trade = this.buildTrade<TradeType.EXACT_INPUT>(\n currencyIn,\n currencyOut,\n TradeType.EXACT_INPUT,\n routeQuote\n );\n\n return {\n quote: routeQuote.quote,\n quoteGasAdjusted: routeQuote.quote,\n route: [routeQuote],\n estimatedGasUsed: BigNumber.from(0),\n estimatedGasUsedQuoteToken: CurrencyAmount.fromFractionalAmount(\n tokenOut,\n 0,\n 1\n ),\n estimatedGasUsedUSD: CurrencyAmount.fromFractionalAmount(\n DAI_MAINNET!,\n 0,\n 1\n ),\n gasPriceWei: BigNumber.from(0),\n trade,\n methodParameters: swapConfig\n ? {\n ...this.buildMethodParameters(trade, swapConfig),\n to: SWAP_ROUTER_02_ADDRESSES(this.chainId),\n }\n : undefined,\n blockNumber: BigNumber.from(0),\n };\n }\n\n public async routeExactOut(\n currencyIn: Currency,\n currencyOut: Currency,\n amountOut: CurrencyAmount,\n swapConfig?: SwapOptionsSwapRouter02,\n routingConfig?: LegacyRoutingConfig\n ): Promise<SwapRoute | null> {\n const tokenIn = currencyIn.wrapped;\n const tokenOut = currencyOut.wrapped;\n const routes = await this.getAllRoutes(tokenIn, tokenOut, routingConfig);\n const routeQuote = await this.findBestRouteExactOut(\n amountOut,\n tokenIn,\n routes,\n routingConfig\n );\n\n if (!routeQuote) {\n return null;\n }\n\n const trade = this.buildTrade<TradeType.EXACT_OUTPUT>(\n currencyIn,\n currencyOut,\n TradeType.EXACT_OUTPUT,\n routeQuote\n );\n\n return {\n quote: routeQuote.quote,\n quoteGasAdjusted: routeQuote.quote,\n route: [routeQuote],\n estimatedGasUsed: BigNumber.from(0),\n estimatedGasUsedQuoteToken: CurrencyAmount.fromFractionalAmount(\n tokenIn,\n 0,\n 1\n ),\n estimatedGasUsedUSD: CurrencyAmount.fromFractionalAmount(\n DAI_MAINNET,\n 0,\n 1\n ),\n gasPriceWei: BigNumber.from(0),\n trade,\n methodParameters: swapConfig\n ? {\n ...this.buildMethodParameters(trade, swapConfig),\n to: SWAP_ROUTER_02_ADDRESSES(this.chainId),\n }\n : undefined,\n blockNumber: BigNumber.from(0),\n };\n }\n\n private async findBestRouteExactIn(\n amountIn: CurrencyAmount,\n tokenOut: Token,\n routes: V3Route[],\n routingConfig?: LegacyRoutingConfig\n ): Promise<V3RouteWithValidQuote | null> {\n const { routesWithQuotes: quotesRaw } =\n await this.quoteProvider.getQuotesManyExactIn<V3Route>(\n [amountIn],\n routes,\n {\n blockNumber: routingConfig?.blockNumber,\n }\n );\n\n const quotes100Percent = _.map(\n quotesRaw,\n ([route, quotes]: RouteWithQuotes<V3Route>) =>\n `${routeToString(route)} : ${quotes[0]?.quote?.toString()}`\n );\n log.info({ quotes100Percent }, '100% Quotes');\n\n const bestQuote = await this.getBestQuote(\n routes,\n quotesRaw,\n tokenOut,\n TradeType.EXACT_INPUT\n );\n\n return bestQuote;\n }\n\n private async findBestRouteExactOut(\n amountOut: CurrencyAmount,\n tokenIn: Token,\n routes: V3Route[],\n routingConfig?: LegacyRoutingConfig\n ): Promise<V3RouteWithValidQuote | null> {\n const { routesWithQuotes: quotesRaw } =\n await this.quoteProvider.getQuotesManyExactOut<V3Route>(\n [amountOut],\n routes,\n {\n blockNumber: routingConfig?.blockNumber,\n }\n );\n const bestQuote = await this.getBestQuote(\n routes,\n quotesRaw,\n tokenIn,\n TradeType.EXACT_OUTPUT\n );\n\n return bestQuote;\n }\n\n private async getBestQuote(\n routes: V3Route[],\n quotesRaw: RouteWithQuotes<V3Route>[],\n quoteToken: Token,\n routeType: TradeType\n ): Promise<V3RouteWithValidQuote | null> {\n log.debug(\n `Got ${\n _.filter(quotesRaw, ([_, quotes]) => !!quotes[0]).length\n } valid quotes from ${routes.length} possible routes.`\n );\n\n const routeQuotesRaw: {\n route: V3Route;\n quote: BigNumber;\n amount: CurrencyAmount;\n }[] = [];\n\n for (let i = 0; i < quotesRaw.length; i++) {\n const [route, quotes] = quotesRaw[i]!;\n const { quote, amount } = quotes[0]!;\n\n if (!quote) {\n Logger.globalLogger().debug(`No quote for ${routeToString(route)}`);\n continue;\n }\n\n routeQuotesRaw.push({ route, quote, amount });\n }\n\n if (routeQuotesRaw.length == 0) {\n return null;\n }\n\n routeQuotesRaw.sort((routeQuoteA, routeQuoteB) => {\n if (routeType == TradeType.EXACT_INPUT) {\n return routeQuoteA.quote.gt(routeQuoteB.quote) ? -1 : 1;\n } else {\n return routeQuoteA.quote.lt(routeQuoteB.quote) ? -1 : 1;\n }\n });\n\n const routeQuotes = _.map(routeQuotesRaw, ({ route, quote, amount }) => {\n return new V3RouteWithValidQuote({\n route,\n rawQuote: quote,\n amount,\n percent: 100,\n gasModel: {\n estimateGasCost: () => ({\n gasCostInToken: CurrencyAmount.fromRawAmount(quoteToken, 0),\n gasCostInUSD: CurrencyAmount.fromRawAmount(USDC_MAINNET, 0),\n gasEstimate: BigNumber.from(0),\n }),\n },\n sqrtPriceX96AfterList: [],\n initializedTicksCrossedList: [],\n quoterGasEstimate: BigNumber.from(0),\n tradeType: routeType,\n quoteToken,\n v3PoolProvider: this.poolProvider,\n });\n });\n\n for (const rq of routeQuotes) {\n log.debug(\n `Quote: ${rq.amount.toFixed(\n Math.min(rq.amount.currency.decimals, 2)\n )} Route: ${routeToString(rq.route)}`\n );\n }\n\n return routeQuotes[0]!;\n }\n\n private async getAllRoutes(\n tokenIn: Token,\n tokenOut: Token,\n routingConfig?: LegacyRoutingConfig\n ): Promise<V3Route[]> {\n const tokenPairs: [Token, Token, FeeAmount][] =\n await this.getAllPossiblePairings(tokenIn, tokenOut);\n\n const poolAccessor = await this.poolProvider.getPools(tokenPairs, {\n blockNumber: routingConfig?.blockNumber,\n });\n const pools = poolAccessor.getAllPools();\n\n const routes: V3Route[] = this.computeAllRoutes(\n tokenIn,\n tokenOut,\n pools,\n this.chainId,\n [],\n [],\n tokenIn,\n MAX_HOPS\n );\n\n log.info(\n { routes: _.map(routes, routeToString) },\n `Computed ${routes.length} possible routes.`\n );\n\n return routes;\n }\n\n private async getAllPossiblePairings(\n tokenIn: Token,\n tokenOut: Token\n ): Promise<[Token, Token, FeeAmount][]> {\n const common =\n BASES_TO_CHECK_TRADES_AGAINST(this.tokenProvider)[this.chainId] ?? [];\n const additionalA =\n (await ADDITIONAL_BASES(this.tokenProvider))[this.chainId]?.[\n tokenIn.address\n ] ?? [];\n const additionalB =\n (await ADDITIONAL_BASES(this.tokenProvider))[this.chainId]?.[\n tokenOut.address\n ] ?? [];\n const bases = [...common, ...additionalA, ...additionalB];\n\n const basePairs: [Token, Token][] = _.flatMap(\n bases,\n (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])\n );\n\n const customBases = (await CUSTOM_BASES(this.tokenProvider))[this.chainId];\n\n const allPairs: [Token, Token, FeeAmount][] = _([\n // the direct pair\n [tokenIn, tokenOut],\n // token A against all bases\n ...bases.map((base): [Token, Token] => [tokenIn, base]),\n // token B against all bases\n ...bases.map((base): [Token, Token] => [tokenOut, base]),\n // each base against all bases\n ...basePairs,\n ])\n .filter((tokens): tokens is [Token, Token] =>\n Boolean(tokens[0] && tokens[1])\n )\n .filter(\n ([tokenA, tokenB]) =>\n tokenA.address !== tokenB.address && !tokenA.equals(tokenB)\n )\n .filter(([tokenA, tokenB]) => {\n const customBasesA: Token[] | undefined = customBases?.[tokenA.address];\n const customBasesB: Token[] | undefined = customBases?.[tokenB.address];\n\n if (!customBasesA && !customBasesB) return true;\n\n if (customBasesA && !customBasesA.find((base) => tokenB.equals(base)))\n return false;\n if (customBasesB && !customBasesB.find((base) => tokenA.equals(base)))\n return false;\n\n return true;\n })\n .flatMap<[Token, Token, FeeAmount]>(([tokenA, tokenB]) => {\n return [\n [tokenA, tokenB, FeeAmount.LOW],\n [tokenA, tokenB, FeeAmount.MEDIUM],\n [tokenA, tokenB, FeeAmount.HIGH],\n ];\n })\n .value();\n\n return allPairs;\n }\n\n private computeAllRoutes(\n tokenIn: Token,\n tokenOut: Token,\n pools: Pool[],\n chainId: ChainId,\n currentPath: Pool[] = [],\n allPaths: V3Route[] = [],\n startTokenIn: Token = tokenIn,\n maxHops = 2\n ): V3Route[] {\n for (const pool of pools) {\n if (currentPath.indexOf(pool) !== -1 || !pool.involvesToken(tokenIn))\n continue;\n\n const outputToken = pool.token0.equals(tokenIn)\n ? pool.token1\n : pool.token0;\n if (outputToken.equals(tokenOut)) {\n allPaths.push(\n new V3Route([...currentPath, pool], startTokenIn, tokenOut)\n );\n } else if (maxHops > 1) {\n this.computeAllRoutes(\n outputToken,\n tokenOut,\n pools,\n chainId,\n [...currentPath, pool],\n allPaths,\n startTokenIn,\n maxHops - 1\n );\n }\n }\n\n return allPaths;\n }\n\n private buildTrade<TTradeType extends TradeType>(\n tokenInCurrency: Currency,\n tokenOutCurrency: Currency,\n tradeType: TTradeType,\n routeAmount: V3RouteWithValidQuote\n ): Trade<Currency, Currency, TTradeType> {\n const { route, amount, quote } = routeAmount;\n\n // The route, amount and quote are all in terms of wrapped tokens.\n // When constructing the Trade object the inputAmount/outputAmount must\n // use native currencies if necessary. This is so that the Trade knows to wrap/unwrap.\n if (tradeType == TradeType.EXACT_INPUT) {\n const amountCurrency = CurrencyAmount.fromFractionalAmount(\n tokenInCurrency,\n amount.numerator,\n amount.denominator\n );\n const quoteCurrency = CurrencyAmount.fromFractionalAmount(\n tokenOutCurrency,\n quote.numerator,\n quote.denominator\n );\n\n const routeCurrency = new Route(\n route.pools,\n amountCurrency.currency,\n quoteCurrency.currency\n );\n\n return new Trade({\n v4Routes: [],\n v3Routes: [\n {\n routev3: routeCurrency,\n inputAmount: amountCurrency,\n outputAmount: quoteCurrency,\n },\n ],\n v2Routes: [],\n tradeType: tradeType,\n });\n } else {\n const quoteCurrency = CurrencyAmount.fromFractionalAmount(\n tokenInCurrency,\n quote.numerator,\n quote.denominator\n );\n\n const amountCurrency = CurrencyAmount.fromFractionalAmount(\n tokenOutCurrency,\n amount.numerator,\n amount.denominator\n );\n\n const routeCurrency = new Route(\n route.pools,\n quoteCurrency.currency,\n amountCurrency.currency\n );\n\n return new Trade({\n v4Routes: [],\n v3Routes: [\n {\n routev3: routeCurrency,\n inputAmount: quoteCurrency,\n outputAmount: amountCurrency,\n },\n ],\n v2Routes: [],\n tradeType: tradeType,\n });\n }\n }\n\n private buildMethodParameters<TTradeType extends TradeType>(\n trade: Trade<Currency, Currency, TTradeType>,\n swapConfig: SwapOptionsSwapRouter02\n ): MethodParameters {\n const { recipient, slippageTolerance, deadline } = swapConfig;\n\n const methodParameters = SwapRouter.swapCallParameters(trade, {\n recipient,\n slippageTolerance,\n deadlineOrPreviousBlockhash: deadline,\n // ...(signatureData\n // ? {\n // inputTokenPermit:\n // 'allowed' in signatureData\n // ? {\n // expiry: signatureData.deadline,\n // nonce: signatureData.nonce,\n // s: signatureData.s,\n // r: signatureData.r,\n // v: signatureData.v as any,\n // }\n // : {\n // deadline: signatureData.deadline,\n // amount: signatureData.amount,\n // s: signatureData.s,\n // r: signatureData.r,\n // v: signatureData.v as any,\n // },\n // }\n // : {}),\n });\n\n return methodParameters;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/routers/router.ts"],"names":[],"mappings":";;;AACA,wDAKiC;AAYjC,gEAAkE;AAClE,gDAA6D;AAC7D,gEAKqC;AACrC,gEAAkE;AAOlE,MAAa,OAAQ,SAAQ,sBAA8B;IAA3D;;QACE,aAAQ,GAAgB,qBAAQ,CAAC,EAAE,CAAC;IACtC,CAAC;CAAA;AAFD,0BAEC;AACD,MAAa,OAAQ,SAAQ,sBAAwB;IAArD;;QACE,aAAQ,GAAgB,qBAAQ,CAAC,EAAE,CAAC;IACtC,CAAC;CAAA;AAFD,0BAEC;AACD,MAAa,OAAQ,SAAQ,sBAAwB;IAArD;;QACE,aAAQ,GAAgB,qBAAQ,CAAC,EAAE,CAAC;IACtC,CAAC;CAAA;AAFD,0BAEC;AACD,MAAa,cAAe,SAAQ,cAA2B;IAA/D;;QACE,aAAQ,GAAmB,qBAAQ,CAAC,KAAK,CAAC;IAC5C,CAAC;CAAA;AAFD,wCAEC;AACD,MAAa,UAAW,SAAQ,0BAAiC;IAAjE;;QACE,aAAQ,GAAmB,qBAAQ,CAAC,KAAK,CAAC;IAC5C,CAAC;CAAA;AAFD,gCAEC;AAwFD,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,+DAAW,CAAA;IACX,6EAAkB,CAAA;IAClB,6EAAkB,CAAA;AACpB,CAAC,EAJW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAI5B;AAqBD,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,+DAAgB,CAAA;IAChB,2DAAc,CAAA;AAChB,CAAC,EAHW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAGnB;AA2DD;;;;;;GAMG;AACH,MAAsB,OAAO;CAoB5B;AApBD,0BAoBC;AAED,MAAsB,YAAY;CASjC;AATD,oCASC","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber';\nimport {\n CondensedAddLiquidityOptions,\n MixedRouteSDK,\n Protocol,\n Trade,\n} from '@fewprotocol/router-sdk';\nimport {\n Currency,\n Fraction,\n Percent,\n Token,\n TradeType,\n} from '@fewprotocol/sdk-core';\nimport {\n SwapOptions as UniversalRouterSwapOptions,\n UniversalRouterVersion,\n} from '@fewprotocol/universal-router-sdk';\nimport { Route as V2RouteRaw } from '@fewprotocol/uniswap-v2-sdk';\nimport { Route as FewV2RouteRaw } from '@fewprotocol/v2-sdk';\nimport {\n MethodParameters as SDKMethodParameters,\n Pool,\n Position,\n Route as V3RouteRaw,\n} from '@fewprotocol/uniswap-v3-sdk';\nimport { Route as V4RouteRaw } from '@fewprotocol/uniswap-v4-sdk';\n\nimport { SimulationStatus } from '../providers';\nimport { CurrencyAmount } from '../util/amounts';\n\nimport { RouteWithValidQuote } from './alpha-router';\n\nexport class V4Route extends V4RouteRaw<Currency, Currency> {\n protocol: Protocol.V4 = Protocol.V4;\n}\nexport class V3Route extends V3RouteRaw<Token, Token> {\n protocol: Protocol.V3 = Protocol.V3;\n}\nexport class V2Route extends V2RouteRaw<Token, Token> {\n protocol: Protocol.V2 = Protocol.V2;\n}\nexport class RingFewV2Route extends FewV2RouteRaw<Token, Token> {\n protocol: Protocol.FEWV2 = Protocol.FEWV2;\n}\nexport class MixedRoute extends MixedRouteSDK<Currency, Currency> {\n protocol: Protocol.MIXED = Protocol.MIXED;\n}\nexport type SupportedRoutes = V4Route | V3Route | V2Route | RingFewV2Route | MixedRoute;\n\nexport type SwapRoute = {\n /**\n * The quote for the swap.\n * For EXACT_IN swaps this will be an amount of token out.\n * For EXACT_OUT this will be an amount of token in.\n */\n quote: CurrencyAmount;\n /**\n * The quote adjusted for the estimated gas used by the swap.\n * This is computed by estimating the amount of gas used by the swap, converting\n * this estimate to be in terms of the quote token, and subtracting that from the quote.\n * i.e. quoteGasAdjusted = quote - estimatedGasUsedQuoteToken\n */\n quoteGasAdjusted: CurrencyAmount;\n /**\n * The quote adjusted for the estimated gas used by the swap as well as the portion amount, if applicable.\n * This is computed by estimating the amount of gas used by the swap, converting\n * this estimate to be in terms of the quote token, and subtracting that from the quote.\n * Then it uses the IPortionProvider.getPortionAdjustedQuote method to adjust the quote for the portion amount.\n * i.e. quoteGasAdjusted = quote - estimatedGasUsedQuoteToken - portionAmount\n */\n quoteGasAndPortionAdjusted?: CurrencyAmount;\n /**\n * The estimate of the gas used by the swap.\n */\n estimatedGasUsed: BigNumber;\n /**\n * The estimate of the gas used by the swap in terms of the quote token.\n */\n estimatedGasUsedQuoteToken: CurrencyAmount;\n /**\n * The estimate of the gas used by the swap in USD.\n */\n estimatedGasUsedUSD: CurrencyAmount;\n /**\n * The estimate of the gas used by the swap in terms of the gas token if specified.\n * will be undefined if no gas token is specified in the AlphaRouter config\n */\n estimatedGasUsedGasToken?: CurrencyAmount;\n /*\n * The gas price used when computing quoteGasAdjusted, estimatedGasUsedQuoteToken, etc.\n */\n gasPriceWei: BigNumber;\n /**\n * The Trade object representing the swap.\n */\n trade: Trade<Currency, Currency, TradeType>;\n /**\n * The routes of the swap.\n */\n route: RouteWithValidQuote[];\n /**\n * The block number used when computing the swap.\n */\n blockNumber: BigNumber;\n /**\n * The calldata to execute the swap. Only returned if swapConfig was provided when calling the router.\n */\n methodParameters?: MethodParameters;\n /**\n * Enum that is returned if simulation was requested\n * 0 if simulation was not supported\n * 1 if simulation was attempted and failed\n * 2 if simulation was successful (simulated gas estimates are returned)\n * 3... rest of the simulation statuses\n */\n simulationStatus?: SimulationStatus;\n /**\n * Used internally within routing-api to see how many route requests\n * hit the cached routes. This is used further down the line for future perf optimizations.\n */\n hitsCachedRoute?: boolean;\n /**\n * Portion amount either echoed from upstream routing-api for exact out or calculated from portionBips for exact in\n */\n portionAmount?: CurrencyAmount;\n};\n\nexport type MethodParameters = SDKMethodParameters & { to: string };\n\nexport type SwapToRatioRoute = SwapRoute & {\n optimalRatio: Fraction;\n postSwapTargetPool: Pool;\n};\n\nexport enum SwapToRatioStatus {\n SUCCESS = 1,\n NO_ROUTE_FOUND = 2,\n NO_SWAP_NEEDED = 3,\n}\n\nexport type SwapToRatioSuccess = {\n status: SwapToRatioStatus.SUCCESS;\n result: SwapToRatioRoute;\n};\n\nexport type SwapToRatioFail = {\n status: SwapToRatioStatus.NO_ROUTE_FOUND;\n error: string;\n};\n\nexport type SwapToRatioNoSwapNeeded = {\n status: SwapToRatioStatus.NO_SWAP_NEEDED;\n};\n\nexport type SwapToRatioResponse =\n | SwapToRatioSuccess\n | SwapToRatioFail\n | SwapToRatioNoSwapNeeded;\n\nexport enum SwapType {\n UNIVERSAL_ROUTER,\n SWAP_ROUTER_02,\n}\n\n// Swap options for Universal Router and Permit2.\nexport type SwapOptionsUniversalRouter = UniversalRouterSwapOptions & {\n type: SwapType.UNIVERSAL_ROUTER;\n version: UniversalRouterVersion;\n simulate?: { fromAddress: string };\n};\n\n// Swap options for router-sdk and SwapRouter02.\nexport type SwapOptionsSwapRouter02 = {\n type: SwapType.SWAP_ROUTER_02;\n recipient: string;\n slippageTolerance: Percent;\n deadline: number;\n simulate?: { fromAddress: string };\n inputTokenPermit?: {\n v: 0 | 1 | 27 | 28;\n r: string;\n s: string;\n } & (\n | {\n amount: string;\n deadline: string;\n }\n | {\n nonce: string;\n expiry: string;\n }\n );\n};\n\nexport type SwapOptions = SwapOptionsUniversalRouter | SwapOptionsSwapRouter02;\n\n// Config passed in to determine configurations on acceptable liquidity\n// to add to a position and max iterations on the route-finding algorithm\nexport type SwapAndAddConfig = {\n maxIterations: number;\n ratioErrorTolerance: Fraction;\n};\n\n// Options for executing the swap and add.\n// If provided, calldata for executing the swap and add will also be returned.\nexport type SwapAndAddOptions = {\n swapOptions: SwapOptionsSwapRouter02;\n addLiquidityOptions: CondensedAddLiquidityOptions;\n};\n\n// SwapAndAddOptions plus all other parameters needed to encode the\n// on-chain swap-and-add process\nexport type SwapAndAddParameters = {\n // starting balance for tokenIn which will inform the tokenIn position amount\n initialBalanceTokenIn: CurrencyAmount;\n // starting balance for tokenOut which will inform the tokenOut position amount\n initialBalanceTokenOut: CurrencyAmount;\n // position details needed to create a new Position with the known liquidity amounts\n preLiquidityPosition: Position;\n};\n\n/**\n * Provides functionality for finding optimal swap routes on the Uniswap protocol.\n *\n * @export\n * @abstract\n * @class IRouter\n */\nexport abstract class IRouter<RoutingConfig> {\n /**\n * Finds the optimal way to swap tokens, and returns the route as well as a quote for the swap.\n * Considers split routes, multi-hop swaps, and gas costs.\n *\n * @abstract\n * @param amount The amount specified by the user. For EXACT_IN swaps, this is the input token amount. For EXACT_OUT swaps, this is the output token.\n * @param quoteCurrency The currency of the token we are returning a quote for. For EXACT_IN swaps, this is the output token. For EXACT_OUT, this is the input token.\n * @param tradeType The type of the trade, either exact in or exact out.\n * @param [swapOptions] Optional config for executing the swap. If provided, calldata for executing the swap will also be returned.\n * @param [partialRoutingConfig] Optional config for finding the optimal route.\n * @returns The swap route.\n */\n abstract route(\n amount: CurrencyAmount,\n quoteCurrency: Currency,\n swapType: TradeType,\n swapOptions?: SwapOptions,\n partialRoutingConfig?: Partial<RoutingConfig>\n ): Promise<SwapRoute | null>;\n}\n\nexport abstract class ISwapToRatio<RoutingConfig, SwapAndAddConfig> {\n abstract routeToRatio(\n token0Balance: CurrencyAmount,\n token1Balance: CurrencyAmount,\n position: Position,\n swapAndAddConfig: SwapAndAddConfig,\n swapAndAddOptions?: SwapAndAddOptions,\n routingConfig?: RoutingConfig\n ): Promise<SwapToRatioResponse>;\n}\n"]}