@xspswap/smart-order-router 1.0.0
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.
- package/CHANGELOG.md +255 -0
- package/LICENSE +674 -0
- package/README.md +189 -0
- package/build/main/index.d.ts +3 -0
- package/build/main/index.js +20 -0
- package/build/main/providers/cache-node.d.ts +9 -0
- package/build/main/providers/cache-node.js +19 -0
- package/build/main/providers/cache.d.ts +13 -0
- package/build/main/providers/cache.js +3 -0
- package/build/main/providers/caching/route/index.d.ts +2 -0
- package/build/main/providers/caching/route/index.js +19 -0
- package/build/main/providers/caching/route/model/cache-mode.d.ts +16 -0
- package/build/main/providers/caching/route/model/cache-mode.js +21 -0
- package/build/main/providers/caching/route/model/cached-route.d.ts +23 -0
- package/build/main/providers/caching/route/model/cached-route.js +24 -0
- package/build/main/providers/caching/route/model/cached-routes.d.ts +63 -0
- package/build/main/providers/caching/route/model/cached-routes.js +73 -0
- package/build/main/providers/caching/route/model/index.d.ts +3 -0
- package/build/main/providers/caching/route/model/index.js +20 -0
- package/build/main/providers/caching/route/route-caching-provider.d.ts +91 -0
- package/build/main/providers/caching/route/route-caching-provider.js +65 -0
- package/build/main/providers/caching-gas-provider.d.ts +23 -0
- package/build/main/providers/caching-gas-provider.js +37 -0
- package/build/main/providers/caching-token-list-provider.d.ts +40 -0
- package/build/main/providers/caching-token-list-provider.js +123 -0
- package/build/main/providers/caching-token-provider.d.ts +25 -0
- package/build/main/providers/caching-token-provider.js +113 -0
- package/build/main/providers/eip-1559-gas-price-provider.d.ts +31 -0
- package/build/main/providers/eip-1559-gas-price-provider.js +66 -0
- package/build/main/providers/eth-estimate-gas-provider.d.ts +14 -0
- package/build/main/providers/eth-estimate-gas-provider.js +72 -0
- package/build/main/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
- package/build/main/providers/eth-gas-station-info-gas-price-provider.js +37 -0
- package/build/main/providers/gas-price-provider.d.ts +10 -0
- package/build/main/providers/gas-price-provider.js +10 -0
- package/build/main/providers/index.d.ts +37 -0
- package/build/main/providers/index.js +54 -0
- package/build/main/providers/legacy-gas-price-provider.d.ts +7 -0
- package/build/main/providers/legacy-gas-price-provider.js +20 -0
- package/build/main/providers/multicall-provider.d.ts +82 -0
- package/build/main/providers/multicall-provider.js +15 -0
- package/build/main/providers/multicall-uniswap-provider.d.ts +37 -0
- package/build/main/providers/multicall-uniswap-provider.js +163 -0
- package/build/main/providers/on-chain-gas-price-provider.d.ts +19 -0
- package/build/main/providers/on-chain-gas-price-provider.js +33 -0
- package/build/main/providers/on-chain-quote-provider.d.ts +221 -0
- package/build/main/providers/on-chain-quote-provider.js +511 -0
- package/build/main/providers/provider.d.ts +10 -0
- package/build/main/providers/provider.js +3 -0
- package/build/main/providers/simulation-provider.d.ts +42 -0
- package/build/main/providers/simulation-provider.js +130 -0
- package/build/main/providers/static-gas-price-provider.d.ts +7 -0
- package/build/main/providers/static-gas-price-provider.js +13 -0
- package/build/main/providers/swap-router-provider.d.ts +31 -0
- package/build/main/providers/swap-router-provider.js +42 -0
- package/build/main/providers/tenderly-simulation-provider.d.ts +43 -0
- package/build/main/providers/tenderly-simulation-provider.js +244 -0
- package/build/main/providers/token-provider.d.ts +45 -0
- package/build/main/providers/token-provider.js +121 -0
- package/build/main/providers/token-validator-provider.d.ts +42 -0
- package/build/main/providers/token-validator-provider.js +95 -0
- package/build/main/providers/uri-subgraph-provider.d.ts +20 -0
- package/build/main/providers/uri-subgraph-provider.js +65 -0
- package/build/main/providers/v2/caching-pool-provider.d.ts +34 -0
- package/build/main/providers/v2/caching-pool-provider.js +88 -0
- package/build/main/providers/v2/caching-subgraph-provider.d.ts +23 -0
- package/build/main/providers/v2/caching-subgraph-provider.js +34 -0
- package/build/main/providers/v2/pool-provider.d.ts +60 -0
- package/build/main/providers/v2/pool-provider.js +110 -0
- package/build/main/providers/v2/quote-provider.d.ts +33 -0
- package/build/main/providers/v2/quote-provider.js +91 -0
- package/build/main/providers/v2/static-subgraph-provider.d.ts +20 -0
- package/build/main/providers/v2/static-subgraph-provider.js +73 -0
- package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +19 -0
- package/build/main/providers/v2/subgraph-provider-with-fallback.js +35 -0
- package/build/main/providers/v2/subgraph-provider.d.ts +34 -0
- package/build/main/providers/v2/subgraph-provider.js +135 -0
- package/build/main/providers/v2/uri-subgraph-provider.d.ts +4 -0
- package/build/main/providers/v2/uri-subgraph-provider.js +8 -0
- package/build/main/providers/v3/caching-pool-provider.d.ts +33 -0
- package/build/main/providers/v3/caching-pool-provider.js +77 -0
- package/build/main/providers/v3/caching-subgraph-provider.d.ts +23 -0
- package/build/main/providers/v3/caching-subgraph-provider.js +34 -0
- package/build/main/providers/v3/gas-data-provider.d.ts +30 -0
- package/build/main/providers/v3/gas-data-provider.js +3 -0
- package/build/main/providers/v3/pool-provider.d.ts +61 -0
- package/build/main/providers/v3/pool-provider.js +125 -0
- package/build/main/providers/v3/static-subgraph-provider.d.ts +21 -0
- package/build/main/providers/v3/static-subgraph-provider.js +100 -0
- package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +15 -0
- package/build/main/providers/v3/subgraph-provider-with-fallback.js +31 -0
- package/build/main/providers/v3/subgraph-provider.d.ts +37 -0
- package/build/main/providers/v3/subgraph-provider.js +137 -0
- package/build/main/providers/v3/uri-subgraph-provider.d.ts +4 -0
- package/build/main/providers/v3/uri-subgraph-provider.js +8 -0
- package/build/main/routers/alpha-router/alpha-router.d.ts +267 -0
- package/build/main/routers/alpha-router/alpha-router.js +762 -0
- package/build/main/routers/alpha-router/config.d.ts +4 -0
- package/build/main/routers/alpha-router/config.js +61 -0
- package/build/main/routers/alpha-router/entities/index.d.ts +1 -0
- package/build/main/routers/alpha-router/entities/index.js +18 -0
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +163 -0
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +143 -0
- package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +19 -0
- package/build/main/routers/alpha-router/functions/best-swap-route.js +344 -0
- package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
- package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js +18 -0
- package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +8 -0
- package/build/main/routers/alpha-router/functions/compute-all-routes.js +72 -0
- package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +78 -0
- package/build/main/routers/alpha-router/functions/get-candidate-pools.js +704 -0
- package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +83 -0
- package/build/main/routers/alpha-router/gas-models/gas-model.js +39 -0
- package/build/main/routers/alpha-router/gas-models/index.d.ts +2 -0
- package/build/main/routers/alpha-router/gas-models/index.js +19 -0
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +25 -0
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +171 -0
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +29 -0
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +167 -0
- package/build/main/routers/alpha-router/gas-models/v3/gas-costs.d.ts +6 -0
- package/build/main/routers/alpha-router/gas-models/v3/gas-costs.js +43 -0
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +25 -0
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +223 -0
- package/build/main/routers/alpha-router/index.d.ts +4 -0
- package/build/main/routers/alpha-router/index.js +21 -0
- package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +68 -0
- package/build/main/routers/alpha-router/quoters/base-quoter.js +61 -0
- package/build/main/routers/alpha-router/quoters/index.d.ts +5 -0
- package/build/main/routers/alpha-router/quoters/index.js +22 -0
- package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +20 -0
- package/build/main/routers/alpha-router/quoters/mixed-quoter.js +130 -0
- package/build/main/routers/alpha-router/quoters/model/index.d.ts +1 -0
- package/build/main/routers/alpha-router/quoters/model/index.js +18 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.js +3 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.js +3 -0
- package/build/main/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
- package/build/main/routers/alpha-router/quoters/model/results/index.js +19 -0
- package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +21 -0
- package/build/main/routers/alpha-router/quoters/v2-quoter.js +122 -0
- package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
- package/build/main/routers/alpha-router/quoters/v3-quoter.js +125 -0
- package/build/main/routers/index.d.ts +4 -0
- package/build/main/routers/index.js +21 -0
- package/build/main/routers/legacy-router/bases.d.ts +28 -0
- package/build/main/routers/legacy-router/bases.js +58 -0
- package/build/main/routers/legacy-router/index.d.ts +1 -0
- package/build/main/routers/legacy-router/index.js +18 -0
- package/build/main/routers/legacy-router/legacy-router.d.ts +42 -0
- package/build/main/routers/legacy-router/legacy-router.js +289 -0
- package/build/main/routers/router.d.ts +165 -0
- package/build/main/routers/router.js +52 -0
- package/build/main/tsconfig.tsbuildinfo +1 -0
- package/build/main/types/other/factories/Erc20__factory.d.ts +45 -0
- package/build/main/types/other/factories/Erc20__factory.js +240 -0
- package/build/main/types/other/factories/GasDataArbitrum__factory.d.ts +18 -0
- package/build/main/types/other/factories/GasDataArbitrum__factory.js +58 -0
- package/build/main/types/other/factories/GasPriceOracle__factory.d.ts +46 -0
- package/build/main/types/other/factories/GasPriceOracle__factory.js +316 -0
- package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
- package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js +156 -0
- package/build/main/types/other/factories/ITokenValidator__factory.d.ts +22 -0
- package/build/main/types/other/factories/ITokenValidator__factory.js +78 -0
- package/build/main/types/other/factories/Permit2__factory.d.ts +87 -0
- package/build/main/types/other/factories/Permit2__factory.js +941 -0
- package/build/main/types/other/factories/SwapRouter02__factory.d.ts +67 -0
- package/build/main/types/other/factories/SwapRouter02__factory.js +1103 -0
- package/build/main/types/v2/factories/IUniswapV2Pair__factory.d.ts +35 -0
- package/build/main/types/v2/factories/IUniswapV2Pair__factory.js +671 -0
- package/build/main/types/v3/factories/IERC20Metadata__factory.d.ts +35 -0
- package/build/main/types/v3/factories/IERC20Metadata__factory.js +242 -0
- package/build/main/types/v3/factories/IQuoterV2__factory.d.ts +41 -0
- package/build/main/types/v3/factories/IQuoterV2__factory.js +220 -0
- package/build/main/types/v3/factories/IUniswapV3PoolState__factory.d.ts +22 -0
- package/build/main/types/v3/factories/IUniswapV3PoolState__factory.js +266 -0
- package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +61 -0
- package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.js +132 -0
- package/build/main/util/addresses.d.ts +25 -0
- package/build/main/util/addresses.js +59 -0
- package/build/main/util/amounts.d.ts +8 -0
- package/build/main/util/amounts.js +51 -0
- package/build/main/util/callData.d.ts +1 -0
- package/build/main/util/callData.js +6 -0
- package/build/main/util/chains.d.ts +34 -0
- package/build/main/util/chains.js +128 -0
- package/build/main/util/gas-factory-helpers.d.ts +24 -0
- package/build/main/util/gas-factory-helpers.js +294 -0
- package/build/main/util/index.d.ts +7 -0
- package/build/main/util/index.js +24 -0
- package/build/main/util/log.d.ts +3 -0
- package/build/main/util/log.js +97 -0
- package/build/main/util/methodParameters.d.ts +5 -0
- package/build/main/util/methodParameters.js +108 -0
- package/build/main/util/metric.d.ts +48 -0
- package/build/main/util/metric.js +59 -0
- package/build/main/util/protocols.d.ts +2 -0
- package/build/main/util/protocols.js +18 -0
- package/build/main/util/routes.d.ts +8 -0
- package/build/main/util/routes.js +60 -0
- package/build/main/util/unsupported-tokens.d.ts +37 -0
- package/build/main/util/unsupported-tokens.js +1119 -0
- package/build/module/index.d.ts +3 -0
- package/build/module/index.js +4 -0
- package/build/module/providers/cache-node.d.ts +9 -0
- package/build/module/providers/cache-node.js +15 -0
- package/build/module/providers/cache.d.ts +13 -0
- package/build/module/providers/cache.js +2 -0
- package/build/module/providers/caching/route/index.d.ts +2 -0
- package/build/module/providers/caching/route/index.js +3 -0
- package/build/module/providers/caching/route/model/cache-mode.d.ts +16 -0
- package/build/module/providers/caching/route/model/cache-mode.js +18 -0
- package/build/module/providers/caching/route/model/cached-route.d.ts +23 -0
- package/build/module/providers/caching/route/model/cached-route.js +20 -0
- package/build/module/providers/caching/route/model/cached-routes.d.ts +63 -0
- package/build/module/providers/caching/route/model/cached-routes.js +66 -0
- package/build/module/providers/caching/route/model/index.d.ts +3 -0
- package/build/module/providers/caching/route/model/index.js +4 -0
- package/build/module/providers/caching/route/route-caching-provider.d.ts +91 -0
- package/build/module/providers/caching/route/route-caching-provider.js +61 -0
- package/build/module/providers/caching-gas-provider.d.ts +23 -0
- package/build/module/providers/caching-gas-provider.js +33 -0
- package/build/module/providers/caching-token-list-provider.d.ts +40 -0
- package/build/module/providers/caching-token-list-provider.js +116 -0
- package/build/module/providers/caching-token-provider.d.ts +25 -0
- package/build/module/providers/caching-token-provider.js +106 -0
- package/build/module/providers/eip-1559-gas-price-provider.d.ts +31 -0
- package/build/module/providers/eip-1559-gas-price-provider.js +59 -0
- package/build/module/providers/eth-estimate-gas-provider.d.ts +14 -0
- package/build/module/providers/eth-estimate-gas-provider.js +80 -0
- package/build/module/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
- package/build/module/providers/eth-gas-station-info-gas-price-provider.js +30 -0
- package/build/module/providers/gas-price-provider.d.ts +10 -0
- package/build/module/providers/gas-price-provider.js +6 -0
- package/build/module/providers/index.d.ts +37 -0
- package/build/module/providers/index.js +38 -0
- package/build/module/providers/legacy-gas-price-provider.d.ts +7 -0
- package/build/module/providers/legacy-gas-price-provider.js +16 -0
- package/build/module/providers/multicall-provider.d.ts +82 -0
- package/build/module/providers/multicall-provider.js +11 -0
- package/build/module/providers/multicall-uniswap-provider.d.ts +37 -0
- package/build/module/providers/multicall-uniswap-provider.js +156 -0
- package/build/module/providers/on-chain-gas-price-provider.d.ts +19 -0
- package/build/module/providers/on-chain-gas-price-provider.js +29 -0
- package/build/module/providers/on-chain-quote-provider.d.ts +221 -0
- package/build/module/providers/on-chain-quote-provider.js +505 -0
- package/build/module/providers/provider.d.ts +10 -0
- package/build/module/providers/provider.js +2 -0
- package/build/module/providers/simulation-provider.d.ts +42 -0
- package/build/module/providers/simulation-provider.js +132 -0
- package/build/module/providers/static-gas-price-provider.d.ts +7 -0
- package/build/module/providers/static-gas-price-provider.js +9 -0
- package/build/module/providers/swap-router-provider.d.ts +31 -0
- package/build/module/providers/swap-router-provider.js +38 -0
- package/build/module/providers/tenderly-simulation-provider.d.ts +43 -0
- package/build/module/providers/tenderly-simulation-provider.js +239 -0
- package/build/module/providers/token-provider.d.ts +45 -0
- package/build/module/providers/token-provider.js +110 -0
- package/build/module/providers/token-validator-provider.d.ts +42 -0
- package/build/module/providers/token-validator-provider.js +88 -0
- package/build/module/providers/uri-subgraph-provider.d.ts +20 -0
- package/build/module/providers/uri-subgraph-provider.js +58 -0
- package/build/module/providers/v2/caching-pool-provider.d.ts +34 -0
- package/build/module/providers/v2/caching-pool-provider.js +81 -0
- package/build/module/providers/v2/caching-subgraph-provider.d.ts +23 -0
- package/build/module/providers/v2/caching-subgraph-provider.js +30 -0
- package/build/module/providers/v2/pool-provider.d.ts +60 -0
- package/build/module/providers/v2/pool-provider.js +103 -0
- package/build/module/providers/v2/quote-provider.d.ts +33 -0
- package/build/module/providers/v2/quote-provider.js +87 -0
- package/build/module/providers/v2/static-subgraph-provider.d.ts +20 -0
- package/build/module/providers/v2/static-subgraph-provider.js +66 -0
- package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +19 -0
- package/build/module/providers/v2/subgraph-provider-with-fallback.js +31 -0
- package/build/module/providers/v2/subgraph-provider.d.ts +34 -0
- package/build/module/providers/v2/subgraph-provider.js +136 -0
- package/build/module/providers/v2/uri-subgraph-provider.d.ts +4 -0
- package/build/module/providers/v2/uri-subgraph-provider.js +4 -0
- package/build/module/providers/v3/caching-pool-provider.d.ts +33 -0
- package/build/module/providers/v3/caching-pool-provider.js +70 -0
- package/build/module/providers/v3/caching-subgraph-provider.d.ts +23 -0
- package/build/module/providers/v3/caching-subgraph-provider.js +30 -0
- package/build/module/providers/v3/gas-data-provider.d.ts +30 -0
- package/build/module/providers/v3/gas-data-provider.js +2 -0
- package/build/module/providers/v3/pool-provider.d.ts +61 -0
- package/build/module/providers/v3/pool-provider.js +118 -0
- package/build/module/providers/v3/static-subgraph-provider.d.ts +21 -0
- package/build/module/providers/v3/static-subgraph-provider.js +93 -0
- package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +15 -0
- package/build/module/providers/v3/subgraph-provider-with-fallback.js +27 -0
- package/build/module/providers/v3/subgraph-provider.d.ts +37 -0
- package/build/module/providers/v3/subgraph-provider.js +124 -0
- package/build/module/providers/v3/uri-subgraph-provider.d.ts +4 -0
- package/build/module/providers/v3/uri-subgraph-provider.js +4 -0
- package/build/module/routers/alpha-router/alpha-router.d.ts +267 -0
- package/build/module/routers/alpha-router/alpha-router.js +760 -0
- package/build/module/routers/alpha-router/config.d.ts +4 -0
- package/build/module/routers/alpha-router/config.js +57 -0
- package/build/module/routers/alpha-router/entities/index.d.ts +1 -0
- package/build/module/routers/alpha-router/entities/index.js +2 -0
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +163 -0
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +134 -0
- package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +19 -0
- package/build/module/routers/alpha-router/functions/best-swap-route.js +336 -0
- package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
- package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.js +14 -0
- package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +8 -0
- package/build/module/routers/alpha-router/functions/compute-all-routes.js +65 -0
- package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +78 -0
- package/build/module/routers/alpha-router/functions/get-candidate-pools.js +715 -0
- package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +83 -0
- package/build/module/routers/alpha-router/gas-models/gas-model.js +34 -0
- package/build/module/routers/alpha-router/gas-models/index.d.ts +2 -0
- package/build/module/routers/alpha-router/gas-models/index.js +3 -0
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +25 -0
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +164 -0
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +29 -0
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +160 -0
- package/build/module/routers/alpha-router/gas-models/v3/gas-costs.d.ts +6 -0
- package/build/module/routers/alpha-router/gas-models/v3/gas-costs.js +37 -0
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +25 -0
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +216 -0
- package/build/module/routers/alpha-router/index.d.ts +4 -0
- package/build/module/routers/alpha-router/index.js +5 -0
- package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +68 -0
- package/build/module/routers/alpha-router/quoters/base-quoter.js +54 -0
- package/build/module/routers/alpha-router/quoters/index.d.ts +5 -0
- package/build/module/routers/alpha-router/quoters/index.js +6 -0
- package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +20 -0
- package/build/module/routers/alpha-router/quoters/mixed-quoter.js +123 -0
- package/build/module/routers/alpha-router/quoters/model/index.d.ts +1 -0
- package/build/module/routers/alpha-router/quoters/model/index.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/index.js +3 -0
- package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +21 -0
- package/build/module/routers/alpha-router/quoters/v2-quoter.js +115 -0
- package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
- package/build/module/routers/alpha-router/quoters/v3-quoter.js +118 -0
- package/build/module/routers/index.d.ts +4 -0
- package/build/module/routers/index.js +5 -0
- package/build/module/routers/legacy-router/bases.d.ts +28 -0
- package/build/module/routers/legacy-router/bases.js +54 -0
- package/build/module/routers/legacy-router/index.d.ts +1 -0
- package/build/module/routers/legacy-router/index.js +2 -0
- package/build/module/routers/legacy-router/legacy-router.d.ts +42 -0
- package/build/module/routers/legacy-router/legacy-router.js +290 -0
- package/build/module/routers/router.d.ts +165 -0
- package/build/module/routers/router.js +44 -0
- package/build/module/tsconfig.module.tsbuildinfo +1 -0
- package/build/module/types/other/factories/Erc20__factory.d.ts +45 -0
- package/build/module/types/other/factories/Erc20__factory.js +236 -0
- package/build/module/types/other/factories/GasDataArbitrum__factory.d.ts +18 -0
- package/build/module/types/other/factories/GasDataArbitrum__factory.js +54 -0
- package/build/module/types/other/factories/GasPriceOracle__factory.d.ts +46 -0
- package/build/module/types/other/factories/GasPriceOracle__factory.js +312 -0
- package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
- package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.js +152 -0
- package/build/module/types/other/factories/ITokenValidator__factory.d.ts +22 -0
- package/build/module/types/other/factories/ITokenValidator__factory.js +74 -0
- package/build/module/types/other/factories/Permit2__factory.d.ts +87 -0
- package/build/module/types/other/factories/Permit2__factory.js +937 -0
- package/build/module/types/other/factories/SwapRouter02__factory.d.ts +67 -0
- package/build/module/types/other/factories/SwapRouter02__factory.js +1099 -0
- package/build/module/types/v2/factories/IUniswapV2Pair__factory.d.ts +35 -0
- package/build/module/types/v2/factories/IUniswapV2Pair__factory.js +667 -0
- package/build/module/types/v3/factories/IERC20Metadata__factory.d.ts +35 -0
- package/build/module/types/v3/factories/IERC20Metadata__factory.js +238 -0
- package/build/module/types/v3/factories/IQuoterV2__factory.d.ts +41 -0
- package/build/module/types/v3/factories/IQuoterV2__factory.js +216 -0
- package/build/module/types/v3/factories/IUniswapV3PoolState__factory.d.ts +22 -0
- package/build/module/types/v3/factories/IUniswapV3PoolState__factory.js +262 -0
- package/build/module/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +61 -0
- package/build/module/types/v3/factories/UniswapInterfaceMulticall__factory.js +128 -0
- package/build/module/util/addresses.d.ts +25 -0
- package/build/module/util/addresses.js +70 -0
- package/build/module/util/amounts.d.ts +8 -0
- package/build/module/util/amounts.js +41 -0
- package/build/module/util/callData.d.ts +1 -0
- package/build/module/util/callData.js +3 -0
- package/build/module/util/chains.d.ts +34 -0
- package/build/module/util/chains.js +120 -0
- package/build/module/util/gas-factory-helpers.d.ts +24 -0
- package/build/module/util/gas-factory-helpers.js +277 -0
- package/build/module/util/index.d.ts +7 -0
- package/build/module/util/index.js +8 -0
- package/build/module/util/log.d.ts +3 -0
- package/build/module/util/log.js +93 -0
- package/build/module/util/methodParameters.d.ts +5 -0
- package/build/module/util/methodParameters.js +106 -0
- package/build/module/util/metric.d.ts +48 -0
- package/build/module/util/metric.js +53 -0
- package/build/module/util/protocols.d.ts +2 -0
- package/build/module/util/protocols.js +14 -0
- package/build/module/util/routes.d.ts +8 -0
- package/build/module/util/routes.js +50 -0
- package/build/module/util/unsupported-tokens.d.ts +37 -0
- package/build/module/util/unsupported-tokens.js +1116 -0
- package/package.json +133 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WNATIVE_ON = exports.USDC_ON = exports.USDT_ON = exports.DAI_ON = exports.TokenProvider = exports.WXDC_XDC = exports.USDT_XDC = exports.PRNT_XDC = exports.SRX_XDC = exports.XTT_XDC = exports.XSP_XDC = exports.WBTC_XDC_APOTHEM = exports.DAI_XDC_APOTHEM = exports.USDC_XDC_APOTHEM = exports.USDT_XDC_APOTHEM = void 0;
|
|
7
|
+
const sdk_core_1 = require("@uniswap/sdk-core");
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const IERC20Metadata__factory_1 = require("../types/v3/factories/IERC20Metadata__factory");
|
|
10
|
+
const util_1 = require("../util");
|
|
11
|
+
// Some well known tokens on each chain for seeding cache / testing.
|
|
12
|
+
exports.USDT_XDC_APOTHEM = new sdk_core_1.Token(util_1.ChainId.XDC_APOTHEM, '0xac4cdD44931d4A0Ff6B1Ea9206e02FeaC8EB9a50', 6, 'USDT', 'Tether Token');
|
|
13
|
+
exports.USDC_XDC_APOTHEM = new sdk_core_1.Token(util_1.ChainId.XDC_APOTHEM, '0xDF5038D080Ca5bd21c6c90F0b004306a26Af4bA8', 18, 'USDC', 'USDC');
|
|
14
|
+
exports.DAI_XDC_APOTHEM = new sdk_core_1.Token(util_1.ChainId.XDC_APOTHEM, '0xE46554Ad93a7046C85f2dA0C20EbD68e41f11b36', 18, 'DAI', 'DAI Stablecoin on XDC testnet');
|
|
15
|
+
exports.WBTC_XDC_APOTHEM = new sdk_core_1.Token(util_1.ChainId.XDC_APOTHEM, '0x885c04a08FbE1C6059f407E36c35B165704D1A03', 8, 'WBTC', 'Wrapped BTC');
|
|
16
|
+
exports.XSP_XDC = new sdk_core_1.Token(util_1.ChainId.XDC, '0x36726235dAdbdb4658D33E62a249dCA7c4B2bC68', 18, 'XSP', 'XSwapProtocol');
|
|
17
|
+
exports.XTT_XDC = new sdk_core_1.Token(util_1.ChainId.XDC, '0x17476dc3eda45aD916cEAdDeA325B240A7FB259D', 18, 'XTT', 'XSwap Treasury Token');
|
|
18
|
+
exports.SRX_XDC = new sdk_core_1.Token(util_1.ChainId.XDC, '0x5D5f074837f5d4618B3916ba74De1Bf9662a3fEd', 18, 'SRX', 'StoreX');
|
|
19
|
+
exports.PRNT_XDC = new sdk_core_1.Token(util_1.ChainId.XDC, '0x0e11710aad67e7427cfbc12c353284c2e335f62c', 18, 'PRNT', 'PrimeNumbers Token');
|
|
20
|
+
exports.USDT_XDC = new sdk_core_1.Token(util_1.ChainId.XDC, '0xd4b5f10d61916bd6e0860144a91ac658de8a1437', 6, 'xUSDT', 'USDT@xinfin');
|
|
21
|
+
exports.WXDC_XDC = new sdk_core_1.Token(util_1.ChainId.XDC, '0x951857744785e80e2de051c32ee7b25f9c458c42', 18, 'WXDC', 'Wrapped XDC');
|
|
22
|
+
class TokenProvider {
|
|
23
|
+
constructor(chainId, multicall2Provider) {
|
|
24
|
+
this.chainId = chainId;
|
|
25
|
+
this.multicall2Provider = multicall2Provider;
|
|
26
|
+
}
|
|
27
|
+
async getTokens(_addresses, providerConfig) {
|
|
28
|
+
const addressToToken = {};
|
|
29
|
+
const symbolToToken = {};
|
|
30
|
+
const addresses = (0, lodash_1.default)(_addresses)
|
|
31
|
+
.map((address) => address.toLowerCase())
|
|
32
|
+
.uniq()
|
|
33
|
+
.value();
|
|
34
|
+
if (addresses.length > 0) {
|
|
35
|
+
const [symbolsResult, decimalsResult] = await Promise.all([
|
|
36
|
+
this.multicall2Provider.callSameFunctionOnMultipleContracts({
|
|
37
|
+
addresses,
|
|
38
|
+
contractInterface: IERC20Metadata__factory_1.IERC20Metadata__factory.createInterface(),
|
|
39
|
+
functionName: 'symbol',
|
|
40
|
+
providerConfig,
|
|
41
|
+
}),
|
|
42
|
+
this.multicall2Provider.callSameFunctionOnMultipleContracts({
|
|
43
|
+
addresses,
|
|
44
|
+
contractInterface: IERC20Metadata__factory_1.IERC20Metadata__factory.createInterface(),
|
|
45
|
+
functionName: 'decimals',
|
|
46
|
+
providerConfig,
|
|
47
|
+
}),
|
|
48
|
+
]);
|
|
49
|
+
const { results: symbols } = symbolsResult;
|
|
50
|
+
const { results: decimals } = decimalsResult;
|
|
51
|
+
for (let i = 0; i < addresses.length; i++) {
|
|
52
|
+
const address = addresses[i];
|
|
53
|
+
const symbolResult = symbols[i];
|
|
54
|
+
const decimalResult = decimals[i];
|
|
55
|
+
if (!(symbolResult === null || symbolResult === void 0 ? void 0 : symbolResult.success) || !(decimalResult === null || decimalResult === void 0 ? void 0 : decimalResult.success)) {
|
|
56
|
+
util_1.log.info({
|
|
57
|
+
symbolResult,
|
|
58
|
+
decimalResult,
|
|
59
|
+
}, `Dropping token with address ${address} as symbol or decimal are invalid`);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const symbol = symbolResult.result[0];
|
|
63
|
+
const decimal = decimalResult.result[0];
|
|
64
|
+
addressToToken[address.toLowerCase()] = new sdk_core_1.Token(this.chainId, address, decimal, symbol);
|
|
65
|
+
symbolToToken[symbol.toLowerCase()] =
|
|
66
|
+
addressToToken[address.toLowerCase()];
|
|
67
|
+
}
|
|
68
|
+
util_1.log.info(`Got token symbol and decimals for ${Object.values(addressToToken).length} out of ${addresses.length} tokens on-chain ${providerConfig ? `as of: ${providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber}` : ''}`);
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
getTokenByAddress: (address) => {
|
|
72
|
+
return addressToToken[address.toLowerCase()];
|
|
73
|
+
},
|
|
74
|
+
getTokenBySymbol: (symbol) => {
|
|
75
|
+
return symbolToToken[symbol.toLowerCase()];
|
|
76
|
+
},
|
|
77
|
+
getAllTokens: () => {
|
|
78
|
+
return Object.values(addressToToken);
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.TokenProvider = TokenProvider;
|
|
84
|
+
const DAI_ON = (chainId) => {
|
|
85
|
+
switch (chainId) {
|
|
86
|
+
// case ChainId.XDC:
|
|
87
|
+
// return USDT_BSC;
|
|
88
|
+
case util_1.ChainId.XDC_APOTHEM:
|
|
89
|
+
return exports.DAI_XDC_APOTHEM;
|
|
90
|
+
default:
|
|
91
|
+
throw new Error(`Chain id: ${chainId} not supported`);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
exports.DAI_ON = DAI_ON;
|
|
95
|
+
const USDT_ON = (chainId) => {
|
|
96
|
+
switch (chainId) {
|
|
97
|
+
case util_1.ChainId.XDC:
|
|
98
|
+
return exports.USDT_XDC;
|
|
99
|
+
case util_1.ChainId.XDC_APOTHEM:
|
|
100
|
+
return exports.USDT_XDC_APOTHEM;
|
|
101
|
+
default:
|
|
102
|
+
throw new Error(`Chain id: ${chainId} not supported`);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
exports.USDT_ON = USDT_ON;
|
|
106
|
+
const USDC_ON = (chainId) => {
|
|
107
|
+
switch (chainId) {
|
|
108
|
+
case util_1.ChainId.XDC:
|
|
109
|
+
return exports.USDT_XDC;
|
|
110
|
+
case util_1.ChainId.XDC_APOTHEM:
|
|
111
|
+
return exports.USDC_XDC_APOTHEM;
|
|
112
|
+
default:
|
|
113
|
+
throw new Error(`Chain id: ${chainId} not supported`);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
exports.USDC_ON = USDC_ON;
|
|
117
|
+
const WNATIVE_ON = (chainId) => {
|
|
118
|
+
return util_1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
119
|
+
};
|
|
120
|
+
exports.WNATIVE_ON = WNATIVE_ON;
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3Rva2VuLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUEwQztBQUMxQyxvREFBdUI7QUFFdkIsMkZBQXdGO0FBQ3hGLGtDQUFnRTtBQStCaEUsb0VBQW9FO0FBQ3ZELFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBSyxDQUN2QyxjQUFPLENBQUMsV0FBVyxFQUNuQiw0Q0FBNEMsRUFDNUMsQ0FBQyxFQUNELE1BQU0sRUFDTixjQUFjLENBQ2YsQ0FBQztBQUVXLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBSyxDQUN2QyxjQUFPLENBQUMsV0FBVyxFQUNuQiw0Q0FBNEMsRUFDNUMsRUFBRSxFQUNGLE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztBQUVXLFFBQUEsZUFBZSxHQUFHLElBQUksZ0JBQUssQ0FDdEMsY0FBTyxDQUFDLFdBQVcsRUFDbkIsNENBQTRDLEVBQzVDLEVBQUUsRUFDRixLQUFLLEVBQ0wsK0JBQStCLENBQ2hDLENBQUM7QUFFVyxRQUFBLGdCQUFnQixHQUFHLElBQUksZ0JBQUssQ0FDdkMsY0FBTyxDQUFDLFdBQVcsRUFDbkIsNENBQTRDLEVBQzVDLENBQUMsRUFDRCxNQUFNLEVBQ04sYUFBYSxDQUNkLENBQUM7QUFHVyxRQUFBLE9BQU8sR0FBRyxJQUFJLGdCQUFLLENBQzlCLGNBQU8sQ0FBQyxHQUFHLEVBQ1gsNENBQTRDLEVBQzVDLEVBQUUsRUFDRixLQUFLLEVBQ0wsZUFBZSxDQUNoQixDQUFBO0FBRVksUUFBQSxPQUFPLEdBQUcsSUFBSSxnQkFBSyxDQUM5QixjQUFPLENBQUMsR0FBRyxFQUNYLDRDQUE0QyxFQUM1QyxFQUFFLEVBQ0YsS0FBSyxFQUNMLHNCQUFzQixDQUN2QixDQUFBO0FBRVksUUFBQSxPQUFPLEdBQUcsSUFBSSxnQkFBSyxDQUM5QixjQUFPLENBQUMs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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Token } from '@uniswap/sdk-core';
|
|
2
|
+
import { ChainId } from '../util';
|
|
3
|
+
import { ICache } from './cache';
|
|
4
|
+
import { IMulticallProvider } from './multicall-provider';
|
|
5
|
+
import { ProviderConfig } from './provider';
|
|
6
|
+
export declare enum TokenValidationResult {
|
|
7
|
+
UNKN = 0,
|
|
8
|
+
FOT = 1,
|
|
9
|
+
STF = 2
|
|
10
|
+
}
|
|
11
|
+
export interface TokenValidationResults {
|
|
12
|
+
getValidationByToken(token: Token): TokenValidationResult | undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Provider for getting token data.
|
|
16
|
+
*
|
|
17
|
+
* @export
|
|
18
|
+
* @interface ITokenValidatorProvider
|
|
19
|
+
*/
|
|
20
|
+
export interface ITokenValidatorProvider {
|
|
21
|
+
/**
|
|
22
|
+
* Gets the token at each address. Any addresses that are not valid ERC-20 are ignored.
|
|
23
|
+
*
|
|
24
|
+
* @param addresses The token addresses to get.
|
|
25
|
+
* @param [providerConfig] The provider config.
|
|
26
|
+
* @returns A token accessor with methods for accessing the tokens.
|
|
27
|
+
*/
|
|
28
|
+
validateTokens(tokens: Token[], providerConfig?: ProviderConfig): Promise<TokenValidationResults>;
|
|
29
|
+
}
|
|
30
|
+
export declare class TokenValidatorProvider implements ITokenValidatorProvider {
|
|
31
|
+
protected chainId: ChainId;
|
|
32
|
+
protected multicall2Provider: IMulticallProvider;
|
|
33
|
+
private tokenValidationCache;
|
|
34
|
+
private tokenValidatorAddress;
|
|
35
|
+
private gasLimitPerCall;
|
|
36
|
+
private amountToFlashBorrow;
|
|
37
|
+
private allowList;
|
|
38
|
+
private CACHE_KEY;
|
|
39
|
+
private BASES;
|
|
40
|
+
constructor(chainId: ChainId, multicall2Provider: IMulticallProvider, tokenValidationCache: ICache<TokenValidationResult>, tokenValidatorAddress?: string, gasLimitPerCall?: number, amountToFlashBorrow?: string, allowList?: Set<string>);
|
|
41
|
+
validateTokens(tokens: Token[], providerConfig?: ProviderConfig): Promise<TokenValidationResults>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TokenValidatorProvider = exports.TokenValidationResult = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const ITokenValidator__factory_1 = require("../types/other/factories/ITokenValidator__factory");
|
|
9
|
+
const util_1 = require("../util");
|
|
10
|
+
const DEFAULT_ALLOWLIST = new Set([
|
|
11
|
+
// RYOSHI. Does not allow transfers between contracts so fails validation.
|
|
12
|
+
'0x777E2ae845272a2F540ebf6a3D03734A5a8f618e'.toLowerCase(),
|
|
13
|
+
]);
|
|
14
|
+
var TokenValidationResult;
|
|
15
|
+
(function (TokenValidationResult) {
|
|
16
|
+
TokenValidationResult[TokenValidationResult["UNKN"] = 0] = "UNKN";
|
|
17
|
+
TokenValidationResult[TokenValidationResult["FOT"] = 1] = "FOT";
|
|
18
|
+
TokenValidationResult[TokenValidationResult["STF"] = 2] = "STF";
|
|
19
|
+
})(TokenValidationResult = exports.TokenValidationResult || (exports.TokenValidationResult = {}));
|
|
20
|
+
const TOKEN_VALIDATOR_ADDRESS = '0x13E9fA07eBf6d019B5be08b3C450FacaA6Dd1AFe';
|
|
21
|
+
const AMOUNT_TO_FLASH_BORROW = '1000';
|
|
22
|
+
const GAS_LIMIT_PER_VALIDATE = 1000000;
|
|
23
|
+
class TokenValidatorProvider {
|
|
24
|
+
constructor(chainId, multicall2Provider, tokenValidationCache, tokenValidatorAddress = TOKEN_VALIDATOR_ADDRESS, gasLimitPerCall = GAS_LIMIT_PER_VALIDATE, amountToFlashBorrow = AMOUNT_TO_FLASH_BORROW, allowList = DEFAULT_ALLOWLIST) {
|
|
25
|
+
this.chainId = chainId;
|
|
26
|
+
this.multicall2Provider = multicall2Provider;
|
|
27
|
+
this.tokenValidationCache = tokenValidationCache;
|
|
28
|
+
this.tokenValidatorAddress = tokenValidatorAddress;
|
|
29
|
+
this.gasLimitPerCall = gasLimitPerCall;
|
|
30
|
+
this.amountToFlashBorrow = amountToFlashBorrow;
|
|
31
|
+
this.allowList = allowList;
|
|
32
|
+
this.CACHE_KEY = (chainId, address) => `token-${chainId}-${address}`;
|
|
33
|
+
this.BASES = [util_1.WRAPPED_NATIVE_CURRENCY[this.chainId].address];
|
|
34
|
+
}
|
|
35
|
+
async validateTokens(tokens, providerConfig) {
|
|
36
|
+
const tokenAddressToToken = lodash_1.default.keyBy(tokens, 'address');
|
|
37
|
+
const addressesRaw = (0, lodash_1.default)(tokens)
|
|
38
|
+
.map((token) => token.address)
|
|
39
|
+
.uniq()
|
|
40
|
+
.value();
|
|
41
|
+
const addresses = [];
|
|
42
|
+
const tokenToResult = {};
|
|
43
|
+
// Check if we have cached token validation results for any tokens.
|
|
44
|
+
for (const address of addressesRaw) {
|
|
45
|
+
if (await this.tokenValidationCache.has(this.CACHE_KEY(this.chainId, address))) {
|
|
46
|
+
tokenToResult[address.toLowerCase()] =
|
|
47
|
+
(await this.tokenValidationCache.get(this.CACHE_KEY(this.chainId, address)));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
addresses.push(address);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
util_1.log.info(`Got token validation results for ${addressesRaw.length - addresses.length} tokens from cache. Getting ${addresses.length} on-chain.`);
|
|
54
|
+
const functionParams = (0, lodash_1.default)(addresses)
|
|
55
|
+
.map((address) => [address, this.BASES, this.amountToFlashBorrow])
|
|
56
|
+
.value();
|
|
57
|
+
// We use the validate function instead of batchValidate to avoid poison pill problem.
|
|
58
|
+
// One token that consumes too much gas could cause the entire batch to fail.
|
|
59
|
+
const multicallResult = await this.multicall2Provider.callSameFunctionOnContractWithMultipleParams({
|
|
60
|
+
address: this.tokenValidatorAddress,
|
|
61
|
+
contractInterface: ITokenValidator__factory_1.ITokenValidator__factory.createInterface(),
|
|
62
|
+
functionName: 'validate',
|
|
63
|
+
functionParams: functionParams,
|
|
64
|
+
providerConfig,
|
|
65
|
+
additionalConfig: {
|
|
66
|
+
gasLimitPerCallOverride: this.gasLimitPerCall,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
for (let i = 0; i < multicallResult.results.length; i++) {
|
|
70
|
+
const resultWrapper = multicallResult.results[i];
|
|
71
|
+
const tokenAddress = addresses[i];
|
|
72
|
+
const token = tokenAddressToToken[tokenAddress];
|
|
73
|
+
if (this.allowList.has(token.address.toLowerCase())) {
|
|
74
|
+
tokenToResult[token.address.toLowerCase()] = TokenValidationResult.UNKN;
|
|
75
|
+
await this.tokenValidationCache.set(this.CACHE_KEY(this.chainId, token.address.toLowerCase()), tokenToResult[token.address.toLowerCase()]);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Could happen if the tokens transfer consumes too much gas so we revert. Just
|
|
79
|
+
// drop the token in that case.
|
|
80
|
+
if (!resultWrapper.success) {
|
|
81
|
+
util_1.log.info({ result: resultWrapper }, `Failed to validate token ${token.symbol}`);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const validationResult = resultWrapper.result[0];
|
|
85
|
+
tokenToResult[token.address.toLowerCase()] =
|
|
86
|
+
validationResult;
|
|
87
|
+
await this.tokenValidationCache.set(this.CACHE_KEY(this.chainId, token.address.toLowerCase()), tokenToResult[token.address.toLowerCase()]);
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
getValidationByToken: (token) => tokenToResult[token.address.toLowerCase()],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.TokenValidatorProvider = TokenValidatorProvider;
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tdmFsaWRhdG9yLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy90b2tlbi12YWxpZGF0b3ItcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esb0RBQXVCO0FBRXZCLGdHQUE2RjtBQUM3RixrQ0FBZ0U7QUFNaEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBUztJQUN4QywwRUFBMEU7SUFDMUUsNENBQTRDLENBQUMsV0FBVyxFQUFFO0NBQzNELENBQUMsQ0FBQztBQUVILElBQVkscUJBSVg7QUFKRCxXQUFZLHFCQUFxQjtJQUMvQixpRUFBUSxDQUFBO0lBQ1IsK0RBQU8sQ0FBQTtJQUNQLCtEQUFPLENBQUE7QUFDVCxDQUFDLEVBSlcscUJBQXFCLEdBQXJCLDZCQUFxQixLQUFyQiw2QkFBcUIsUUFJaEM7QUFNRCxNQUFNLHVCQUF1QixHQUFHLDRDQUE0QyxDQUFDO0FBQzdFLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLE1BQU0sc0JBQXNCLEdBQUcsT0FBUyxDQUFDO0FBc0J6QyxNQUFhLHNCQUFzQjtJQU1qQyxZQUNZLE9BQWdCLEVBQ2hCLGtCQUFzQyxFQUN4QyxvQkFBbUQsRUFDbkQsd0JBQXdCLHVCQUF1QixFQUMvQyxrQkFBa0Isc0JBQXNCLEVBQ3hDLHNCQUFzQixzQkFBc0IsRUFDNUMsWUFBWSxpQkFBaUI7UUFOM0IsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBK0I7UUFDbkQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEwQjtRQUMvQyxvQkFBZSxHQUFmLGVBQWUsQ0FBeUI7UUFDeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF5QjtRQUM1QyxjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQVovQixjQUFTLEdBQUcsQ0FBQyxP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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChainId } from '../util/chains';
|
|
2
|
+
import { V2SubgraphPool } from './v2/subgraph-provider';
|
|
3
|
+
import { V3SubgraphPool } from './v3/subgraph-provider';
|
|
4
|
+
/**
|
|
5
|
+
* Gets subgraph pools from a URI. The URI shoudl contain a JSON
|
|
6
|
+
* stringified array of V2SubgraphPool objects or V3SubgraphPool
|
|
7
|
+
* objects.
|
|
8
|
+
*
|
|
9
|
+
* @export
|
|
10
|
+
* @class URISubgraphProvider
|
|
11
|
+
* @template TSubgraphPool
|
|
12
|
+
*/
|
|
13
|
+
export declare class URISubgraphProvider<TSubgraphPool extends V2SubgraphPool | V3SubgraphPool> {
|
|
14
|
+
private chainId;
|
|
15
|
+
private uri;
|
|
16
|
+
private timeout;
|
|
17
|
+
private retries;
|
|
18
|
+
constructor(chainId: ChainId, uri: string, timeout?: number, retries?: number);
|
|
19
|
+
getPools(): Promise<TSubgraphPool[]>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.URISubgraphProvider = void 0;
|
|
7
|
+
const async_retry_1 = __importDefault(require("async-retry"));
|
|
8
|
+
const await_timeout_1 = __importDefault(require("await-timeout"));
|
|
9
|
+
const axios_1 = __importDefault(require("axios"));
|
|
10
|
+
const log_1 = require("../util/log");
|
|
11
|
+
/**
|
|
12
|
+
* Gets subgraph pools from a URI. The URI shoudl contain a JSON
|
|
13
|
+
* stringified array of V2SubgraphPool objects or V3SubgraphPool
|
|
14
|
+
* objects.
|
|
15
|
+
*
|
|
16
|
+
* @export
|
|
17
|
+
* @class URISubgraphProvider
|
|
18
|
+
* @template TSubgraphPool
|
|
19
|
+
*/
|
|
20
|
+
class URISubgraphProvider {
|
|
21
|
+
constructor(chainId, uri, timeout = 6000, retries = 2) {
|
|
22
|
+
this.chainId = chainId;
|
|
23
|
+
this.uri = uri;
|
|
24
|
+
this.timeout = timeout;
|
|
25
|
+
this.retries = retries;
|
|
26
|
+
}
|
|
27
|
+
async getPools() {
|
|
28
|
+
log_1.log.info({ uri: this.uri }, `About to get subgraph pools from URI ${this.uri}`);
|
|
29
|
+
let allPools = [];
|
|
30
|
+
await (0, async_retry_1.default)(async () => {
|
|
31
|
+
const timeout = new await_timeout_1.default();
|
|
32
|
+
const timerPromise = timeout.set(this.timeout).then(() => {
|
|
33
|
+
throw new Error(`Timed out getting pools from subgraph: ${this.timeout}`);
|
|
34
|
+
});
|
|
35
|
+
let response;
|
|
36
|
+
/* eslint-disable no-useless-catch */
|
|
37
|
+
try {
|
|
38
|
+
response = await Promise.race([axios_1.default.get(this.uri), timerPromise]);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
throw err;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
timeout.clear();
|
|
45
|
+
}
|
|
46
|
+
/* eslint-enable no-useless-catch */
|
|
47
|
+
const { data: poolsBuffer, status } = response;
|
|
48
|
+
if (status != 200) {
|
|
49
|
+
log_1.log.error({ response }, `Unabled to get pools from ${this.uri}.`);
|
|
50
|
+
throw new Error(`Unable to get pools from ${this.uri}`);
|
|
51
|
+
}
|
|
52
|
+
const pools = poolsBuffer;
|
|
53
|
+
log_1.log.info({ uri: this.uri, chain: this.chainId }, `Got subgraph pools from uri. Num: ${pools.length}`);
|
|
54
|
+
allPools = pools;
|
|
55
|
+
}, {
|
|
56
|
+
retries: this.retries,
|
|
57
|
+
onRetry: (err, retry) => {
|
|
58
|
+
log_1.log.info({ err }, `Failed to get pools from uri ${this.uri}. Retry attempt: ${retry}`);
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
return allPools;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.URISubgraphProvider = URISubgraphProvider;
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJpLXN1YmdyYXBoLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy91cmktc3ViZ3JhcGgtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOERBQWdDO0FBQ2hDLGtFQUFvQztBQUNwQyxrREFBMEI7QUFHMUIscUNBQWtDO0FBS2xDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxtQkFBbUI7SUFHOUIsWUFDVSxPQUFnQixFQUNoQixHQUFXLEVBQ1gsVUFBVSxJQUFJLEVBQ2QsVUFBVSxDQUFDO1FBSFgsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsWUFBTyxHQUFQLE9BQU8sQ0FBTztRQUNkLFlBQU8sR0FBUCxPQUFPLENBQUk7SUFDbEIsQ0FBQztJQUVHLEtBQUssQ0FBQyxRQUFRO1FBQ25CLFNBQUcsQ0FBQyxJQUFJLENBQ04sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUNqQix3Q0FBd0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNuRCxDQUFDO1FBRUYsSUFBSSxRQUFRLEdBQW9CLEVBQUUsQ0FBQztRQUVuQyxNQUFNLElBQUEscUJBQUssRUFDVCxLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sT0FBTyxHQUFHLElBQUksdUJBQU8sRUFBRSxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQ2IsMENBQTBDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FDekQsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxRQUFRLENBQUM7WUFFYixxQ0FBcUM7WUFDckMsSUFBSTtnQkFDRixRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUNwRTtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLE1BQU0sR0FBRyxDQUFDO2FBQ1g7b0JBQVM7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2pCO1lBQ0Qsb0NBQW9DO1lBRXBDLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztZQUUvQyxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUU7Z0JBQ2pCLFNBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSw2QkFBNkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBRWxFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO1lBRUQsTUFBTSxLQUFLLEdBQUcsV0FBOEIsQ0FBQztZQUU3QyxTQUFHLENBQUMsSUFBSSxDQUNOLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFDdEMscUNBQXFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDcEQsQ0FBQztZQUVGLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDbkIsQ0FBQyxFQUNEO1lBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdEIsU0FBRyxDQUFDLElBQUksQ0FDTixFQUFFLEdBQUcsRUFBRSxFQUNQLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxvQkFBb0IsS0FBSyxFQUFFLENBQ3BFLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FDRixDQUFDO1FBRUYsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBckVELGtEQXFFQyJ9
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Token } from '@uniswap/sdk-core';
|
|
2
|
+
import { Pair } from '@xswap-v3/v2-sdk';
|
|
3
|
+
import { ChainId } from '../../util/chains';
|
|
4
|
+
import { ICache } from './../cache';
|
|
5
|
+
import { ProviderConfig } from './../provider';
|
|
6
|
+
import { IV2PoolProvider, V2PoolAccessor } from './pool-provider';
|
|
7
|
+
/**
|
|
8
|
+
* Provider for getting V2 pools, with functionality for caching the results per block.
|
|
9
|
+
*
|
|
10
|
+
* @export
|
|
11
|
+
* @class CachingV2PoolProvider
|
|
12
|
+
*/
|
|
13
|
+
export declare class CachingV2PoolProvider implements IV2PoolProvider {
|
|
14
|
+
protected chainId: ChainId;
|
|
15
|
+
protected poolProvider: IV2PoolProvider;
|
|
16
|
+
private cache;
|
|
17
|
+
private POOL_KEY;
|
|
18
|
+
/**
|
|
19
|
+
* Creates an instance of CachingV3PoolProvider.
|
|
20
|
+
* @param chainId The chain id to use.
|
|
21
|
+
* @param poolProvider The provider to use to get the pools when not in the cache.
|
|
22
|
+
* @param cache Cache instance to hold cached pools.
|
|
23
|
+
*/
|
|
24
|
+
constructor(chainId: ChainId, poolProvider: IV2PoolProvider, cache: ICache<{
|
|
25
|
+
pair: Pair;
|
|
26
|
+
block?: number;
|
|
27
|
+
}>);
|
|
28
|
+
getPools(tokenPairs: [Token, Token][], providerConfig?: ProviderConfig): Promise<V2PoolAccessor>;
|
|
29
|
+
getPoolAddress(tokenA: Token, tokenB: Token): {
|
|
30
|
+
poolAddress: string;
|
|
31
|
+
token0: Token;
|
|
32
|
+
token1: Token;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CachingV2PoolProvider = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const log_1 = require("../../util/log");
|
|
9
|
+
/**
|
|
10
|
+
* Provider for getting V2 pools, with functionality for caching the results per block.
|
|
11
|
+
*
|
|
12
|
+
* @export
|
|
13
|
+
* @class CachingV2PoolProvider
|
|
14
|
+
*/
|
|
15
|
+
class CachingV2PoolProvider {
|
|
16
|
+
/**
|
|
17
|
+
* Creates an instance of CachingV3PoolProvider.
|
|
18
|
+
* @param chainId The chain id to use.
|
|
19
|
+
* @param poolProvider The provider to use to get the pools when not in the cache.
|
|
20
|
+
* @param cache Cache instance to hold cached pools.
|
|
21
|
+
*/
|
|
22
|
+
constructor(chainId, poolProvider,
|
|
23
|
+
// Cache is block aware. For V2 pools we need to use the current blocks reserves values since
|
|
24
|
+
// we compute quotes off-chain.
|
|
25
|
+
// If no block is specified in the call to getPools we just return whatever is in the cache.
|
|
26
|
+
cache) {
|
|
27
|
+
this.chainId = chainId;
|
|
28
|
+
this.poolProvider = poolProvider;
|
|
29
|
+
this.cache = cache;
|
|
30
|
+
this.POOL_KEY = (chainId, address) => `pool-${chainId}-${address}`;
|
|
31
|
+
}
|
|
32
|
+
async getPools(tokenPairs, providerConfig) {
|
|
33
|
+
const poolAddressSet = new Set();
|
|
34
|
+
const poolsToGetTokenPairs = [];
|
|
35
|
+
const poolsToGetAddresses = [];
|
|
36
|
+
const poolAddressToPool = {};
|
|
37
|
+
const blockNumber = await (providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber);
|
|
38
|
+
for (const [tokenA, tokenB] of tokenPairs) {
|
|
39
|
+
const { poolAddress, token0, token1 } = this.getPoolAddress(tokenA, tokenB);
|
|
40
|
+
if (poolAddressSet.has(poolAddress)) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
poolAddressSet.add(poolAddress);
|
|
44
|
+
const cachedPool = await this.cache.get(this.POOL_KEY(this.chainId, poolAddress));
|
|
45
|
+
if (cachedPool) {
|
|
46
|
+
// If a block was specified by the caller, ensure that the result in our cache matches the
|
|
47
|
+
// expected block number. If a block number is not specified, just return whatever is in the
|
|
48
|
+
// cache.
|
|
49
|
+
if (!blockNumber || (blockNumber && cachedPool.block == blockNumber)) {
|
|
50
|
+
poolAddressToPool[poolAddress] = cachedPool.pair;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
poolsToGetTokenPairs.push([token0, token1]);
|
|
55
|
+
poolsToGetAddresses.push(poolAddress);
|
|
56
|
+
}
|
|
57
|
+
log_1.log.info({
|
|
58
|
+
poolsFound: lodash_1.default.map(Object.values(poolAddressToPool), (p) => p.token0.symbol + ' ' + p.token1.symbol),
|
|
59
|
+
poolsToGetTokenPairs: lodash_1.default.map(poolsToGetTokenPairs, (t) => t[0].symbol + ' ' + t[1].symbol),
|
|
60
|
+
}, `Found ${Object.keys(poolAddressToPool).length} V2 pools already in local cache for block ${blockNumber}. About to get reserves for ${poolsToGetTokenPairs.length} pools.`);
|
|
61
|
+
if (poolsToGetAddresses.length > 0) {
|
|
62
|
+
const poolAccessor = await this.poolProvider.getPools(poolsToGetTokenPairs, providerConfig);
|
|
63
|
+
for (const address of poolsToGetAddresses) {
|
|
64
|
+
const pool = poolAccessor.getPoolByAddress(address);
|
|
65
|
+
if (pool) {
|
|
66
|
+
poolAddressToPool[address] = pool;
|
|
67
|
+
await this.cache.set(this.POOL_KEY(this.chainId, address), {
|
|
68
|
+
pair: pool,
|
|
69
|
+
block: blockNumber,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
getPool: (tokenA, tokenB) => {
|
|
76
|
+
const { poolAddress } = this.getPoolAddress(tokenA, tokenB);
|
|
77
|
+
return poolAddressToPool[poolAddress];
|
|
78
|
+
},
|
|
79
|
+
getPoolByAddress: (address) => poolAddressToPool[address],
|
|
80
|
+
getAllPools: () => Object.values(poolAddressToPool),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
getPoolAddress(tokenA, tokenB) {
|
|
84
|
+
return this.poolProvider.getPoolAddress(tokenA, tokenB);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.CachingV2PoolProvider = CachingV2PoolProvider;
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGluZy1wb29sLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy92Mi9jYWNoaW5nLXBvb2wtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsb0RBQXVCO0FBR3ZCLHdDQUFxQztBQU1yQzs7Ozs7R0FLRztBQUNILE1BQWEscUJBQXFCO0lBSWhDOzs7OztPQUtHO0lBQ0gsWUFDWSxPQUFnQixFQUNoQixZQUE2QjtJQUN2Qyw2RkFBNkY7SUFDN0YsK0JBQStCO0lBQy9CLDRGQUE0RjtJQUNwRixLQUE2QztRQUwzQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUkvQixVQUFLLEdBQUwsS0FBSyxDQUF3QztRQWYvQyxhQUFRLEdBQUcsQ0FBQyxPQUFnQixFQUFFLE9BQWUsRUFBRSxFQUFFLENBQ3ZELFFBQVEsT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBZTNCLENBQUM7SUFFRSxLQUFLLENBQUMsUUFBUSxDQUNuQixVQUE0QixFQUM1QixjQUErQjtRQUUvQixNQUFNLGNBQWMsR0FBZ0IsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN0RCxNQUFNLG9CQUFvQixHQUEwQixFQUFFLENBQUM7UUFDdkQsTUFBTSxtQkFBbUIsR0FBYSxFQUFFLENBQUM7UUFDekMsTUFBTSxpQkFBaUIsR0FBb0MsRUFBRSxDQUFDO1FBRTlELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsV0FBVyxDQUFBLENBQUM7UUFFdEQsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRTtZQUN6QyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUN6RCxNQUFNLEVBQ04sTUFBTSxDQUNQLENB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
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ChainId } from '../../util/chains';
|
|
2
|
+
import { ICache } from './../cache';
|
|
3
|
+
import { IV2SubgraphProvider, V2SubgraphPool } from './subgraph-provider';
|
|
4
|
+
/**
|
|
5
|
+
* Provider for getting V2 pools, with functionality for caching the results.
|
|
6
|
+
*
|
|
7
|
+
* @export
|
|
8
|
+
* @class CachingV2SubgraphProvider
|
|
9
|
+
*/
|
|
10
|
+
export declare class CachingV2SubgraphProvider implements IV2SubgraphProvider {
|
|
11
|
+
private chainId;
|
|
12
|
+
protected subgraphProvider: IV2SubgraphProvider;
|
|
13
|
+
private cache;
|
|
14
|
+
private SUBGRAPH_KEY;
|
|
15
|
+
/**
|
|
16
|
+
* Creates an instance of CachingV2SubgraphProvider.
|
|
17
|
+
* @param chainId The chain id to use.
|
|
18
|
+
* @param subgraphProvider The provider to use to get the subgraph pools when not in the cache.
|
|
19
|
+
* @param cache Cache instance to hold cached pools.
|
|
20
|
+
*/
|
|
21
|
+
constructor(chainId: ChainId, subgraphProvider: IV2SubgraphProvider, cache: ICache<V2SubgraphPool[]>);
|
|
22
|
+
getPools(): Promise<V2SubgraphPool[]>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CachingV2SubgraphProvider = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Provider for getting V2 pools, with functionality for caching the results.
|
|
6
|
+
*
|
|
7
|
+
* @export
|
|
8
|
+
* @class CachingV2SubgraphProvider
|
|
9
|
+
*/
|
|
10
|
+
class CachingV2SubgraphProvider {
|
|
11
|
+
/**
|
|
12
|
+
* Creates an instance of CachingV2SubgraphProvider.
|
|
13
|
+
* @param chainId The chain id to use.
|
|
14
|
+
* @param subgraphProvider The provider to use to get the subgraph pools when not in the cache.
|
|
15
|
+
* @param cache Cache instance to hold cached pools.
|
|
16
|
+
*/
|
|
17
|
+
constructor(chainId, subgraphProvider, cache) {
|
|
18
|
+
this.chainId = chainId;
|
|
19
|
+
this.subgraphProvider = subgraphProvider;
|
|
20
|
+
this.cache = cache;
|
|
21
|
+
this.SUBGRAPH_KEY = (chainId) => `subgraph-pools-v2-${chainId}`;
|
|
22
|
+
}
|
|
23
|
+
async getPools() {
|
|
24
|
+
const cachedPools = await this.cache.get(this.SUBGRAPH_KEY(this.chainId));
|
|
25
|
+
if (cachedPools) {
|
|
26
|
+
return cachedPools;
|
|
27
|
+
}
|
|
28
|
+
const pools = await this.subgraphProvider.getPools();
|
|
29
|
+
await this.cache.set(this.SUBGRAPH_KEY(this.chainId), pools);
|
|
30
|
+
return pools;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.CachingV2SubgraphProvider = CachingV2SubgraphProvider;
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGluZy1zdWJncmFwaC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvdjIvY2FjaGluZy1zdWJncmFwaC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQTs7Ozs7R0FLRztBQUNILE1BQWEseUJBQXlCO0lBR3BDOzs7OztPQUtHO0lBQ0gsWUFDVSxPQUFnQixFQUNkLGdCQUFxQyxFQUN2QyxLQUErQjtRQUYvQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2QscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUN2QyxVQUFLLEdBQUwsS0FBSyxDQUEwQjtRQVhqQyxpQkFBWSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQUMscUJBQXFCLE9BQU8sRUFBRSxDQUFDO0lBWXpFLENBQUM7SUFFRyxLQUFLLENBQUMsUUFBUTtRQUNuQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFMUUsSUFBSSxXQUFXLEVBQUU7WUFDZixPQUFPLFdBQVcsQ0FBQztTQUNwQjtRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXJELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFN0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE1QkQsOERBNEJDIn0=
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Token } from '@uniswap/sdk-core';
|
|
2
|
+
import { Pair } from '@xswap-v3/v2-sdk';
|
|
3
|
+
import { Options as RetryOptions } from 'async-retry';
|
|
4
|
+
import { ChainId } from '../../util';
|
|
5
|
+
import { IMulticallProvider } from '../multicall-provider';
|
|
6
|
+
import { ProviderConfig } from '../provider';
|
|
7
|
+
/**
|
|
8
|
+
* Provider for getting V2 pools.
|
|
9
|
+
*
|
|
10
|
+
* @export
|
|
11
|
+
* @interface IV2PoolProvider
|
|
12
|
+
*/
|
|
13
|
+
export interface IV2PoolProvider {
|
|
14
|
+
/**
|
|
15
|
+
* Gets the pools for the specified token pairs.
|
|
16
|
+
*
|
|
17
|
+
* @param tokenPairs The token pairs to get.
|
|
18
|
+
* @param [providerConfig] The provider config.
|
|
19
|
+
* @returns A pool accessor with methods for accessing the pools.
|
|
20
|
+
*/
|
|
21
|
+
getPools(tokenPairs: [Token, Token][], providerConfig?: ProviderConfig): Promise<V2PoolAccessor>;
|
|
22
|
+
/**
|
|
23
|
+
* Gets the pool address for the specified token pair.
|
|
24
|
+
*
|
|
25
|
+
* @param tokenA Token A in the pool.
|
|
26
|
+
* @param tokenB Token B in the pool.
|
|
27
|
+
* @returns The pool address and the two tokens.
|
|
28
|
+
*/
|
|
29
|
+
getPoolAddress(tokenA: Token, tokenB: Token): {
|
|
30
|
+
poolAddress: string;
|
|
31
|
+
token0: Token;
|
|
32
|
+
token1: Token;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export type V2PoolAccessor = {
|
|
36
|
+
getPool: (tokenA: Token, tokenB: Token) => Pair | undefined;
|
|
37
|
+
getPoolByAddress: (address: string) => Pair | undefined;
|
|
38
|
+
getAllPools: () => Pair[];
|
|
39
|
+
};
|
|
40
|
+
export type V2PoolRetryOptions = RetryOptions;
|
|
41
|
+
export declare class V2PoolProvider implements IV2PoolProvider {
|
|
42
|
+
protected chainId: ChainId;
|
|
43
|
+
protected multicall2Provider: IMulticallProvider;
|
|
44
|
+
protected retryOptions: V2PoolRetryOptions;
|
|
45
|
+
private POOL_ADDRESS_CACHE;
|
|
46
|
+
/**
|
|
47
|
+
* Creates an instance of V2PoolProvider.
|
|
48
|
+
* @param chainId The chain id to use.
|
|
49
|
+
* @param multicall2Provider The multicall provider to use to get the pools.
|
|
50
|
+
* @param retryOptions The retry options for each call to the multicall.
|
|
51
|
+
*/
|
|
52
|
+
constructor(chainId: ChainId, multicall2Provider: IMulticallProvider, retryOptions?: V2PoolRetryOptions);
|
|
53
|
+
getPools(tokenPairs: [Token, Token][], providerConfig?: ProviderConfig): Promise<V2PoolAccessor>;
|
|
54
|
+
getPoolAddress(tokenA: Token, tokenB: Token): {
|
|
55
|
+
poolAddress: string;
|
|
56
|
+
token0: Token;
|
|
57
|
+
token1: Token;
|
|
58
|
+
};
|
|
59
|
+
private getPoolsData;
|
|
60
|
+
}
|