@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":"static-subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v2/static-subgraph-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainId, Token } from '@fewprotocol/sdk-core';\nimport { Pair } from '@fewprotocol/uniswap-v2-sdk';\nimport _ from 'lodash';\n\nimport { FEW_WRAPPED_NATIVE_CURRENCY, WRAPPED_NATIVE_CURRENCY } from '../../util/chains';\nimport { log } from '../../util/log';\nimport {\n ARB_ARBITRUM,\n BTC_BNB,\n BUSD_BNB,\n CELO,\n CEUR_CELO,\n CUSD_CELO,\n DAI_ARBITRUM,\n DAI_AVAX,\n DAI_BNB,\n DAI_CELO,\n DAI_MAINNET,\n DAI_MOONBEAM,\n DAI_OPTIMISM,\n DAI_UNICHAIN,\n ETH_BNB,\n FEW_USDT_HYPER_MAINNET,\n OP_OPTIMISM,\n SUSD_STORY_ODYSSEY,\n USDB_BLAST,\n USDB_BLAST_SEPOLIA,\n USDCE_ZKSYNC,\n USDC_ARBITRUM,\n USDC_AVAX,\n USDC_BASE,\n USDC_BASE_SEPOLIA,\n USDC_BNB,\n USDC_MAINNET,\n USDC_MOONBEAM,\n USDC_NATIVE_ARBITRUM,\n USDC_OPTIMISM,\n USDC_POLYGON,\n USDC_SEPOLIA,\n USDC_SONEIUM,\n USDC_STORY_MAINNET,\n USDC_UNICHAIN,\n USDC_UNICHAIN_SEPOLIA,\n USDC_WORLDCHAIN,\n USDC_ZKSYNC,\n USDT_ARBITRUM,\n USDT_BNB,\n USDT_MAINNET,\n USDT_MONAD_TESTNET,\n USDT_OPTIMISM,\n WBTC_ARBITRUM,\n WBTC_MAINNET,\n WBTC_MOONBEAM,\n WBTC_OPTIMISM,\n WBTC_WORLDCHAIN,\n WETH_POLYGON,\n WLD_WORLDCHAIN,\n WMATIC_POLYGON,\n WSTETH_MAINNET,\n} from '../token-provider';\n\nimport { IV2SubgraphProvider, V2SubgraphPool } from './subgraph-provider';\n\ntype ChainTokenList = {\n readonly [chainId in ChainId]: Token[];\n};\n\nconst BASES_TO_CHECK_TRADES_AGAINST: ChainTokenList = {\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 WSTETH_MAINNET,\n ],\n [ChainId.GOERLI]: [WRAPPED_NATIVE_CURRENCY[ChainId.GOERLI]!],\n [ChainId.SEPOLIA]: [WRAPPED_NATIVE_CURRENCY[ChainId.SEPOLIA]!, USDC_SEPOLIA],\n //v2 not deployed on [arbitrum, polygon, celo, gnosis, moonbeam, bnb, avalanche] and their testnets\n [ChainId.OPTIMISM]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.OPTIMISM]!,\n USDC_OPTIMISM,\n DAI_OPTIMISM,\n USDT_OPTIMISM,\n WBTC_OPTIMISM,\n OP_OPTIMISM,\n ],\n [ChainId.ARBITRUM_ONE]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.ARBITRUM_ONE]!,\n WBTC_ARBITRUM,\n DAI_ARBITRUM,\n USDC_ARBITRUM,\n USDC_NATIVE_ARBITRUM,\n USDT_ARBITRUM,\n ARB_ARBITRUM,\n ],\n [ChainId.ARBITRUM_GOERLI]: [],\n [ChainId.ARBITRUM_SEPOLIA]: [],\n [ChainId.OPTIMISM_GOERLI]: [],\n [ChainId.OPTIMISM_SEPOLIA]: [],\n [ChainId.POLYGON]: [USDC_POLYGON, WETH_POLYGON, WMATIC_POLYGON],\n [ChainId.POLYGON_MUMBAI]: [],\n [ChainId.CELO]: [CELO, CUSD_CELO, CEUR_CELO, DAI_CELO],\n [ChainId.CELO_ALFAJORES]: [],\n [ChainId.GNOSIS]: [],\n [ChainId.MOONBEAM]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.MOONBEAM],\n DAI_MOONBEAM,\n USDC_MOONBEAM,\n WBTC_MOONBEAM,\n ],\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 ETH_BNB,\n ],\n [ChainId.AVALANCHE]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.AVALANCHE],\n USDC_AVAX,\n DAI_AVAX,\n ],\n [ChainId.BASE_GOERLI]: [],\n [ChainId.BASE]: [WRAPPED_NATIVE_CURRENCY[ChainId.BASE], USDC_BASE],\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]: [WRAPPED_NATIVE_CURRENCY[ChainId.SONEIUM]!, USDC_SONEIUM],\n // networks exclusive to ring swap\n [ChainId.BLAST_SEPOLIA]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.BLAST_SEPOLIA]!,\n USDB_BLAST_SEPOLIA,\n ],\n [ChainId.STORY_ODYSSEY]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.STORY_ODYSSEY]!,\n SUSD_STORY_ODYSSEY,\n ],\n [ChainId.STORY_MAINNET]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.STORY_MAINNET]!,\n USDC_STORY_MAINNET,\n ],\n};\n\n/**\n * Provider that does not get data from an external source and instead returns\n * a hardcoded list of Subgraph pools.\n *\n * Since the pools are hardcoded, the liquidity/price values are dummys and should not\n * be depended on.\n *\n * Useful for instances where other data sources are unavailable. E.g. subgraph not available.\n *\n * @export\n * @class StaticV2SubgraphProvider\n */\nexport class StaticV2SubgraphProvider implements IV2SubgraphProvider {\n constructor(private chainId: ChainId) { }\n\n public async getPools(\n tokenIn?: Token,\n tokenOut?: Token\n ): Promise<V2SubgraphPool[]> {\n log.info('In static subgraph provider for V2');\n const bases = BASES_TO_CHECK_TRADES_AGAINST[this.chainId];\n\n const basePairs: [Token, Token][] = _.flatMap(\n bases,\n (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])\n );\n\n if (tokenIn && tokenOut) {\n basePairs.push(\n [tokenIn, tokenOut],\n ...bases.map((base): [Token, Token] => [tokenIn, base]),\n ...bases.map((base): [Token, Token] => [tokenOut, base])\n );\n }\n\n const pairs: [Token, Token][] = _(basePairs)\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 .value();\n\n const poolAddressSet = new Set<string>();\n\n const subgraphPools: V2SubgraphPool[] = _(pairs)\n .map(([tokenA, tokenB]) => {\n const poolAddress = Pair.getAddress(tokenA, tokenB);\n\n if (poolAddressSet.has(poolAddress)) {\n return undefined;\n }\n poolAddressSet.add(poolAddress);\n\n const [token0, token1] = tokenA.sortsBefore(tokenB)\n ? [tokenA, tokenB]\n : [tokenB, tokenA];\n\n return {\n id: poolAddress,\n liquidity: '100',\n token0: {\n id: token0.address,\n },\n token1: {\n id: token1.address,\n },\n supply: 100,\n reserve: 100,\n reserveUSD: 100,\n };\n })\n .compact()\n .value();\n\n return subgraphPools;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-provider-with-fallback.js","sourceRoot":"","sources":["../../../../src/providers/v2/subgraph-provider-with-fallback.ts"],"names":[],"mappings":";;;AAAA,wDAAmD;AACnD,wFAAmF;AAGnF;;;;;;GAMG;AACH,MAAa,+BACX,SAAQ,+DAA6C;IAGrD;;;OAGG;IACH,YAAY,SAAgC;QAC1C,KAAK,CAAC,SAAS,EAAE,qBAAQ,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;CACF;AAXD,0EAWC","sourcesContent":["import { Protocol } from '@fewprotocol/router-sdk';\nimport { SubgraphProviderWithFallBacks } from '../subgraph-provider-with-fallback';\nimport { IV2SubgraphProvider, V2SubgraphPool } from './subgraph-provider';\n\n/**\n * Provider for getting V2 subgraph pools that falls back to a different provider\n * in the event of failure.\n *\n * @export\n * @class V2SubgraphProviderWithFallBacks\n */\nexport class V2SubgraphProviderWithFallBacks\n extends SubgraphProviderWithFallBacks<V2SubgraphPool>\n implements IV2SubgraphProvider\n{\n /**\n * Creates an instance of V2SubgraphProviderWithFallBacks.\n * @param fallbacks Ordered list of `IV2SubgraphProvider` to try to get pools from.\n */\n constructor(fallbacks: IV2SubgraphProvider[]) {\n super(fallbacks, Protocol.V2);\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v2/subgraph-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainId, Token } from '@fewprotocol/sdk-core';\nimport retry from 'async-retry';\nimport Timeout from 'await-timeout';\nimport { gql, GraphQLClient } from 'graphql-request';\nimport _ from 'lodash';\n\nimport { log } from '../../util/log';\nimport { metric } from '../../util/metric';\nimport { ProviderConfig } from '../provider';\n\nexport interface V2SubgraphPool {\n id: string;\n token0: {\n id: string;\n };\n token1: {\n id: string;\n };\n supply: number;\n reserve: number;\n reserveUSD: number;\n}\n\ntype RawV2SubgraphPool = {\n id: string;\n token0: {\n symbol: string;\n id: string;\n };\n token1: {\n symbol: string;\n id: string;\n };\n totalSupply: string;\n trackedReserveETH: string;\n reserveUSD: string;\n};\n\nconst SUBGRAPH_URL_BY_CHAIN: { [chainId in ChainId]?: string } = {\n [ChainId.MAINNET]:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v2-dev',\n};\n\nconst PAGE_SIZE = 1000; // 1k is max possible query size from subgraph.\n\n/**\n * Provider for getting V2 pools from the Subgraph\n *\n * @export\n * @interface IV2SubgraphProvider\n */\nexport interface IV2SubgraphProvider {\n getPools(\n tokenIn?: Token,\n tokenOut?: Token,\n providerConfig?: ProviderConfig\n ): Promise<V2SubgraphPool[]>;\n}\n\nexport class V2SubgraphProvider implements IV2SubgraphProvider {\n private client: GraphQLClient;\n\n constructor(\n private chainId: ChainId,\n private retries = 2,\n private timeout = 360000,\n private rollback = true,\n private pageSize = PAGE_SIZE,\n private trackedEthThreshold = 0.025,\n private untrackedUsdThreshold = Number.MAX_VALUE,\n private subgraphUrlOverride?: string\n ) {\n const subgraphUrl =\n this.subgraphUrlOverride ?? SUBGRAPH_URL_BY_CHAIN[this.chainId];\n if (!subgraphUrl) {\n throw new Error(`No subgraph url for chain id: ${this.chainId}`);\n }\n this.client = new GraphQLClient(subgraphUrl);\n }\n\n public async getPools(\n _tokenIn?: Token,\n _tokenOut?: Token,\n providerConfig?: ProviderConfig\n ): Promise<V2SubgraphPool[]> {\n const beforeAll = Date.now();\n let blockNumber = providerConfig?.blockNumber\n ? await providerConfig.blockNumber\n : undefined;\n // Due to limitations with the Subgraph API this is the only way to parameterize the query.\n const query2 = gql`\n query getPools($pageSize: Int!, $id: String) {\n pairs(\n first: $pageSize\n ${blockNumber ? `block: { number: ${blockNumber} }` : ``}\n where: { id_gt: $id }\n ) {\n id\n token0 { id, symbol }\n token1 { id, symbol }\n totalSupply\n trackedReserveETH\n reserveETH\n reserveUSD\n }\n }\n `;\n\n let pools: RawV2SubgraphPool[] = [];\n\n log.info(\n `Getting V2 pools from the subgraph with page size ${this.pageSize}${\n providerConfig?.blockNumber\n ? ` as of block ${providerConfig?.blockNumber}`\n : ''\n }.`\n );\n\n let outerRetries = 0;\n await retry(\n async () => {\n const timeout = new Timeout();\n\n const getPools = async (): Promise<RawV2SubgraphPool[]> => {\n let lastId = '';\n let pairs: RawV2SubgraphPool[] = [];\n let pairsPage: RawV2SubgraphPool[] = [];\n\n // metrics variables\n let totalPages = 0;\n let retries = 0;\n\n do {\n totalPages += 1;\n\n await retry(\n async () => {\n const before = Date.now();\n const poolsResult = await this.client.request<{\n pairs: RawV2SubgraphPool[];\n }>(query2, {\n pageSize: this.pageSize,\n id: lastId,\n });\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.paginate.latency`,\n Date.now() - before\n );\n\n pairsPage = poolsResult.pairs;\n\n pairs = pairs.concat(pairsPage);\n lastId = pairs[pairs.length - 1]!.id;\n\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.paginate.pageSize`,\n pairsPage.length\n );\n },\n {\n retries: this.retries,\n onRetry: (err, retry) => {\n pools = [];\n retries += 1;\n log.error(\n { err, lastId },\n `Failed request for page of pools from subgraph. Retry attempt: ${retry}. LastId: ${lastId}`\n );\n },\n }\n );\n } while (pairsPage.length > 0);\n\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.paginate`,\n totalPages\n );\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.pairs.length`,\n pairs.length\n );\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.paginate.retries`,\n retries\n );\n\n return pairs;\n };\n\n try {\n const getPoolsPromise = getPools();\n const timerPromise = timeout.set(this.timeout).then(() => {\n throw new Error(\n `Timed out getting pools from subgraph: ${this.timeout}`\n );\n });\n pools = await Promise.race([getPoolsPromise, timerPromise]);\n return;\n } catch (err) {\n log.error({ err }, 'Error fetching V2 Subgraph Pools.');\n throw err;\n } finally {\n timeout.clear();\n }\n },\n {\n retries: this.retries,\n onRetry: (err, retry) => {\n outerRetries += 1;\n if (\n this.rollback &&\n blockNumber &&\n _.includes(err.message, 'indexed up to')\n ) {\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.indexError`,\n 1\n );\n blockNumber = blockNumber - 10;\n log.info(\n `Detected subgraph indexing error. Rolled back block number to: ${blockNumber}`\n );\n }\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.timeout`,\n 1\n );\n pools = [];\n log.info(\n { err },\n `Failed to get pools from subgraph. Retry attempt: ${retry}`\n );\n },\n }\n );\n\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.retries`,\n outerRetries\n );\n\n // Filter pools that have tracked reserve ETH less than threshold.\n // trackedReserveETH filters pools that do not involve a pool from this allowlist:\n // https://github.com/Uniswap/v2-subgraph/blob/7c82235cad7aee4cfce8ea82f0030af3d224833e/src/mappings/pricing.ts#L43\n // Which helps filter pools with manipulated prices/liquidity.\n\n // TODO: Remove. Temporary fix to ensure tokens without trackedReserveETH are in the list.\n const FEI = '0x956f47f50a910163d8bf957cf5846d573e7f87ca';\n\n const tracked = pools.filter(\n (pool) =>\n pool.token0.id == FEI ||\n pool.token1.id == FEI ||\n this.isVirtualPairBaseV2Pool(pool) ||\n parseFloat(pool.trackedReserveETH) > this.trackedEthThreshold\n );\n\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.filter.length`,\n tracked.length\n );\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.filter.percent`,\n (tracked.length / pools.length) * 100\n );\n\n const beforeFilter = Date.now();\n const poolsSanitized: V2SubgraphPool[] = pools\n .filter((pool) => {\n return (\n pool.token0.id == FEI ||\n pool.token1.id == FEI ||\n this.isVirtualPairBaseV2Pool(pool) ||\n parseFloat(pool.trackedReserveETH) > this.trackedEthThreshold ||\n parseFloat(pool.reserveUSD) > this.untrackedUsdThreshold\n );\n })\n .map((pool) => {\n return {\n id: pool.id.toLowerCase(),\n token0: {\n id: pool.token0.id.toLowerCase(),\n },\n token1: {\n id: pool.token1.id.toLowerCase(),\n },\n supply: parseFloat(pool.totalSupply),\n reserve: parseFloat(pool.trackedReserveETH),\n reserveUSD: parseFloat(pool.reserveUSD),\n };\n });\n\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.filter.latency`,\n Date.now() - beforeFilter\n );\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.untracked.length`,\n poolsSanitized.length\n );\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.untracked.percent`,\n (poolsSanitized.length / pools.length) * 100\n );\n metric.putMetric(`V2SubgraphProvider.chain_${this.chainId}.getPools`, 1);\n metric.putMetric(\n `V2SubgraphProvider.chain_${this.chainId}.getPools.latency`,\n Date.now() - beforeAll\n );\n\n log.info(\n `Got ${pools.length} V2 pools from the subgraph. ${poolsSanitized.length} after filtering`\n );\n\n return poolsSanitized;\n }\n\n // This method checks if a given pool contains the VIRTUAL token.\n public isVirtualPairBaseV2Pool(pool: RawV2SubgraphPool): boolean {\n const virtualTokenAddress =\n '0x0b3e328455c4059eeb9e3f84b5543f74e24e7e1b'.toLowerCase();\n return (\n this.chainId === ChainId.BASE &&\n (pool.token0.id.toLowerCase() === virtualTokenAddress ||\n pool.token1.id.toLowerCase() === virtualTokenAddress)\n );\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri-subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v2/uri-subgraph-provider.ts"],"names":[],"mappings":";;;AAAA,oEAA+D;AAI/D,MAAa,qBACX,SAAQ,2CAAmC;CACV;AAFnC,sDAEmC","sourcesContent":["import { URISubgraphProvider } from '../uri-subgraph-provider';\n\nimport { IV2SubgraphProvider, V2SubgraphPool } from './subgraph-provider';\n\nexport class V2URISubgraphProvider\n extends URISubgraphProvider<V2SubgraphPool>\n implements IV2SubgraphProvider {}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caching-pool-provider.js","sourceRoot":"","sources":["../../../../src/providers/v3/caching-pool-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainId, Token } from '@fewprotocol/sdk-core';\nimport { FeeAmount, Pool } from '@fewprotocol/uniswap-v3-sdk';\nimport _ from 'lodash';\n\nimport { metric, MetricLoggerUnit } from '../../util';\nimport { log } from '../../util/log';\n\nimport { ICache } from './../cache';\nimport { ProviderConfig } from './../provider';\nimport { IV3PoolProvider, V3PoolAccessor } from './pool-provider';\n\n/**\n * Provider for getting V3 pools, with functionality for caching the results.\n * Does not cache by block because we compute quotes using the on-chain quoter\n * so do not mind if the liquidity values are out of date.\n *\n * @export\n * @class CachingV3PoolProvider\n */\nexport class CachingV3PoolProvider implements IV3PoolProvider {\n private POOL_KEY = (\n chainId: ChainId,\n address: string,\n blockNumber?: number\n ) =>\n blockNumber\n ? `pool-${chainId}-${address}-${blockNumber}`\n : `pool-${chainId}-${address}`;\n\n /**\n * Creates an instance of CachingV3PoolProvider.\n * @param chainId The chain id to use.\n * @param poolProvider The provider to use to get the pools when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(\n protected chainId: ChainId,\n protected poolProvider: IV3PoolProvider,\n private cache: ICache<Pool>\n ) {}\n\n public async getPools(\n tokenPairs: [Token, Token, FeeAmount][],\n providerConfig?: ProviderConfig\n ): Promise<V3PoolAccessor> {\n const poolAddressSet: Set<string> = new Set<string>();\n const poolsToGetTokenPairs: Array<[Token, Token, FeeAmount]> = [];\n const poolsToGetAddresses: string[] = [];\n const poolAddressToPool: { [poolAddress: string]: Pool } = {};\n const blockNumber = await providerConfig?.blockNumber;\n\n for (const [tokenA, tokenB, feeAmount] of tokenPairs) {\n const { poolAddress, token0, token1 } = this.getPoolAddress(\n tokenA,\n tokenB,\n feeAmount\n );\n\n if (poolAddressSet.has(poolAddress)) {\n continue;\n }\n\n poolAddressSet.add(poolAddress);\n\n const cachedPool = await this.cache.get(\n this.POOL_KEY(this.chainId, poolAddress, blockNumber)\n );\n if (cachedPool) {\n metric.putMetric(\n 'V3_INMEMORY_CACHING_POOL_HIT_IN_MEMORY',\n 1,\n MetricLoggerUnit.None\n );\n poolAddressToPool[poolAddress] = cachedPool;\n continue;\n }\n\n metric.putMetric(\n 'V3_INMEMORY_CACHING_POOL_MISS_NOT_IN_MEMORY',\n 1,\n MetricLoggerUnit.None\n );\n poolsToGetTokenPairs.push([token0, token1, feeAmount]);\n poolsToGetAddresses.push(poolAddress);\n }\n\n log.info(\n {\n poolsFound: _.map(\n Object.values(poolAddressToPool),\n (p) => `${p.token0.symbol} ${p.token1.symbol} ${p.fee}`\n ),\n poolsToGetTokenPairs: _.map(\n poolsToGetTokenPairs,\n (t) => `${t[0].symbol} ${t[1].symbol} ${t[2]}`\n ),\n },\n `Found ${\n Object.keys(poolAddressToPool).length\n } V3 pools already in local cache. About to get liquidity and slot0s for ${\n poolsToGetTokenPairs.length\n } pools.`\n );\n\n if (poolsToGetAddresses.length > 0) {\n const poolAccessor = await this.poolProvider.getPools(\n poolsToGetTokenPairs,\n providerConfig\n );\n for (const address of poolsToGetAddresses) {\n const pool = poolAccessor.getPoolByAddress(address);\n if (pool) {\n poolAddressToPool[address] = pool;\n // We don't want to wait for this caching to complete before returning the pools.\n this.cache.set(\n this.POOL_KEY(this.chainId, address, blockNumber),\n pool\n );\n }\n }\n }\n\n return {\n getPool: (\n tokenA: Token,\n tokenB: Token,\n feeAmount: FeeAmount\n ): Pool | undefined => {\n const { poolAddress } = this.getPoolAddress(tokenA, tokenB, feeAmount);\n return poolAddressToPool[poolAddress];\n },\n getPoolByAddress: (address: string): Pool | undefined =>\n poolAddressToPool[address],\n getAllPools: (): Pool[] => Object.values(poolAddressToPool),\n };\n }\n\n public getPoolAddress(\n tokenA: Token,\n tokenB: Token,\n feeAmount: FeeAmount\n ): { poolAddress: string; token0: Token; token1: Token } {\n return this.poolProvider.getPoolAddress(tokenA, tokenB, feeAmount);\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caching-subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v3/caching-subgraph-provider.ts"],"names":[],"mappings":";;;AAEA,wDAAmD;AACnD,4EAAuE;AAIvE;;;;;GAKG;AACH,MAAa,yBACX,SAAQ,mDAAuC;IAG/C;;;;;OAKG;IACH,YACE,OAAgB,EAChB,gBAAqC,EACrC,KAA+B;QAE/B,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAjBD,8DAiBC","sourcesContent":["import { ChainId } from '@fewprotocol/sdk-core';\n\nimport { Protocol } from '@fewprotocol/router-sdk';\nimport { CachingSubgraphProvider } from '../caching-subgraph-provider';\nimport { ICache } from './../cache';\nimport { IV3SubgraphProvider, V3SubgraphPool } from './subgraph-provider';\n\n/**\n * Provider for getting V3 pools, with functionality for caching the results.\n *\n * @export\n * @class CachingV3SubgraphProvider\n */\nexport class CachingV3SubgraphProvider\n extends CachingSubgraphProvider<V3SubgraphPool>\n implements IV3SubgraphProvider\n{\n /**\n * Creates an instance of CachingV3SubgraphProvider.\n * @param chainId The chain id to use.\n * @param subgraphProvider The provider to use to get the subgraph pools when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(\n chainId: ChainId,\n subgraphProvider: IV3SubgraphProvider,\n cache: ICache<V3SubgraphPool[]>\n ) {\n super(chainId, subgraphProvider, cache, Protocol.V3);\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas-data-provider.js","sourceRoot":"","sources":["../../../../src/providers/v3/gas-data-provider.ts"],"names":[],"mappings":";;;AAIA,mGAAgG;AAChG,qCAAiD;AA4BjD,MAAa,uBAAuB;IAMlC,YACY,OAAgB,EAChB,QAAsB,EAChC,cAAuB;QAFb,YAAO,GAAP,OAAO,CAAS;QAChB,aAAQ,GAAR,QAAQ,CAAc;QAGhC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,0BAAmB,CAAC;IAC9E,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,cAA+B;QACrD,MAAM,eAAe,GAAG,mDAAwB,CAAC,OAAO,CACtD,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC;YACnD,QAAQ,EAAE,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW;SACtC,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YACtB,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;SAC3B,CAAC;IACJ,CAAC;CACF;AA7BD,0DA6BC","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber';\nimport { BaseProvider } from '@ethersproject/providers';\nimport { ChainId } from '@fewprotocol/sdk-core';\n\nimport { GasDataArbitrum__factory } from '../../types/other/factories/GasDataArbitrum__factory';\nimport { ARB_GASINFO_ADDRESS } from '../../util';\nimport { ProviderConfig } from '../provider';\n\n/**\n * Provider for getting gas constants on L2s.\n *\n * @export\n * @interface IL2GasDataProvider\n */\nexport interface IL2GasDataProvider<T> {\n /**\n * Gets the data constants needed to calculate the l1 security fee on L2s like arbitrum and optimism.\n * @returns An object that includes the data necessary for the off chain estimations.\n */\n getGasData(providerConfig?: ProviderConfig): Promise<T>;\n}\n\n/**\n * perL2TxFee is the base fee in wei for an l2 transaction.\n * perL2CalldataFee is the fee in wei per byte of calldata the swap uses. Multiply by the total bytes of the calldata.\n * perArbGasTotal is the fee in wei per unit of arbgas. Multiply this by the estimate we calculate based on ticks/hops in the gasModel.\n */\nexport type ArbitrumGasData = {\n perL2TxFee: BigNumber;\n perL1CalldataFee: BigNumber;\n perArbGasTotal: BigNumber;\n};\n\nexport class ArbitrumGasDataProvider\n implements IL2GasDataProvider<ArbitrumGasData>\n{\n protected gasFeesAddress: string;\n protected blockNumberOverride: number | Promise<number> | undefined;\n\n constructor(\n protected chainId: ChainId,\n protected provider: BaseProvider,\n gasDataAddress?: string\n ) {\n this.gasFeesAddress = gasDataAddress ? gasDataAddress : ARB_GASINFO_ADDRESS;\n }\n\n public async getGasData(providerConfig?: ProviderConfig) {\n const gasDataContract = GasDataArbitrum__factory.connect(\n this.gasFeesAddress,\n this.provider\n );\n const gasData = await gasDataContract.getPricesInWei({\n blockTag: providerConfig?.blockNumber,\n });\n const perL1CalldataByte = gasData[1];\n return {\n perL2TxFee: gasData[0],\n perL1CalldataFee: perL1CalldataByte.div(16),\n perArbGasTotal: gasData[5],\n };\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-provider.js","sourceRoot":"","sources":["../../../../src/providers/v3/pool-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber';\nimport { ChainId, Token } from '@fewprotocol/sdk-core';\nimport { computePoolAddress, FeeAmount, Pool } from '@fewprotocol/uniswap-v3-sdk';\nimport retry, { Options as RetryOptions } from 'async-retry';\n\nimport { IUniswapV3PoolState__factory } from '../../types/v3/factories/IUniswapV3PoolState__factory';\nimport { V3_CORE_FACTORY_ADDRESSES } from '../../util/addresses';\nimport { log } from '../../util/log';\nimport { IMulticallProvider, Result } from '../multicall-provider';\nimport { ILiquidity, ISlot0, PoolProvider } from '../pool-provider';\nimport { ProviderConfig } from '../provider';\n\ntype V3ISlot0 = ISlot0 & {\n sqrtPriceX96: BigNumber;\n tick: number;\n};\n\ntype V3ILiquidity = ILiquidity;\n\n/**\n * Provider or getting V3 pools.\n *\n * @export\n * @interface IV3PoolProvider\n */\nexport interface IV3PoolProvider {\n /**\n * Gets the specified pools.\n *\n * @param tokenPairs The token pairs and fee amount of the pools to get.\n * @param [providerConfig] The provider config.\n * @returns A pool accessor with methods for accessing the pools.\n */\n getPools(\n tokenPairs: [Token, Token, FeeAmount][],\n providerConfig?: ProviderConfig\n ): Promise<V3PoolAccessor>;\n\n /**\n * Gets the pool address for the specified token pair and fee tier.\n *\n * @param tokenA Token A in the pool.\n * @param tokenB Token B in the pool.\n * @param feeAmount The fee amount of the pool.\n * @returns The pool address and the two tokens.\n */\n getPoolAddress(\n tokenA: Token,\n tokenB: Token,\n feeAmount: FeeAmount\n ): { poolAddress: string; token0: Token; token1: Token };\n}\n\nexport type V3PoolAccessor = {\n getPool: (\n tokenA: Token,\n tokenB: Token,\n feeAmount: FeeAmount\n ) => Pool | undefined;\n getPoolByAddress: (address: string) => Pool | undefined;\n getAllPools: () => Pool[];\n};\n\nexport type V3PoolRetryOptions = RetryOptions;\nexport type V3PoolConstruct = [Token, Token, FeeAmount];\n\nexport class V3PoolProvider\n extends PoolProvider<\n Token,\n V3PoolConstruct,\n V3ISlot0,\n V3ILiquidity,\n V3PoolAccessor\n >\n implements IV3PoolProvider\n{\n // Computing pool addresses is slow as it requires hashing, encoding etc.\n // Addresses never change so can always be cached.\n private POOL_ADDRESS_CACHE: { [key: string]: string } = {};\n\n /**\n * Creates an instance of V4PoolProvider.\n * @param chainId The chain id to use.\n * @param multicall2Provider The multicall provider to use to get the pools.\n * @param retryOptions The retry options for each call to the multicall.\n */\n constructor(\n chainId: ChainId,\n multicall2Provider: IMulticallProvider,\n retryOptions: V3PoolRetryOptions = {\n retries: 2,\n minTimeout: 50,\n maxTimeout: 500,\n }\n ) {\n super(chainId, multicall2Provider, retryOptions);\n }\n\n public async getPools(\n tokenPairs: V3PoolConstruct[],\n providerConfig?: ProviderConfig\n ): Promise<V3PoolAccessor> {\n return await super.getPoolsInternal(tokenPairs, providerConfig);\n }\n\n public getPoolAddress(\n tokenA: Token,\n tokenB: Token,\n feeAmount: FeeAmount\n ): { poolAddress: string; token0: Token; token1: Token } {\n const { poolIdentifier, currency0, currency1 } = this.getPoolIdentifier([\n tokenA,\n tokenB,\n feeAmount,\n ]);\n return {\n poolAddress: poolIdentifier,\n token0: currency0,\n token1: currency1,\n };\n }\n\n protected override getLiquidityFunctionName(): string {\n return 'liquidity';\n }\n\n protected override getSlot0FunctionName(): string {\n return 'slot0';\n }\n\n protected override async getPoolsData<TReturn>(\n poolAddresses: string[],\n functionName: string,\n providerConfig?: ProviderConfig\n ): Promise<Result<TReturn>[]> {\n const { results, blockNumber } = await retry(async () => {\n return this.multicall2Provider.callSameFunctionOnMultipleContracts<\n any,\n TReturn\n >({\n addresses: poolAddresses,\n contractInterface: IUniswapV3PoolState__factory.createInterface(),\n functionName: functionName,\n providerConfig,\n });\n }, this.retryOptions);\n\n log.debug(`Pool data fetched as of block ${blockNumber}`);\n\n return results;\n }\n\n protected override getPoolIdentifier(pool: V3PoolConstruct): {\n poolIdentifier: string;\n currency0: Token;\n currency1: Token;\n } {\n const [tokenA, tokenB, feeAmount] = pool;\n\n const [token0, token1] = tokenA.sortsBefore(tokenB)\n ? [tokenA, tokenB]\n : [tokenB, tokenA];\n\n const cacheKey = `${this.chainId}/${token0.address}/${token1.address}/${feeAmount}`;\n\n const cachedAddress = this.POOL_ADDRESS_CACHE[cacheKey];\n\n if (cachedAddress) {\n return {\n poolIdentifier: cachedAddress,\n currency0: token0,\n currency1: token1,\n };\n }\n\n const poolAddress = computePoolAddress({\n factoryAddress: V3_CORE_FACTORY_ADDRESSES[this.chainId]!,\n tokenA: token0,\n tokenB: token1,\n fee: feeAmount,\n initCodeHashManualOverride: undefined,\n chainId: this.chainId,\n });\n\n this.POOL_ADDRESS_CACHE[cacheKey] = poolAddress;\n\n return {\n poolIdentifier: poolAddress,\n currency0: token0,\n currency1: token1,\n };\n }\n\n protected instantiatePool(\n pool: V3PoolConstruct,\n slot0: V3ISlot0,\n liquidity: V3ILiquidity\n ): Pool {\n const [token0, token1, feeAmount] = pool;\n\n return new Pool(\n token0,\n token1,\n feeAmount,\n slot0.sqrtPriceX96.toString(),\n liquidity.toString(),\n slot0.tick\n );\n }\n\n protected instantiatePoolAccessor(poolIdentifierToPool: {\n [p: string]: Pool;\n }): V3PoolAccessor {\n return {\n getPool: (\n tokenA: Token,\n tokenB: Token,\n feeAmount: FeeAmount\n ): Pool | undefined => {\n const { poolAddress } = this.getPoolAddress(tokenA, tokenB, feeAmount);\n return poolIdentifierToPool[poolAddress];\n },\n getPoolByAddress: (address: string): Pool | undefined =>\n poolIdentifierToPool[address],\n getAllPools: (): Pool[] => Object.values(poolIdentifierToPool),\n };\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v3/static-subgraph-provider.ts"],"names":[],"mappings":";;;;;;AAAA,6DAA6D;AAC7D,oDAAuD;AACvD,gEAA8D;AAC9D,gDAAwB;AACxB,oDAAuB;AAEvB,gDAAsD;AACtD,8CAAyF;AACzF,wCAAqC;AAErC,sDAsE2B;AAS3B,MAAM,6BAA6B,GAAmB;IACpD,CAAC,kBAAO,CAAC,aAAa,CAAC,EAAE;QACvB,oCAA2B,CAAC,kBAAO,CAAC,aAAa,CAAE;QACnD,uCAAsB;KACvB;IACD,CAAC,kBAAO,CAAC,OAAO,CAAC,EAAE;QACjB,gCAAuB,CAAC,kBAAO,CAAC,OAAO,CAAE;QACzC,4BAAW;QACX,6BAAY;QACZ,6BAAY;QACZ,6BAAY;QACZ,+BAAc;KACf;IACD,CAAC,kBAAO,CAAC,MAAM,CAAC,EAAE;QAChB,gCAAuB,CAAC,kBAAO,CAAC,MAAM,CAAE;QACxC,4BAAW;QACX,4BAAW;QACX,4BAAW;QACX,2BAAU;KACX;IACD,CAAC,kBAAO,CAAC,OAAO,CAAC,EAAE,CAAC,gCAAuB,CAAC,kBAAO,CAAC,OAAO,CAAE,EAAE,6BAAY,CAAC;IAC5E,CAAC,kBAAO,CAAC,QAAQ,CAAC,EAAE;QAClB,gCAAuB,CAAC,kBAAO,CAAC,QAAQ,CAAE;QAC1C,8BAAa;QACb,6BAAY;QACZ,8BAAa;QACb,8BAAa;QACb,4BAAW;KACZ;IACD,iCAAiC;IACjC,CAAC,kBAAO,CAAC,gBAAgB,CAAC,EAAE;IAC1B,wDAAwD;KACzD;IACD,CAAC,kBAAO,CAAC,YAAY,CAAC,EAAE;QACtB,gCAAuB,CAAC,kBAAO,CAAC,YAAY,CAAE;QAC9C,8BAAa;QACb,6BAAY;QACZ,8BAAa;QACb,8BAAa;QACb,6BAAY;KACb;IACD,CAAC,kBAAO,CAAC,eAAe,CAAC,EAAE;QACzB,gCAAuB,CAAC,kBAAO,CAAC,eAAe,CAAE;QACjD,qCAAoB;KACrB;IACD,CAAC,kBAAO,CAAC,gBAAgB,CAAC,EAAE;IAC1B,sDAAsD;KACvD;IACD,CAAC,kBAAO,CAAC,eAAe,CAAC,EAAE;QACzB,gCAAuB,CAAC,kBAAO,CAAC,eAAe,CAAE;QACjD,qCAAoB;QACpB,oCAAmB;QACnB,qCAAoB;QACpB,qCAAoB;KACrB;IACD,CAAC,kBAAO,CAAC,OAAO,CAAC,EAAE,CAAC,6BAAY,EAAE,6BAAY,EAAE,+BAAc,CAAC;IAC/D,CAAC,kBAAO,CAAC,cAAc,CAAC,EAAE;QACxB,mCAAkB;QAClB,gCAAuB,CAAC,kBAAO,CAAC,cAAc,CAAE;QAChD,sCAAqB;KACtB;IACD,CAAC,kBAAO,CAAC,IAAI,CAAC,EAAE,CAAC,qBAAI,EAAE,0BAAS,EAAE,0BAAS,EAAE,yBAAQ,CAAC;IACtD,CAAC,kBAAO,CAAC,cAAc,CAAC,EAAE;QACxB,+BAAc;QACd,oCAAmB;QACnB,oCAAmB;QACnB,mCAAkB;KACnB;IACD,CAAC,kBAAO,CAAC,MAAM,CAAC,EAAE;QAChB,gCAAuB,CAAC,kBAAO,CAAC,MAAM,CAAC;QACvC,4BAAW;QACX,6BAAY;QACZ,qCAAoB;KACrB;IACD,CAAC,kBAAO,CAAC,GAAG,CAAC,EAAE;QACb,gCAAuB,CAAC,kBAAO,CAAC,GAAG,CAAC;QACpC,yBAAQ;QACR,wBAAO;QACP,yBAAQ;QACR,yBAAQ;QACR,wBAAO;QACP,wBAAO;KACR;IACD,CAAC,kBAAO,CAAC,SAAS,CAAC,EAAE;QACnB,gCAAuB,CAAC,kBAAO,CAAC,SAAS,CAAC;QAC1C,0BAAS;QACT,yBAAQ;KACT;IACD,CAAC,kBAAO,CAAC,QAAQ,CAAC,EAAE;QAClB,gCAAuB,CAAC,kBAAO,CAAC,QAAQ,CAAC;QACzC,6BAAY;QACZ,8BAAa;QACb,8BAAa;KACd;IACD,CAAC,kBAAO,CAAC,WAAW,CAAC,EAAE,CAAC,gCAAuB,CAAC,kBAAO,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC,kBAAO,CAAC,IAAI,CAAC,EAAE,CAAC,gCAAuB,CAAC,kBAAO,CAAC,IAAI,CAAC,EAAE,0BAAS,CAAC;IAClE,CAAC,kBAAO,CAAC,IAAI,CAAC,EAAE,CAAC,gCAAuB,CAAC,kBAAO,CAAC,IAAI,CAAE,CAAC;IACxD,CAAC,kBAAO,CAAC,YAAY,CAAC,EAAE,CAAC,gCAAuB,CAAC,kBAAO,CAAC,YAAY,CAAE,CAAC;IACxE,CAAC,kBAAO,CAAC,SAAS,CAAC,EAAE,CAAC,gCAAuB,CAAC,kBAAO,CAAC,SAAS,CAAE,CAAC;IAClE,CAAC,kBAAO,CAAC,KAAK,CAAC,EAAE,CAAC,gCAAuB,CAAC,kBAAO,CAAC,KAAK,CAAE,EAAE,2BAAU,CAAC;IACtE,CAAC,kBAAO,CAAC,MAAM,CAAC,EAAE;QAChB,gCAAuB,CAAC,kBAAO,CAAC,MAAM,CAAE;QACxC,6BAAY;QACZ,4BAAW;KACZ;IACD,CAAC,kBAAO,CAAC,UAAU,CAAC,EAAE;QACpB,gCAAuB,CAAC,kBAAO,CAAC,UAAU,CAAE;QAC5C,gCAAe;QACf,+BAAc;QACd,gCAAe;KAChB;IACD,CAAC,kBAAO,CAAC,gBAAgB,CAAC,EAAE;QAC1B,gCAAuB,CAAC,kBAAO,CAAC,gBAAgB,CAAE;QAClD,sCAAqB;KACtB;IACD,CAAC,kBAAO,CAAC,QAAQ,CAAC,EAAE;QAClB,gCAAuB,CAAC,kBAAO,CAAC,QAAQ,CAAE;QAC1C,6BAAY;QACZ,8BAAa;KACd;IACD,CAAC,kBAAO,CAAC,aAAa,CAAC,EAAE;QACvB,gCAAuB,CAAC,kBAAO,CAAC,aAAa,CAAE;QAC/C,mCAAkB;KACnB;IACD,CAAC,kBAAO,CAAC,YAAY,CAAC,EAAE;QACtB,gCAAuB,CAAC,kBAAO,CAAC,YAAY,CAAE;QAC9C,kCAAiB;KAClB;IACD,CAAC,kBAAO,CAAC,OAAO,CAAC,EAAE,CAAC,gCAAuB,CAAC,kBAAO,CAAC,OAAO,CAAE,EAAE,6BAAY,CAAC;IAC5E,kCAAkC;IAClC,CAAC,kBAAO,CAAC,aAAa,CAAC,EAAE;QACvB,gCAAuB,CAAC,kBAAO,CAAC,aAAa,CAAE;QAC/C,mCAAkB;KACnB;IACD,CAAC,kBAAO,CAAC,aAAa,CAAC,EAAE;QACvB,gCAAuB,CAAC,kBAAO,CAAC,aAAa,CAAE;QAC/C,mCAAkB;KACnB;IACD,CAAC,kBAAO,CAAC,aAAa,CAAC,EAAE;QACvB,gCAAuB,CAAC,kBAAO,CAAC,aAAa,CAAE;QAC/C,mCAAkB;KACnB;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAa,wBAAwB;IACnC,YACU,OAAgB,EAChB,YAA6B;QAD7B,YAAO,GAAP,OAAO,CAAS;QAChB,iBAAY,GAAZ,YAAY,CAAiB;IACpC,CAAC;IAEG,KAAK,CAAC,QAAQ,CACnB,OAAe,EACf,QAAgB,EAChB,cAA+B;QAE/B,SAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,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,IAAI,OAAO,IAAI,QAAQ,EAAE;YACvB,SAAS,CAAC,IAAI,CACZ,CAAC,OAAO,EAAE,QAAQ,CAAC,EACnB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EACvD,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CACzD,CAAC;SACH;QAED,MAAM,KAAK,GAAgC,IAAA,gBAAC,EAAC,SAAS,CAAC;aACpD,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,OAAO,CAA4B,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;YACvD,OAAO;gBACL,CAAC,MAAM,EAAE,MAAM,EAAE,0BAAS,CAAC,MAAM,CAAC;gBAClC,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,SAAG,CAAC,IAAI,CACN,4CAA4C,KAAK,CAAC,MAAM,iBAAiB,CAC1E,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CACnD,KAAK,EACL,cAAc,CACf,CAAC;QACF,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAEzC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,MAAM,aAAa,GAAqB,IAAA,gBAAC,EAAC,KAAK,CAAC;aAC7C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAEhD,MAAM,WAAW,GAAG,qBAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAExE,IAAI,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;gBACnC,OAAO,SAAS,CAAC;aAClB;YACD,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAEhC,MAAM,eAAe,GAAG,cAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEjD,OAAO;gBACL,EAAE,EAAE,WAAW;gBACf,OAAO,EAAE,IAAA,0BAAgB,EAAC,GAAG,CAAC;gBAC9B,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;gBAC/B,MAAM,EAAE;oBACN,EAAE,EAAE,MAAM,CAAC,OAAO;iBACnB;gBACD,MAAM,EAAE;oBACN,EAAE,EAAE,MAAM,CAAC,OAAO;iBACnB;gBACD,uDAAuD;gBACvD,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,eAAe;aACxB,CAAC;QACJ,CAAC,CAAC;aACD,OAAO,EAAE;aACT,KAAK,EAAE,CAAC;QAEX,OAAO,aAAa,CAAC;IACvB,CAAC;CACF;AAxFD,4DAwFC","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { ChainId, Token } from '@fewprotocol/sdk-core';\nimport { FeeAmount, Pool } from '@fewprotocol/uniswap-v3-sdk';\nimport JSBI from 'jsbi';\nimport _ from 'lodash';\n\nimport { unparseFeeAmount } from '../../util/amounts';\nimport { FEW_WRAPPED_NATIVE_CURRENCY, WRAPPED_NATIVE_CURRENCY } from '../../util/chains';\nimport { log } from '../../util/log';\nimport { ProviderConfig } from '../provider';\nimport {\n ARB_ARBITRUM,\n BTC_BNB,\n BUSD_BNB,\n CELO,\n CELO_ALFAJORES,\n CEUR_CELO,\n CEUR_CELO_ALFAJORES,\n CUSD_CELO,\n CUSD_CELO_ALFAJORES,\n DAI_ARBITRUM,\n DAI_AVAX,\n DAI_BNB,\n DAI_CELO,\n DAI_CELO_ALFAJORES,\n DAI_GOERLI,\n DAI_MAINNET,\n DAI_MOONBEAM,\n DAI_OPTIMISM,\n DAI_OPTIMISM_GOERLI,\n DAI_POLYGON_MUMBAI,\n DAI_UNICHAIN,\n ETH_BNB,\n FEW_USDT_HYPER_MAINNET,\n OP_OPTIMISM,\n SUSD_STORY_ODYSSEY,\n USDB_BLAST,\n USDB_BLAST_SEPOLIA,\n USDCE_ZKSYNC,\n USDC_ARBITRUM,\n USDC_ARBITRUM_GOERLI,\n USDC_AVAX,\n USDC_BASE,\n USDC_BASE_SEPOLIA,\n USDC_BNB,\n USDC_ETHEREUM_GNOSIS,\n USDC_GOERLI,\n USDC_MAINNET,\n USDC_MOONBEAM,\n USDC_OPTIMISM,\n USDC_OPTIMISM_GOERLI,\n USDC_POLYGON,\n USDC_SEPOLIA,\n USDC_SONEIUM,\n USDC_STORY_MAINNET,\n USDC_UNICHAIN,\n USDC_UNICHAIN_SEPOLIA,\n USDC_WORLDCHAIN,\n USDC_ZKSYNC,\n USDT_ARBITRUM,\n USDT_BNB,\n USDT_GOERLI,\n USDT_MAINNET,\n USDT_MONAD_TESTNET,\n USDT_OPTIMISM,\n USDT_OPTIMISM_GOERLI,\n WBTC_ARBITRUM,\n WBTC_GNOSIS,\n WBTC_GOERLI,\n WBTC_MAINNET,\n WBTC_MOONBEAM,\n WBTC_OPTIMISM,\n WBTC_OPTIMISM_GOERLI,\n WBTC_WORLDCHAIN,\n WETH_POLYGON,\n WLD_WORLDCHAIN,\n WMATIC_POLYGON,\n WMATIC_POLYGON_MUMBAI,\n WSTETH_MAINNET,\n WXDAI_GNOSIS,\n} from '../token-provider';\n\nimport { IV3PoolProvider } from './pool-provider';\nimport { IV3SubgraphProvider, V3SubgraphPool } from './subgraph-provider';\n\ntype ChainTokenList = {\n readonly [chainId in ChainId]: Token[];\n};\n\nconst BASES_TO_CHECK_TRADES_AGAINST: ChainTokenList = {\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 WSTETH_MAINNET,\n ],\n [ChainId.GOERLI]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.GOERLI]!,\n USDT_GOERLI,\n USDC_GOERLI,\n WBTC_GOERLI,\n DAI_GOERLI,\n ],\n [ChainId.SEPOLIA]: [WRAPPED_NATIVE_CURRENCY[ChainId.SEPOLIA]!, USDC_SEPOLIA],\n [ChainId.OPTIMISM]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.OPTIMISM]!,\n USDC_OPTIMISM,\n DAI_OPTIMISM,\n USDT_OPTIMISM,\n WBTC_OPTIMISM,\n OP_OPTIMISM,\n ],\n // todo: once subgraph is created\n [ChainId.OPTIMISM_SEPOLIA]: [\n // WRAPPED_NATIVE_CURRENCY[ChainId.OPTIMISM_SEPOLIA]!,\n ],\n [ChainId.ARBITRUM_ONE]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.ARBITRUM_ONE]!,\n WBTC_ARBITRUM,\n DAI_ARBITRUM,\n USDC_ARBITRUM,\n USDT_ARBITRUM,\n ARB_ARBITRUM,\n ],\n [ChainId.ARBITRUM_GOERLI]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.ARBITRUM_GOERLI]!,\n USDC_ARBITRUM_GOERLI,\n ],\n [ChainId.ARBITRUM_SEPOLIA]: [\n // WRAPPED_NATIVE_CURRENCY[ChainId.ARBITRUM_SEPOLIA]!,\n ],\n [ChainId.OPTIMISM_GOERLI]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.OPTIMISM_GOERLI]!,\n USDC_OPTIMISM_GOERLI,\n DAI_OPTIMISM_GOERLI,\n USDT_OPTIMISM_GOERLI,\n WBTC_OPTIMISM_GOERLI,\n ],\n [ChainId.POLYGON]: [USDC_POLYGON, WETH_POLYGON, WMATIC_POLYGON],\n [ChainId.POLYGON_MUMBAI]: [\n DAI_POLYGON_MUMBAI,\n WRAPPED_NATIVE_CURRENCY[ChainId.POLYGON_MUMBAI]!,\n WMATIC_POLYGON_MUMBAI,\n ],\n [ChainId.CELO]: [CELO, CUSD_CELO, CEUR_CELO, DAI_CELO],\n [ChainId.CELO_ALFAJORES]: [\n CELO_ALFAJORES,\n CUSD_CELO_ALFAJORES,\n CEUR_CELO_ALFAJORES,\n DAI_CELO_ALFAJORES,\n ],\n [ChainId.GNOSIS]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.GNOSIS],\n WBTC_GNOSIS,\n WXDAI_GNOSIS,\n USDC_ETHEREUM_GNOSIS,\n ],\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 ETH_BNB,\n ],\n [ChainId.AVALANCHE]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.AVALANCHE],\n USDC_AVAX,\n DAI_AVAX,\n ],\n [ChainId.MOONBEAM]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.MOONBEAM],\n DAI_MOONBEAM,\n USDC_MOONBEAM,\n WBTC_MOONBEAM,\n ],\n [ChainId.BASE_GOERLI]: [WRAPPED_NATIVE_CURRENCY[ChainId.BASE_GOERLI]],\n [ChainId.BASE]: [WRAPPED_NATIVE_CURRENCY[ChainId.BASE], USDC_BASE],\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]: [WRAPPED_NATIVE_CURRENCY[ChainId.SONEIUM]!, USDC_SONEIUM],\n // networks exclusive to ring swap\n [ChainId.BLAST_SEPOLIA]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.BLAST_SEPOLIA]!,\n USDB_BLAST_SEPOLIA,\n ],\n [ChainId.STORY_ODYSSEY]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.STORY_ODYSSEY]!,\n SUSD_STORY_ODYSSEY,\n ],\n [ChainId.STORY_MAINNET]: [\n WRAPPED_NATIVE_CURRENCY[ChainId.STORY_MAINNET]!,\n USDC_STORY_MAINNET,\n ],\n};\n\n/**\n * Provider that uses a hardcoded list of V3 pools to generate a list of subgraph pools.\n *\n * Since the pools are hardcoded and the data does not come from the Subgraph, the TVL values\n * are dummys and should not be depended on.\n *\n * Useful for instances where other data sources are unavailable. E.g. Subgraph not available.\n *\n * @export\n * @class StaticV3SubgraphProvider\n */\nexport class StaticV3SubgraphProvider implements IV3SubgraphProvider {\n constructor(\n private chainId: ChainId,\n private poolProvider: IV3PoolProvider\n ) {}\n\n public async getPools(\n tokenIn?: Token,\n tokenOut?: Token,\n providerConfig?: ProviderConfig\n ): Promise<V3SubgraphPool[]> {\n log.info('In static subgraph provider for V3');\n const bases = BASES_TO_CHECK_TRADES_AGAINST[this.chainId];\n\n const basePairs: [Token, Token][] = _.flatMap(\n bases,\n (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])\n );\n\n if (tokenIn && tokenOut) {\n basePairs.push(\n [tokenIn, tokenOut],\n ...bases.map((base): [Token, Token] => [tokenIn, base]),\n ...bases.map((base): [Token, Token] => [tokenOut, base])\n );\n }\n\n const pairs: [Token, Token, FeeAmount][] = _(basePairs)\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 .flatMap<[Token, Token, FeeAmount]>(([tokenA, tokenB]) => {\n return [\n [tokenA, tokenB, FeeAmount.LOWEST],\n [tokenA, tokenB, FeeAmount.LOW],\n [tokenA, tokenB, FeeAmount.MEDIUM],\n [tokenA, tokenB, FeeAmount.HIGH],\n ];\n })\n .value();\n\n log.info(\n `V3 Static subgraph provider about to get ${pairs.length} pools on-chain`\n );\n const poolAccessor = await this.poolProvider.getPools(\n pairs,\n providerConfig\n );\n const pools = poolAccessor.getAllPools();\n\n const poolAddressSet = new Set<string>();\n const subgraphPools: V3SubgraphPool[] = _(pools)\n .map((pool) => {\n const { token0, token1, fee, liquidity } = pool;\n\n const poolAddress = Pool.getAddress(pool.token0, pool.token1, pool.fee);\n\n if (poolAddressSet.has(poolAddress)) {\n return undefined;\n }\n poolAddressSet.add(poolAddress);\n\n const liquidityNumber = JSBI.toNumber(liquidity);\n\n return {\n id: poolAddress,\n feeTier: unparseFeeAmount(fee),\n liquidity: liquidity.toString(),\n token0: {\n id: token0.address,\n },\n token1: {\n id: token1.address,\n },\n // As a very rough proxy we just use liquidity for TVL.\n tvlETH: liquidityNumber,\n tvlUSD: liquidityNumber,\n };\n })\n .compact()\n .value();\n\n return subgraphPools;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-provider-with-fallback.js","sourceRoot":"","sources":["../../../../src/providers/v3/subgraph-provider-with-fallback.ts"],"names":[],"mappings":";;;AAAA,wDAAmD;AACnD,wFAAmF;AAGnF;;;;;;GAMG;AACH,MAAa,+BACX,SAAQ,+DAA6C;IAGrD,YAAY,SAAgC;QAC1C,KAAK,CAAC,SAAS,EAAE,qBAAQ,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;CACF;AAPD,0EAOC","sourcesContent":["import { Protocol } from '@fewprotocol/router-sdk';\nimport { SubgraphProviderWithFallBacks } from '../subgraph-provider-with-fallback';\nimport { IV3SubgraphProvider, V3SubgraphPool } from './subgraph-provider';\n\n/**\n * Provider for getting V3 subgraph pools that falls back to a different provider\n * in the event of failure.\n *\n * @export\n * @class V3SubgraphProviderWithFallBacks\n */\nexport class V3SubgraphProviderWithFallBacks\n extends SubgraphProviderWithFallBacks<V3SubgraphPool>\n implements IV3SubgraphProvider\n{\n constructor(fallbacks: IV3SubgraphProvider[]) {\n super(fallbacks, Protocol.V3);\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v3/subgraph-provider.ts"],"names":[],"mappings":";;;AAAA,wDAAmD;AACnD,oDAAuD;AAGvD,4DAAwD;AAiCxD,MAAM,qBAAqB,GAAsC;IAC/D,CAAC,kBAAO,CAAC,OAAO,CAAC,EACf,4DAA4D;IAC9D,CAAC,kBAAO,CAAC,QAAQ,CAAC,EAChB,2EAA2E;IAC7E,kCAAkC;IAClC,CAAC,kBAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE;IAC9B,CAAC,kBAAO,CAAC,YAAY,CAAC,EACpB,oEAAoE;IACtE,kCAAkC;IAClC,CAAC,kBAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE;IAC9B,CAAC,kBAAO,CAAC,OAAO,CAAC,EACf,sEAAsE;IACxE,CAAC,kBAAO,CAAC,IAAI,CAAC,EACZ,iEAAiE;IACnE,CAAC,kBAAO,CAAC,MAAM,CAAC,EACd,oEAAoE;IACtE,CAAC,kBAAO,CAAC,GAAG,CAAC,EACX,uEAAuE;IACzE,CAAC,kBAAO,CAAC,SAAS,CAAC,EACjB,oEAAoE;IACtE,CAAC,kBAAO,CAAC,IAAI,CAAC,EACZ,4EAA4E;IAC9E,CAAC,kBAAO,CAAC,KAAK,CAAC,EACb,8IAA8I;CACjJ,CAAC;AAgBF,MAAa,kBACX,SAAQ,oCAAmD;IAG3D,YACE,OAAgB,EAChB,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,IAAI,EACf,mBAAmB,GAAG,IAAI,EAC1B,qBAAqB,GAAG,MAAM,CAAC,SAAS,EACxC,mBAA4B;QAE5B,KAAK,CACH,qBAAQ,CAAC,EAAE,EACX,OAAO,EACP,OAAO,EACP,OAAO,EACP,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,aAAnB,mBAAmB,cAAnB,mBAAmB,GAAI,qBAAqB,CAAC,OAAO,CAAC,CACtD,CAAC;IACJ,CAAC;IAEkB,aAAa,CAAC,WAAoB;QACnD,OAAO;;;;UAID,WAAW,CAAC,CAAC,CAAC,oBAAoB,WAAW,IAAI,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;IAmB5D,CAAC;IACH,CAAC;IAEkB,eAAe,CAChC,OAA0B;QAE1B,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE;gBACN,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;aACtB;YACD,MAAM,EAAE;gBACN,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;aACtB;YACD,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAC/C,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC;SAChD,CAAC;IACJ,CAAC;CACF;AArED,gDAqEC","sourcesContent":["import { Protocol } from '@fewprotocol/router-sdk';\nimport { ChainId, Token } from '@fewprotocol/sdk-core';\n\nimport { ProviderConfig } from '../provider';\nimport { SubgraphProvider } from '../subgraph-provider';\n\nexport interface V3SubgraphPool {\n id: string;\n feeTier: string;\n liquidity: string;\n token0: {\n id: string;\n };\n token1: {\n id: string;\n };\n tvlETH: number;\n tvlUSD: number;\n}\n\nexport type V3RawSubgraphPool = {\n id: string;\n feeTier: string;\n liquidity: string;\n token0: {\n symbol: string;\n id: string;\n };\n token1: {\n symbol: string;\n id: string;\n };\n totalValueLockedUSD: string;\n totalValueLockedETH: string;\n totalValueLockedUSDUntracked: string;\n};\n\nconst SUBGRAPH_URL_BY_CHAIN: { [chainId in ChainId]?: string } = {\n [ChainId.MAINNET]:\n 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3',\n [ChainId.OPTIMISM]:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/optimism-post-regenesis',\n // todo: add once subgraph is live\n [ChainId.OPTIMISM_SEPOLIA]: '',\n [ChainId.ARBITRUM_ONE]:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-minimal',\n // todo: add once subgraph is live\n [ChainId.ARBITRUM_SEPOLIA]: '',\n [ChainId.POLYGON]:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-polygon',\n [ChainId.CELO]:\n 'https://api.thegraph.com/subgraphs/name/jesse-sawa/uniswap-celo',\n [ChainId.GOERLI]:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-gorli',\n [ChainId.BNB]:\n 'https://api.thegraph.com/subgraphs/name/ilyamk/uniswap-v3---bnb-chain',\n [ChainId.AVALANCHE]:\n 'https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax',\n [ChainId.BASE]:\n 'https://api.studio.thegraph.com/query/48211/uniswap-v3-base/version/latest',\n [ChainId.BLAST]:\n 'https://gateway-arbitrum.network.thegraph.com/api/0ae45f0bf40ae2e73119b44ccd755967/subgraphs/id/2LHovKznvo8YmKC9ZprPjsYAZDCc4K5q4AYz8s3cnQn1',\n};\n\n/**\n * Provider for getting V3 pools from the Subgraph\n *\n * @export\n * @interface IV3SubgraphProvider\n */\nexport interface IV3SubgraphProvider {\n getPools(\n tokenIn?: Token,\n tokenOut?: Token,\n providerConfig?: ProviderConfig\n ): Promise<V3SubgraphPool[]>;\n}\n\nexport class V3SubgraphProvider\n extends SubgraphProvider<V3RawSubgraphPool, V3SubgraphPool>\n implements IV3SubgraphProvider\n{\n constructor(\n chainId: ChainId,\n retries = 2,\n timeout = 30000,\n rollback = true,\n trackedEthThreshold = 0.01,\n untrackedUsdThreshold = Number.MAX_VALUE,\n subgraphUrlOverride?: string\n ) {\n super(\n Protocol.V3,\n chainId,\n retries,\n timeout,\n rollback,\n trackedEthThreshold,\n untrackedUsdThreshold,\n subgraphUrlOverride ?? SUBGRAPH_URL_BY_CHAIN[chainId]\n );\n }\n\n protected override subgraphQuery(blockNumber?: number): string {\n return `\n query getPools($pageSize: Int!, $id: String) {\n pools(\n first: $pageSize\n ${blockNumber ? `block: { number: ${blockNumber} }` : ``}\n where: { id_gt: $id }\n ) {\n id\n token0 {\n symbol\n id\n }\n token1 {\n symbol\n id\n }\n feeTier\n liquidity\n totalValueLockedUSD\n totalValueLockedETH\n totalValueLockedUSDUntracked\n }\n }\n `;\n }\n\n protected override mapSubgraphPool(\n rawPool: V3RawSubgraphPool\n ): V3SubgraphPool {\n return {\n id: rawPool.id,\n feeTier: rawPool.feeTier,\n liquidity: rawPool.liquidity,\n token0: {\n id: rawPool.token0.id,\n },\n token1: {\n id: rawPool.token1.id,\n },\n tvlETH: parseFloat(rawPool.totalValueLockedETH),\n tvlUSD: parseFloat(rawPool.totalValueLockedUSD),\n };\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri-subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v3/uri-subgraph-provider.ts"],"names":[],"mappings":";;;AAAA,oEAA+D;AAI/D,MAAa,qBACX,SAAQ,2CAAmC;CACV;AAFnC,sDAEmC","sourcesContent":["import { URISubgraphProvider } from '../uri-subgraph-provider';\n\nimport { IV3SubgraphProvider, V3SubgraphPool } from './subgraph-provider';\n\nexport class V3URISubgraphProvider\n extends URISubgraphProvider<V3SubgraphPool>\n implements IV3SubgraphProvider {}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caching-pool-provider.js","sourceRoot":"","sources":["../../../../src/providers/v4/caching-pool-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainId, Currency } from '@fewprotocol/sdk-core';\nimport { Pool } from '@fewprotocol/uniswap-v4-sdk';\nimport _ from 'lodash';\nimport { log, metric, MetricLoggerUnit } from '../../util';\nimport { ICache } from '../cache';\nimport { ProviderConfig } from '../provider';\nimport { IV4PoolProvider, V4PoolAccessor } from './pool-provider';\n\nexport class CachingV4PoolProvider implements IV4PoolProvider {\n private POOL_KEY = (\n chainId: ChainId,\n address: string,\n blockNumber?: number\n ) =>\n blockNumber\n ? `pool-${chainId}-${address}-${blockNumber}`\n : `pool-${chainId}-${address}`;\n\n /**\n * Creates an instance of CachingV4PoolProvider.\n * @param chainId The chain id to use.\n * @param poolProvider The provider to use to get the pools when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(\n protected chainId: ChainId,\n protected poolProvider: IV4PoolProvider,\n private cache: ICache<Pool>\n ) {}\n\n public async getPools(\n currencyPairs: [Currency, Currency, number, number, string][],\n providerConfig?: ProviderConfig\n ): Promise<V4PoolAccessor> {\n const poolIdSet: Set<string> = new Set<string>();\n const poolsToGetCurrencyPairs: Array<\n [Currency, Currency, number, number, string]\n > = [];\n const poolsToGetIds: string[] = [];\n const poolIdToPool: { [poolId: string]: Pool } = {};\n const blockNumber = await providerConfig?.blockNumber;\n\n for (const [\n currencyA,\n currencyB,\n feeAmount,\n tickSpacing,\n hooks,\n ] of currencyPairs) {\n const { poolId, currency0, currency1 } = this.getPoolId(\n currencyA,\n currencyB,\n feeAmount,\n tickSpacing,\n hooks\n );\n\n if (poolIdSet.has(poolId)) {\n continue;\n }\n\n poolIdSet.add(poolId);\n\n const cachedPool = await this.cache.get(\n this.POOL_KEY(this.chainId, poolId, blockNumber)\n );\n if (cachedPool) {\n metric.putMetric(\n 'V4_INMEMORY_CACHING_POOL_HIT_IN_MEMORY',\n 1,\n MetricLoggerUnit.None\n );\n poolIdToPool[poolId] = cachedPool;\n continue;\n }\n\n metric.putMetric(\n 'V4_INMEMORY_CACHING_POOL_MISS_NOT_IN_MEMORY',\n 1,\n MetricLoggerUnit.None\n );\n poolsToGetCurrencyPairs.push([\n currency0,\n currency1,\n feeAmount,\n tickSpacing,\n hooks,\n ]);\n poolsToGetIds.push(poolId);\n }\n\n log.info(\n {\n poolsFound: _.map(\n Object.values(poolIdToPool),\n (p) => `${p.token0.symbol} ${p.token1.symbol} ${p.fee}`\n ),\n poolsToGetTokenPairs: _.map(\n poolsToGetCurrencyPairs,\n (t) => `${t[0].symbol} ${t[1].symbol} ${t[2]}`\n ),\n },\n `Found ${\n Object.keys(poolIdToPool).length\n } V4 pools already in local cache. About to get liquidity and slot0s for ${\n poolsToGetCurrencyPairs.length\n } pools.`\n );\n\n if (poolsToGetCurrencyPairs.length > 0) {\n const poolAccessor = await this.poolProvider.getPools(\n poolsToGetCurrencyPairs,\n providerConfig\n );\n for (const address of poolsToGetIds) {\n const pool = poolAccessor.getPoolById(address);\n if (pool) {\n poolIdToPool[address] = pool;\n // We don't want to wait for this caching to complete before returning the pools.\n this.cache.set(\n this.POOL_KEY(this.chainId, address, blockNumber),\n pool\n );\n }\n }\n }\n\n return {\n getPool: (\n currencyA: Currency,\n currencyB: Currency,\n fee: number,\n tickSpacing: number,\n hooks: string\n ) => {\n const { poolId } = this.poolProvider.getPoolId(\n currencyA,\n currencyB,\n fee,\n tickSpacing,\n hooks\n );\n return poolIdToPool[poolId];\n },\n getPoolById: (poolId: string) => poolIdToPool[poolId],\n getAllPools: () => Object.values(poolIdToPool),\n };\n }\n\n public getPoolId(\n currencyA: Currency,\n currencyB: Currency,\n fee: number,\n tickSpacing: number,\n hooks: string\n ): { poolId: string; currency0: Currency; currency1: Currency } {\n return this.poolProvider.getPoolId(\n currencyA,\n currencyB,\n fee,\n tickSpacing,\n hooks\n );\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caching-subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v4/caching-subgraph-provider.ts"],"names":[],"mappings":";;;AAAA,wDAAmD;AAGnD,4EAAuE;AAGvE;;;;;GAKG;AACH,MAAa,yBACX,SAAQ,mDAAuC;IAG/C;;;;;OAKG;IACH,YACE,OAAgB,EAChB,gBAAqC,EACrC,KAA+B;QAE/B,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,qBAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAjBD,8DAiBC","sourcesContent":["import { Protocol } from '@fewprotocol/router-sdk';\nimport { ChainId } from '@fewprotocol/sdk-core';\nimport { ICache } from '../cache';\nimport { CachingSubgraphProvider } from '../caching-subgraph-provider';\nimport { IV4SubgraphProvider, V4SubgraphPool } from './subgraph-provider';\n\n/**\n * Provider for getting V4 pools, with functionality for caching the results.\n *\n * @export\n * @class CachingV4SubgraphProvider\n */\nexport class CachingV4SubgraphProvider\n extends CachingSubgraphProvider<V4SubgraphPool>\n implements IV4SubgraphProvider\n{\n /**\n * Creates an instance of CachingV3SubgraphProvider.\n * @param chainId The chain id to use.\n * @param subgraphProvider The provider to use to get the subgraph pools when not in the cache.\n * @param cache Cache instance to hold cached pools.\n */\n constructor(\n chainId: ChainId,\n subgraphProvider: IV4SubgraphProvider,\n cache: ICache<V4SubgraphPool[]>\n ) {\n super(chainId, subgraphProvider, cache, Protocol.V4);\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-provider.js","sourceRoot":"","sources":["../../../../src/providers/v4/pool-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainId, Currency } from '@fewprotocol/sdk-core';\nimport { Pool } from '@fewprotocol/uniswap-v4-sdk';\nimport retry, { Options as RetryOptions } from 'async-retry';\nimport { getAddress, log, STATE_VIEW_ADDRESSES } from '../../util';\nimport { IMulticallProvider, Result } from '../multicall-provider';\nimport { ProviderConfig } from '../provider';\n\nimport { StateView__factory } from '../../types/other/factories/StateView__factory';\nimport { ILiquidity, ISlot0, PoolProvider } from '../pool-provider';\n\ntype V4ISlot0 = ISlot0 & {\n poolId: string;\n protocolFee: number;\n lpFee: number;\n};\n\ntype V4ILiquidity = ILiquidity;\n\nexport interface IV4PoolProvider {\n getPools(\n currencyPairs: V4PoolConstruct[],\n providerConfig?: ProviderConfig\n ): Promise<V4PoolAccessor>;\n\n getPoolId(\n currencyA: Currency,\n currencyB: Currency,\n fee: number,\n tickSpacing: number,\n hooks: string\n ): { poolId: string; currency0: Currency; currency1: Currency };\n}\n\nexport type V4PoolAccessor = {\n getPool: (\n currencyA: Currency,\n currencyB: Currency,\n fee: number,\n tickSpacing: number,\n hooks: string\n ) => Pool | undefined;\n getPoolById: (poolId: string) => Pool | undefined;\n getAllPools: () => Pool[];\n};\n\nexport type V4PoolRetryOptions = RetryOptions;\nexport type V4PoolConstruct = [Currency, Currency, number, number, string];\n\n// TODO: export sortsBefore from v4-sdk https://github.com/Uniswap/sdks/tree/main/sdks/v4-sdk/src/utils to avoid duplication\nexport function sortsBefore(currencyA: Currency, currencyB: Currency): boolean {\n if (currencyA.isNative) return true;\n if (currencyB.isNative) return false;\n return currencyA.wrapped.sortsBefore(currencyB.wrapped);\n}\n\nexport class V4PoolProvider\n extends PoolProvider<\n Currency,\n V4PoolConstruct,\n V4ISlot0,\n V4ILiquidity,\n V4PoolAccessor\n >\n implements IV4PoolProvider\n{\n // Computing pool id is slow as it requires hashing, encoding etc.\n // Addresses never change so can always be cached.\n private POOL_ID_CACHE: { [key: string]: string } = {};\n\n /**\n * Creates an instance of V4PoolProvider.\n * @param chainId The chain id to use.\n * @param multicall2Provider The multicall provider to use to get the pools.\n * @param retryOptions The retry options for each call to the multicall.\n */\n constructor(\n chainId: ChainId,\n multicall2Provider: IMulticallProvider,\n retryOptions: V4PoolRetryOptions = {\n retries: 2,\n minTimeout: 50,\n maxTimeout: 500,\n }\n ) {\n super(chainId, multicall2Provider, retryOptions);\n }\n\n public async getPools(\n currencyPairs: V4PoolConstruct[],\n providerConfig?: ProviderConfig\n ): Promise<V4PoolAccessor> {\n return await super.getPoolsInternal(currencyPairs, providerConfig);\n }\n\n public getPoolId(\n currencyA: Currency,\n currencyB: Currency,\n fee: number,\n tickSpacing: number,\n hooks: string\n ): { poolId: string; currency0: Currency; currency1: Currency } {\n const { poolIdentifier, currency0, currency1 } = this.getPoolIdentifier([\n currencyA,\n currencyB,\n fee,\n tickSpacing,\n hooks,\n ]);\n return { poolId: poolIdentifier, currency0, currency1 };\n }\n\n protected override getLiquidityFunctionName(): string {\n return 'getLiquidity';\n }\n\n protected override getSlot0FunctionName(): string {\n return 'getSlot0';\n }\n\n protected override async getPoolsData<TReturn>(\n poolIds: string[],\n functionName: string,\n providerConfig?: ProviderConfig\n ): Promise<Result<TReturn>[]> {\n const { results, blockNumber } = await retry(async () => {\n // NOTE: V4 pools are a singleton living under PoolsManager.\n // We have to retrieve the pool data from the state view contract.\n // To begin with, we will be consistent with how v4 subgraph retrieves the pool state - via state view.\n return this.multicall2Provider.callSameFunctionOnContractWithMultipleParams<\n string[],\n TReturn\n >({\n address: STATE_VIEW_ADDRESSES[this.chainId]!,\n contractInterface: StateView__factory.createInterface(),\n functionName: functionName,\n functionParams: poolIds.map((poolId) => [poolId]),\n providerConfig,\n });\n }, this.retryOptions);\n\n log.debug(`Pool data fetched as of block ${blockNumber}`);\n\n return results;\n }\n\n protected override getPoolIdentifier(pool: V4PoolConstruct): {\n poolIdentifier: string;\n currency0: Currency;\n currency1: Currency;\n } {\n const [currencyA, currencyB, fee, tickSpacing, hooks] = pool;\n\n const [currency0, currency1] = sortsBefore(currencyA, currencyB)\n ? [currencyA, currencyB]\n : [currencyB, currencyA];\n const currency0Addr = getAddress(currency0);\n const currency1Addr = getAddress(currency1);\n\n const cacheKey = `${this.chainId}/${currency0Addr}/${currency1Addr}/${fee}/${tickSpacing}/${hooks}`;\n\n const cachedId = this.POOL_ID_CACHE[cacheKey];\n\n if (cachedId) {\n return { poolIdentifier: cachedId, currency0, currency1 };\n }\n\n const poolId = Pool.getPoolId(\n currency0,\n currency1,\n fee,\n tickSpacing,\n hooks\n );\n\n this.POOL_ID_CACHE[cacheKey] = poolId;\n\n return { poolIdentifier: poolId, currency0, currency1 };\n }\n\n protected instantiatePool(\n pool: V4PoolConstruct,\n slot0: V4ISlot0,\n liquidity: V4ILiquidity\n ): Pool {\n const [currency0, currency1, fee, tickSpacing, hooks] = pool;\n\n return new Pool(\n currency0,\n currency1,\n fee,\n tickSpacing,\n hooks,\n slot0.sqrtPriceX96.toString(),\n liquidity.toString(),\n slot0.tick\n );\n }\n\n protected instantiatePoolAccessor(poolIdentifierToPool: {\n [p: string]: Pool;\n }): V4PoolAccessor {\n return {\n getPool: (\n currencyA: Currency,\n currencyB: Currency,\n fee: number,\n tickSpacing: number,\n hooks: string\n ): Pool | undefined => {\n const { poolIdentifier } = this.getPoolIdentifier([\n currencyA,\n currencyB,\n fee,\n tickSpacing,\n hooks,\n ]);\n return poolIdentifierToPool[poolIdentifier];\n },\n getPoolById: (poolId: string): Pool | undefined =>\n poolIdentifierToPool[poolId],\n getAllPools: (): Pool[] => Object.values(poolIdentifierToPool),\n };\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v4/static-subgraph-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainId, Currency } from '@fewprotocol/sdk-core';\nimport { Pool } from '@fewprotocol/uniswap-v4-sdk';\nimport _ from 'lodash';\n\nimport {\n getAddress,\n getApplicableV4FeesTickspacingsHooks,\n log,\n} from '../../util';\nimport { BASES_TO_CHECK_TRADES_AGAINST } from '../caching-subgraph-provider';\n\nimport JSBI from 'jsbi';\nimport { ProviderConfig } from '../provider';\nimport { IV4PoolProvider, V4PoolConstruct } from './pool-provider';\nimport { IV4SubgraphProvider, V4SubgraphPool } from './subgraph-provider';\n\nexport class StaticV4SubgraphProvider implements IV4SubgraphProvider {\n constructor(\n private chainId: ChainId,\n private poolProvider: IV4PoolProvider,\n private v4PoolParams: Array<\n [number, number, string]\n > = getApplicableV4FeesTickspacingsHooks(chainId)\n ) {}\n\n public async getPools(\n currencyIn?: Currency,\n currencyOut?: Currency,\n providerConfig?: ProviderConfig\n ): Promise<V4SubgraphPool[]> {\n log.info('In static subgraph provider for V4');\n const bases = BASES_TO_CHECK_TRADES_AGAINST[this.chainId];\n\n const basePairs: [Currency, Currency][] = _.flatMap(\n bases,\n (base): [Currency, Currency][] =>\n bases.map((otherBase) => [base, otherBase])\n );\n\n if (currencyIn && currencyOut) {\n basePairs.push(\n [currencyIn, currencyOut],\n ...bases.map((base): [Currency, Currency] => [currencyIn, base]),\n ...bases.map((base): [Currency, Currency] => [currencyOut, base])\n );\n }\n\n const pairs: V4PoolConstruct[] = _(basePairs)\n .filter((tokens): tokens is [Currency, Currency] =>\n Boolean(tokens[0] && tokens[1])\n )\n .filter(\n ([tokenA, tokenB]) =>\n tokenA.wrapped.address !== tokenB.wrapped.address &&\n !tokenA.equals(tokenB)\n )\n .flatMap<V4PoolConstruct>(([tokenA, tokenB]) => {\n const tokensWithPoolParams: Array<\n [Currency, Currency, number, number, string]\n > = this.v4PoolParams.map(([feeAmount, tickSpacing, hooks]) => {\n return [tokenA, tokenB, feeAmount, tickSpacing, hooks];\n });\n\n return tokensWithPoolParams;\n })\n .value();\n\n log.info(\n `V4 Static subgraph provider about to get ${pairs.length} pools on-chain`\n );\n const poolAccessor = await this.poolProvider.getPools(\n pairs,\n providerConfig\n );\n const pools = poolAccessor.getAllPools();\n\n const poolAddressSet = new Set<string>();\n const subgraphPools: V4SubgraphPool[] = _(pools)\n .map((pool) => {\n const { token0, token1, fee, tickSpacing, hooks, liquidity } = pool;\n\n const poolAddress = Pool.getPoolId(\n token0,\n token1,\n fee,\n tickSpacing,\n hooks\n );\n\n if (poolAddressSet.has(poolAddress)) {\n return undefined;\n }\n poolAddressSet.add(poolAddress);\n\n const liquidityNumber = JSBI.toNumber(liquidity);\n\n return {\n id: poolAddress,\n feeTier: fee.toString(),\n tickSpacing: tickSpacing.toString(),\n hooks: hooks,\n liquidity: liquidity.toString(),\n token0: {\n id: getAddress(token0),\n },\n token1: {\n id: getAddress(token1),\n },\n // As a very rough proxy we just use liquidity for TVL.\n tvlETH: liquidityNumber,\n tvlUSD: liquidityNumber,\n };\n })\n .compact()\n .value();\n\n return subgraphPools;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-provider-with-fallback.js","sourceRoot":"","sources":["../../../../src/providers/v4/subgraph-provider-with-fallback.ts"],"names":[],"mappings":";;;AAAA,wDAAmD;AACnD,wFAAmF;AAGnF,MAAa,+BACX,SAAQ,+DAA6C;IAGrD,YAAY,SAAgC;QAC1C,KAAK,CAAC,SAAS,EAAE,qBAAQ,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;CACF;AAPD,0EAOC","sourcesContent":["import { Protocol } from '@fewprotocol/router-sdk';\nimport { SubgraphProviderWithFallBacks } from '../subgraph-provider-with-fallback';\nimport { IV4SubgraphProvider, V4SubgraphPool } from './subgraph-provider';\n\nexport class V4SubgraphProviderWithFallBacks\n extends SubgraphProviderWithFallBacks<V4SubgraphPool>\n implements IV4SubgraphProvider\n{\n constructor(fallbacks: IV4SubgraphProvider[]) {\n super(fallbacks, Protocol.V4);\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v4/subgraph-provider.ts"],"names":[],"mappings":";;;AAAA,wDAAmD;AACnD,oDAA0D;AAG1D,4DAAwD;AAqCxD,MAAM,qBAAqB,GAAsC;IAC/D,CAAC,kBAAO,CAAC,OAAO,CAAC,EAAE,EAAE;CACtB,CAAC;AAgBF,MAAa,kBACX,SAAQ,oCAAmD;IAG3D,YACE,OAAgB,EAChB,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,IAAI,EACf,mBAAmB,GAAG,IAAI,EAC1B,qBAAqB,GAAG,MAAM,CAAC,SAAS,EACxC,mBAA4B;QAE5B,KAAK,CACH,qBAAQ,CAAC,EAAE,EACX,OAAO,EACP,OAAO,EACP,OAAO,EACP,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,aAAnB,mBAAmB,cAAnB,mBAAmB,GAAI,qBAAqB,CAAC,OAAO,CAAC,CACtD,CAAC;IACJ,CAAC;IAEkB,aAAa,CAAC,WAAoB;QACnD,OAAO;;;;UAID,WAAW,CAAC,CAAC,CAAC,oBAAoB,WAAW,IAAI,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;IAqB5D,CAAC;IACH,CAAC;IAEkB,eAAe,CAChC,OAA0B;QAE1B,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE;gBACN,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;aACtB;YACD,MAAM,EAAE;gBACN,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;aACtB;YACD,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAC/C,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC;SAChD,CAAC;IACJ,CAAC;CACF;AAzED,gDAyEC","sourcesContent":["import { Protocol } from '@fewprotocol/router-sdk';\nimport { ChainId, Currency } from '@fewprotocol/sdk-core';\n\nimport { ProviderConfig } from '../provider';\nimport { SubgraphProvider } from '../subgraph-provider';\n\nexport interface V4SubgraphPool {\n id: string; // v4 pool id is the internal PoolId from pool manager\n feeTier: string;\n tickSpacing: string; // TODO: waiting on v4 subgraph to return tickSpacing\n hooks: string;\n liquidity: string;\n token0: {\n id: string;\n };\n token1: {\n id: string;\n };\n tvlETH: number;\n tvlUSD: number;\n}\n\nexport type V4RawSubgraphPool = {\n id: string;\n feeTier: string;\n tickSpacing: string; // TODO: waiting on v4 subgraph to return tickSpacing\n hooks: string;\n liquidity: string;\n token0: {\n symbol: string;\n id: string;\n };\n token1: {\n symbol: string;\n id: string;\n };\n totalValueLockedUSD: string;\n totalValueLockedETH: string;\n totalValueLockedUSDUntracked: string;\n};\n\nconst SUBGRAPH_URL_BY_CHAIN: { [chainId in ChainId]?: string } = {\n [ChainId.SEPOLIA]: '',\n};\n\n/**\n * Provider for getting V4 pools from the Subgraph\n *\n * @export\n * @interface IV4SubgraphProvider\n */\nexport interface IV4SubgraphProvider {\n getPools(\n currencyIn?: Currency,\n currencyOut?: Currency,\n providerConfig?: ProviderConfig\n ): Promise<V4SubgraphPool[]>;\n}\n\nexport class V4SubgraphProvider\n extends SubgraphProvider<V4RawSubgraphPool, V4SubgraphPool>\n implements IV4SubgraphProvider\n{\n constructor(\n chainId: ChainId,\n retries = 2,\n timeout = 30000,\n rollback = true,\n trackedEthThreshold = 0.01,\n untrackedUsdThreshold = Number.MAX_VALUE,\n subgraphUrlOverride?: string\n ) {\n super(\n Protocol.V4,\n chainId,\n retries,\n timeout,\n rollback,\n trackedEthThreshold,\n untrackedUsdThreshold,\n subgraphUrlOverride ?? SUBGRAPH_URL_BY_CHAIN[chainId]\n );\n }\n\n protected override subgraphQuery(blockNumber?: number): string {\n return `\n query getPools($pageSize: Int!, $id: String) {\n pools(\n first: $pageSize\n ${blockNumber ? `block: { number: ${blockNumber} }` : ``}\n where: { id_gt: $id }\n ) {\n id\n token0 {\n symbol\n id\n }\n token1 {\n symbol\n id\n }\n feeTier\n tickSpacing\n hooks\n liquidity\n totalValueLockedUSD\n totalValueLockedETH\n totalValueLockedUSDUntracked\n }\n }\n `;\n }\n\n protected override mapSubgraphPool(\n rawPool: V4RawSubgraphPool\n ): V4SubgraphPool {\n return {\n id: rawPool.id,\n feeTier: rawPool.feeTier,\n tickSpacing: rawPool.tickSpacing,\n hooks: rawPool.hooks,\n liquidity: rawPool.liquidity,\n token0: {\n id: rawPool.token0.id,\n },\n token1: {\n id: rawPool.token1.id,\n },\n tvlETH: parseFloat(rawPool.totalValueLockedETH),\n tvlUSD: parseFloat(rawPool.totalValueLockedUSD),\n };\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri-subgraph-provider.js","sourceRoot":"","sources":["../../../../src/providers/v4/uri-subgraph-provider.ts"],"names":[],"mappings":";;;AAAA,oEAA+D;AAG/D,MAAa,qBACX,SAAQ,2CAAmC;CACV;AAFnC,sDAEmC","sourcesContent":["import { URISubgraphProvider } from '../uri-subgraph-provider';\nimport { IV4SubgraphProvider, V4SubgraphPool } from './subgraph-provider';\n\nexport class V4URISubgraphProvider\n extends URISubgraphProvider<V4SubgraphPool>\n implements IV4SubgraphProvider {}\n"]}
@@ -187,6 +187,10 @@ export declare type AlphaRouterParams = {
187
187
  * All the supported mixed chains configuration
188
188
  */
189
189
  mixedSupported?: ChainId[];
190
+ /**
191
+ * All the supported mixed cross-liquidity high v3 tvl pools against low-to-mid v4 pools chains configuration
192
+ */
193
+ mixedCrossLiquidityV3AgainstV4Supported?: ChainId[];
190
194
  /**
191
195
  * The v4 pool params to be used for the v4 pool provider.
192
196
  * fee tiers, tickspacings, and hook addresses
@@ -197,6 +201,11 @@ export declare type AlphaRouterParams = {
197
201
  * Because a wrong fix might impact prod success rate and/or latency.
198
202
  */
199
203
  cachedRoutesCacheInvalidationFixRolloutPercentage?: number;
204
+ /**
205
+ * All the chains that have the cache invalidation enabled
206
+ * https://linear.app/uniswap/issue/ROUTE-467/tenderly-simulation-during-caching-lambda
207
+ */
208
+ deleteCacheEnabledChains?: ChainId[];
200
209
  };
201
210
  export declare class MapWithLowerCaseKey<V> extends Map<string, V> {
202
211
  set(key: string, value: V): this;