@fanx-protocol/smart-order-router 0.0.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.
- package/CHANGELOG.md +255 -0
- package/LICENSE +674 -0
- package/README.md +273 -0
- package/build/main/index.d.ts +3 -0
- package/build/main/index.js +20 -0
- package/build/main/providers/cache-node.d.ts +10 -0
- package/build/main/providers/cache-node.js +33 -0
- package/build/main/providers/cache.d.ts +14 -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 +29 -0
- package/build/main/providers/caching/route/model/cached-route.js +89 -0
- package/build/main/providers/caching/route/model/cached-routes.d.ts +67 -0
- package/build/main/providers/caching/route/model/cached-routes.js +81 -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 +88 -0
- package/build/main/providers/caching/route/route-caching-provider.js +72 -0
- package/build/main/providers/caching-gas-provider.d.ts +23 -0
- package/build/main/providers/caching-gas-provider.js +41 -0
- package/build/main/providers/caching-subgraph-provider.d.ts +33 -0
- package/build/main/providers/caching-subgraph-provider.js +37 -0
- package/build/main/providers/caching-token-list-provider.d.ts +52 -0
- package/build/main/providers/caching-token-list-provider.js +147 -0
- package/build/main/providers/caching-token-provider.d.ts +24 -0
- package/build/main/providers/caching-token-provider.js +108 -0
- package/build/main/providers/eip-1559-gas-price-provider.d.ts +31 -0
- package/build/main/providers/eip-1559-gas-price-provider.js +71 -0
- package/build/main/providers/eth-estimate-gas-provider.d.ts +19 -0
- package/build/main/providers/eth-estimate-gas-provider.js +94 -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 +36 -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 +38 -0
- package/build/main/providers/index.js +55 -0
- package/build/main/providers/legacy-gas-price-provider.d.ts +7 -0
- package/build/main/providers/legacy-gas-price-provider.js +18 -0
- package/build/main/providers/multicall-provider.d.ts +83 -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 +164 -0
- package/build/main/providers/on-chain-gas-price-provider.d.ts +19 -0
- package/build/main/providers/on-chain-gas-price-provider.js +36 -0
- package/build/main/providers/on-chain-quote-provider.d.ts +258 -0
- package/build/main/providers/on-chain-quote-provider.js +693 -0
- package/build/main/providers/pool-provider.d.ts +44 -0
- package/build/main/providers/pool-provider.js +73 -0
- package/build/main/providers/portion-provider.d.ts +86 -0
- package/build/main/providers/portion-provider.js +118 -0
- package/build/main/providers/provider.d.ts +38 -0
- package/build/main/providers/provider.js +3 -0
- package/build/main/providers/simulation-provider.d.ts +43 -0
- package/build/main/providers/simulation-provider.js +136 -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/subgraph-provider-with-fallback.d.ts +11 -0
- package/build/main/providers/subgraph-provider-with-fallback.js +25 -0
- package/build/main/providers/subgraph-provider.d.ts +51 -0
- package/build/main/providers/subgraph-provider.js +120 -0
- package/build/main/providers/swap-router-provider.d.ts +30 -0
- package/build/main/providers/swap-router-provider.js +42 -0
- package/build/main/providers/token-fee-fetcher.d.ts +31 -0
- package/build/main/providers/token-fee-fetcher.js +108 -0
- package/build/main/providers/token-properties-provider.d.ts +31 -0
- package/build/main/providers/token-properties-provider.js +118 -0
- package/build/main/providers/token-provider.d.ts +38 -0
- package/build/main/providers/token-provider.js +175 -0
- package/build/main/providers/token-validator-provider.d.ts +42 -0
- package/build/main/providers/token-validator-provider.js +99 -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 +33 -0
- package/build/main/providers/v2/caching-pool-provider.js +89 -0
- package/build/main/providers/v2/caching-subgraph-provider.d.ts +19 -0
- package/build/main/providers/v2/caching-subgraph-provider.js +24 -0
- package/build/main/providers/v2/pool-provider.d.ts +63 -0
- package/build/main/providers/v2/pool-provider.js +138 -0
- package/build/main/providers/v2/quote-provider.d.ts +34 -0
- package/build/main/providers/v2/quote-provider.js +90 -0
- package/build/main/providers/v2/static-subgraph-provider.d.ts +19 -0
- package/build/main/providers/v2/static-subgraph-provider.js +75 -0
- package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +16 -0
- package/build/main/providers/v2/subgraph-provider-with-fallback.js +23 -0
- package/build/main/providers/v2/subgraph-provider.d.ts +36 -0
- package/build/main/providers/v2/subgraph-provider.js +174 -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 +32 -0
- package/build/main/providers/v3/caching-pool-provider.js +84 -0
- package/build/main/providers/v3/caching-subgraph-provider.d.ts +19 -0
- package/build/main/providers/v3/caching-subgraph-provider.js +24 -0
- package/build/main/providers/v3/gas-data-provider.d.ts +39 -0
- package/build/main/providers/v3/gas-data-provider.js +26 -0
- package/build/main/providers/v3/pool-provider.d.ts +77 -0
- package/build/main/providers/v3/pool-provider.js +108 -0
- package/build/main/providers/v3/static-subgraph-provider.d.ts +21 -0
- package/build/main/providers/v3/static-subgraph-provider.js +89 -0
- package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +12 -0
- package/build/main/providers/v3/subgraph-provider-with-fallback.js +19 -0
- package/build/main/providers/v3/subgraph-provider.d.ts +46 -0
- package/build/main/providers/v3/subgraph-provider.js +54 -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 +347 -0
- package/build/main/routers/alpha-router/alpha-router.js +1219 -0
- package/build/main/routers/alpha-router/config.d.ts +4 -0
- package/build/main/routers/alpha-router/config.js +40 -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 +167 -0
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +166 -0
- package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +22 -0
- package/build/main/routers/alpha-router/functions/best-swap-route.js +534 -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 +9 -0
- package/build/main/routers/alpha-router/functions/compute-all-routes.js +104 -0
- package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +100 -0
- package/build/main/routers/alpha-router/functions/get-candidate-pools.js +1008 -0
- package/build/main/routers/alpha-router/gas-models/gas-costs.d.ts +12 -0
- package/build/main/routers/alpha-router/gas-models/gas-costs.js +90 -0
- package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +106 -0
- package/build/main/routers/alpha-router/gas-models/gas-model.js +68 -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 +24 -0
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +161 -0
- package/build/main/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.d.ts +15 -0
- package/build/main/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.js +185 -0
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +31 -0
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +169 -0
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +26 -0
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +41 -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 +76 -0
- package/build/main/routers/alpha-router/quoters/base-quoter.js +76 -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 +28 -0
- package/build/main/routers/alpha-router/quoters/mixed-quoter.js +154 -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 +24 -0
- package/build/main/routers/alpha-router/quoters/v2-quoter.js +140 -0
- package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
- package/build/main/routers/alpha-router/quoters/v3-quoter.js +117 -0
- package/build/main/routers/index.d.ts +3 -0
- package/build/main/routers/index.js +20 -0
- package/build/main/routers/router.d.ts +186 -0
- package/build/main/routers/router.js +55 -0
- package/build/main/tsconfig.tsbuildinfo +1 -0
- package/build/main/types/other/commons.d.ts +16 -0
- package/build/main/types/other/commons.js +6 -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/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/MixedRouteQuoterV2__factory.d.ts +86 -0
- package/build/main/types/other/factories/MixedRouteQuoterV2__factory.js +477 -0
- package/build/main/types/other/factories/Permit2__factory.d.ts +87 -0
- package/build/main/types/other/factories/Permit2__factory.js +936 -0
- package/build/main/types/other/factories/SwapRouter02__factory.d.ts +67 -0
- package/build/main/types/other/factories/SwapRouter02__factory.js +1098 -0
- package/build/main/types/other/factories/TokenFeeDetector__factory.d.ts +47 -0
- package/build/main/types/other/factories/TokenFeeDetector__factory.js +243 -0
- package/build/main/types/v2/commons.d.ts +16 -0
- package/build/main/types/v2/commons.js +6 -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/commons.d.ts +16 -0
- package/build/main/types/v3/commons.js +6 -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 +127 -0
- package/build/main/util/addresses.d.ts +24 -0
- package/build/main/util/addresses.js +76 -0
- package/build/main/util/amounts.d.ts +9 -0
- package/build/main/util/amounts.js +73 -0
- package/build/main/util/chains.d.ts +31 -0
- package/build/main/util/chains.js +97 -0
- package/build/main/util/gas-factory-helpers.d.ts +33 -0
- package/build/main/util/gas-factory-helpers.js +463 -0
- package/build/main/util/index.d.ts +7 -0
- package/build/main/util/index.js +24 -0
- package/build/main/util/l2FeeChains.d.ts +2 -0
- package/build/main/util/l2FeeChains.js +13 -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 +183 -0
- package/build/main/util/metric.d.ts +48 -0
- package/build/main/util/metric.js +59 -0
- package/build/main/util/onchainQuoteProviderConfigs.d.ts +42 -0
- package/build/main/util/onchainQuoteProviderConfigs.js +74 -0
- package/build/main/util/protocols.d.ts +2 -0
- package/build/main/util/protocols.js +20 -0
- package/build/main/util/routes.d.ts +11 -0
- package/build/main/util/routes.js +149 -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 +10 -0
- package/build/module/providers/cache-node.js +29 -0
- package/build/module/providers/cache.d.ts +14 -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 +29 -0
- package/build/module/providers/caching/route/model/cached-route.js +85 -0
- package/build/module/providers/caching/route/model/cached-routes.d.ts +67 -0
- package/build/module/providers/caching/route/model/cached-routes.js +74 -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 +88 -0
- package/build/module/providers/caching/route/route-caching-provider.js +68 -0
- package/build/module/providers/caching-gas-provider.d.ts +23 -0
- package/build/module/providers/caching-gas-provider.js +37 -0
- package/build/module/providers/caching-subgraph-provider.d.ts +33 -0
- package/build/module/providers/caching-subgraph-provider.js +33 -0
- package/build/module/providers/caching-token-list-provider.d.ts +52 -0
- package/build/module/providers/caching-token-list-provider.js +140 -0
- package/build/module/providers/caching-token-provider.d.ts +24 -0
- package/build/module/providers/caching-token-provider.js +101 -0
- package/build/module/providers/eip-1559-gas-price-provider.d.ts +31 -0
- package/build/module/providers/eip-1559-gas-price-provider.js +64 -0
- package/build/module/providers/eth-estimate-gas-provider.d.ts +19 -0
- package/build/module/providers/eth-estimate-gas-provider.js +102 -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 +29 -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 +38 -0
- package/build/module/providers/index.js +39 -0
- package/build/module/providers/legacy-gas-price-provider.d.ts +7 -0
- package/build/module/providers/legacy-gas-price-provider.js +14 -0
- package/build/module/providers/multicall-provider.d.ts +83 -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 +157 -0
- package/build/module/providers/on-chain-gas-price-provider.d.ts +19 -0
- package/build/module/providers/on-chain-gas-price-provider.js +32 -0
- package/build/module/providers/on-chain-quote-provider.d.ts +258 -0
- package/build/module/providers/on-chain-quote-provider.js +687 -0
- package/build/module/providers/pool-provider.d.ts +44 -0
- package/build/module/providers/pool-provider.js +66 -0
- package/build/module/providers/portion-provider.d.ts +86 -0
- package/build/module/providers/portion-provider.js +114 -0
- package/build/module/providers/provider.d.ts +38 -0
- package/build/module/providers/provider.js +2 -0
- package/build/module/providers/simulation-provider.d.ts +43 -0
- package/build/module/providers/simulation-provider.js +138 -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/subgraph-provider-with-fallback.d.ts +11 -0
- package/build/module/providers/subgraph-provider-with-fallback.js +21 -0
- package/build/module/providers/subgraph-provider.d.ts +51 -0
- package/build/module/providers/subgraph-provider.js +113 -0
- package/build/module/providers/swap-router-provider.d.ts +30 -0
- package/build/module/providers/swap-router-provider.js +38 -0
- package/build/module/providers/token-fee-fetcher.d.ts +31 -0
- package/build/module/providers/token-fee-fetcher.js +104 -0
- package/build/module/providers/token-properties-provider.d.ts +31 -0
- package/build/module/providers/token-properties-provider.js +114 -0
- package/build/module/providers/token-provider.d.ts +38 -0
- package/build/module/providers/token-provider.js +164 -0
- package/build/module/providers/token-validator-provider.d.ts +42 -0
- package/build/module/providers/token-validator-provider.js +92 -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 +33 -0
- package/build/module/providers/v2/caching-pool-provider.js +85 -0
- package/build/module/providers/v2/caching-subgraph-provider.d.ts +19 -0
- package/build/module/providers/v2/caching-subgraph-provider.js +20 -0
- package/build/module/providers/v2/pool-provider.d.ts +63 -0
- package/build/module/providers/v2/pool-provider.js +131 -0
- package/build/module/providers/v2/quote-provider.d.ts +34 -0
- package/build/module/providers/v2/quote-provider.js +86 -0
- package/build/module/providers/v2/static-subgraph-provider.d.ts +19 -0
- package/build/module/providers/v2/static-subgraph-provider.js +68 -0
- package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +16 -0
- package/build/module/providers/v2/subgraph-provider-with-fallback.js +19 -0
- package/build/module/providers/v2/subgraph-provider.d.ts +36 -0
- package/build/module/providers/v2/subgraph-provider.js +167 -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 +32 -0
- package/build/module/providers/v3/caching-pool-provider.js +77 -0
- package/build/module/providers/v3/caching-subgraph-provider.d.ts +19 -0
- package/build/module/providers/v3/caching-subgraph-provider.js +20 -0
- package/build/module/providers/v3/gas-data-provider.d.ts +39 -0
- package/build/module/providers/v3/gas-data-provider.js +22 -0
- package/build/module/providers/v3/pool-provider.d.ts +77 -0
- package/build/module/providers/v3/pool-provider.js +101 -0
- package/build/module/providers/v3/static-subgraph-provider.d.ts +21 -0
- package/build/module/providers/v3/static-subgraph-provider.js +82 -0
- package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +12 -0
- package/build/module/providers/v3/subgraph-provider-with-fallback.js +15 -0
- package/build/module/providers/v3/subgraph-provider.d.ts +46 -0
- package/build/module/providers/v3/subgraph-provider.js +50 -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 +347 -0
- package/build/module/routers/alpha-router/alpha-router.js +1229 -0
- package/build/module/routers/alpha-router/config.d.ts +4 -0
- package/build/module/routers/alpha-router/config.js +36 -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 +167 -0
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +157 -0
- package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +22 -0
- package/build/module/routers/alpha-router/functions/best-swap-route.js +526 -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 +9 -0
- package/build/module/routers/alpha-router/functions/compute-all-routes.js +97 -0
- package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +100 -0
- package/build/module/routers/alpha-router/functions/get-candidate-pools.js +998 -0
- package/build/module/routers/alpha-router/gas-models/gas-costs.d.ts +12 -0
- package/build/module/routers/alpha-router/gas-models/gas-costs.js +79 -0
- package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +106 -0
- package/build/module/routers/alpha-router/gas-models/gas-model.js +102 -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 +24 -0
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +154 -0
- package/build/module/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.d.ts +15 -0
- package/build/module/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.js +181 -0
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +31 -0
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +162 -0
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +26 -0
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +37 -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 +76 -0
- package/build/module/routers/alpha-router/quoters/base-quoter.js +69 -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 +28 -0
- package/build/module/routers/alpha-router/quoters/mixed-quoter.js +152 -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 +24 -0
- package/build/module/routers/alpha-router/quoters/v2-quoter.js +137 -0
- package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
- package/build/module/routers/alpha-router/quoters/v3-quoter.js +110 -0
- package/build/module/routers/index.d.ts +3 -0
- package/build/module/routers/index.js +4 -0
- package/build/module/routers/router.d.ts +186 -0
- package/build/module/routers/router.js +47 -0
- package/build/module/tsconfig.module.tsbuildinfo +1 -0
- package/build/module/types/other/commons.d.ts +16 -0
- package/build/module/types/other/commons.js +5 -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/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/MixedRouteQuoterV2__factory.d.ts +86 -0
- package/build/module/types/other/factories/MixedRouteQuoterV2__factory.js +473 -0
- package/build/module/types/other/factories/Permit2__factory.d.ts +87 -0
- package/build/module/types/other/factories/Permit2__factory.js +932 -0
- package/build/module/types/other/factories/SwapRouter02__factory.d.ts +67 -0
- package/build/module/types/other/factories/SwapRouter02__factory.js +1094 -0
- package/build/module/types/other/factories/TokenFeeDetector__factory.d.ts +47 -0
- package/build/module/types/other/factories/TokenFeeDetector__factory.js +239 -0
- package/build/module/types/v2/commons.d.ts +16 -0
- package/build/module/types/v2/commons.js +5 -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/commons.d.ts +16 -0
- package/build/module/types/v3/commons.js +5 -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 +123 -0
- package/build/module/util/addresses.d.ts +24 -0
- package/build/module/util/addresses.js +69 -0
- package/build/module/util/amounts.d.ts +9 -0
- package/build/module/util/amounts.js +62 -0
- package/build/module/util/chains.d.ts +31 -0
- package/build/module/util/chains.js +89 -0
- package/build/module/util/gas-factory-helpers.d.ts +33 -0
- package/build/module/util/gas-factory-helpers.js +446 -0
- package/build/module/util/index.d.ts +7 -0
- package/build/module/util/index.js +8 -0
- package/build/module/util/l2FeeChains.d.ts +2 -0
- package/build/module/util/l2FeeChains.js +10 -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 +181 -0
- package/build/module/util/metric.d.ts +48 -0
- package/build/module/util/metric.js +53 -0
- package/build/module/util/onchainQuoteProviderConfigs.d.ts +42 -0
- package/build/module/util/onchainQuoteProviderConfigs.js +76 -0
- package/build/module/util/protocols.d.ts +2 -0
- package/build/module/util/protocols.js +16 -0
- package/build/module/util/routes.d.ts +11 -0
- package/build/module/util/routes.js +137 -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,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IMulticallProvider = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Provider for fetching data on chain using multicall contracts.
|
|
6
|
+
*
|
|
7
|
+
* @export
|
|
8
|
+
* @abstract
|
|
9
|
+
* @class IMulticallProvider
|
|
10
|
+
* @template TMulticallConfig
|
|
11
|
+
*/
|
|
12
|
+
class IMulticallProvider {
|
|
13
|
+
}
|
|
14
|
+
exports.IMulticallProvider = IMulticallProvider;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGljYWxsLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9tdWx0aWNhbGwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBc0RBOzs7Ozs7O0dBT0c7QUFDSCxNQUFzQixrQkFBa0I7Q0ErRHZDO0FBL0RELGdEQStEQyJ9
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
3
|
+
import { ChainId } from '@fanx-protocol/sdk-core';
|
|
4
|
+
import { CallMultipleFunctionsOnSameContractParams, CallSameFunctionOnContractWithMultipleParams, CallSameFunctionOnMultipleContractsParams, IMulticallProvider, Result } from './multicall-provider';
|
|
5
|
+
export declare type UniswapMulticallConfig = {
|
|
6
|
+
gasLimitPerCallOverride?: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The UniswapMulticall contract has added functionality for limiting the amount of gas
|
|
10
|
+
* that each call within the multicall can consume. This is useful for operations where
|
|
11
|
+
* a call could consume such a large amount of gas that it causes the node to error out
|
|
12
|
+
* with an out of gas error.
|
|
13
|
+
*
|
|
14
|
+
* @export
|
|
15
|
+
* @class UniswapMulticallProvider
|
|
16
|
+
*/
|
|
17
|
+
export declare class UniswapMulticallProvider extends IMulticallProvider<UniswapMulticallConfig> {
|
|
18
|
+
protected chainId: ChainId;
|
|
19
|
+
protected provider: BaseProvider;
|
|
20
|
+
protected gasLimitPerCall: number;
|
|
21
|
+
private multicallContract;
|
|
22
|
+
constructor(chainId: ChainId, provider: BaseProvider, gasLimitPerCall?: number);
|
|
23
|
+
callSameFunctionOnMultipleContracts<TFunctionParams extends any[] | undefined, TReturn = any>(params: CallSameFunctionOnMultipleContractsParams<TFunctionParams>): Promise<{
|
|
24
|
+
blockNumber: BigNumber;
|
|
25
|
+
results: Result<TReturn>[];
|
|
26
|
+
}>;
|
|
27
|
+
callSameFunctionOnContractWithMultipleParams<TFunctionParams extends any[] | undefined, TReturn>(params: CallSameFunctionOnContractWithMultipleParams<TFunctionParams, UniswapMulticallConfig>): Promise<{
|
|
28
|
+
blockNumber: BigNumber;
|
|
29
|
+
results: Result<TReturn>[];
|
|
30
|
+
approxGasUsedPerSuccessCall: number;
|
|
31
|
+
}>;
|
|
32
|
+
callMultipleFunctionsOnSameContract<TFunctionParams extends any[] | undefined, TReturn>(params: CallMultipleFunctionsOnSameContractParams<TFunctionParams, UniswapMulticallConfig>): Promise<{
|
|
33
|
+
blockNumber: BigNumber;
|
|
34
|
+
results: Result<TReturn>[];
|
|
35
|
+
approxGasUsedPerSuccessCall: number;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
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.UniswapMulticallProvider = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const stats_lite_1 = __importDefault(require("stats-lite"));
|
|
9
|
+
const UniswapInterfaceMulticall__factory_1 = require("../types/v3/factories/UniswapInterfaceMulticall__factory");
|
|
10
|
+
const addresses_1 = require("../util/addresses");
|
|
11
|
+
const log_1 = require("../util/log");
|
|
12
|
+
const multicall_provider_1 = require("./multicall-provider");
|
|
13
|
+
/**
|
|
14
|
+
* The UniswapMulticall contract has added functionality for limiting the amount of gas
|
|
15
|
+
* that each call within the multicall can consume. This is useful for operations where
|
|
16
|
+
* a call could consume such a large amount of gas that it causes the node to error out
|
|
17
|
+
* with an out of gas error.
|
|
18
|
+
*
|
|
19
|
+
* @export
|
|
20
|
+
* @class UniswapMulticallProvider
|
|
21
|
+
*/
|
|
22
|
+
class UniswapMulticallProvider extends multicall_provider_1.IMulticallProvider {
|
|
23
|
+
constructor(chainId, provider, gasLimitPerCall = 1000000) {
|
|
24
|
+
super();
|
|
25
|
+
this.chainId = chainId;
|
|
26
|
+
this.provider = provider;
|
|
27
|
+
this.gasLimitPerCall = gasLimitPerCall;
|
|
28
|
+
const multicallAddress = addresses_1.UNISWAP_MULTICALL_ADDRESSES[this.chainId];
|
|
29
|
+
if (!multicallAddress) {
|
|
30
|
+
throw new Error(`No address for Uniswap Multicall Contract on chain id: ${chainId}`);
|
|
31
|
+
}
|
|
32
|
+
this.multicallContract = UniswapInterfaceMulticall__factory_1.UniswapInterfaceMulticall__factory.connect(multicallAddress, this.provider);
|
|
33
|
+
}
|
|
34
|
+
async callSameFunctionOnMultipleContracts(params) {
|
|
35
|
+
var _a;
|
|
36
|
+
const { addresses, contractInterface, functionName, functionParams, providerConfig, } = params;
|
|
37
|
+
const blockNumberOverride = (_a = providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber) !== null && _a !== void 0 ? _a : undefined;
|
|
38
|
+
const fragment = contractInterface.getFunction(functionName);
|
|
39
|
+
const callData = contractInterface.encodeFunctionData(fragment, functionParams);
|
|
40
|
+
const calls = lodash_1.default.map(addresses, (address) => {
|
|
41
|
+
return {
|
|
42
|
+
target: address,
|
|
43
|
+
callData,
|
|
44
|
+
gasLimit: this.gasLimitPerCall,
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
log_1.log.debug({ calls }, `About to multicall for ${functionName} across ${addresses.length} addresses`);
|
|
48
|
+
const { blockNumber, returnData: aggregateResults } = await this.multicallContract.callStatic.multicall(calls, {
|
|
49
|
+
blockTag: blockNumberOverride,
|
|
50
|
+
});
|
|
51
|
+
const results = [];
|
|
52
|
+
for (let i = 0; i < aggregateResults.length; i++) {
|
|
53
|
+
const { success, returnData } = aggregateResults[i];
|
|
54
|
+
// Return data "0x" is sometimes returned for invalid calls.
|
|
55
|
+
if (!success || returnData.length <= 2) {
|
|
56
|
+
log_1.log.debug({ result: aggregateResults[i] }, `Invalid result calling ${functionName} on address ${addresses[i]}`);
|
|
57
|
+
results.push({
|
|
58
|
+
success: false,
|
|
59
|
+
returnData,
|
|
60
|
+
});
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
results.push({
|
|
64
|
+
success: true,
|
|
65
|
+
result: contractInterface.decodeFunctionResult(fragment, returnData),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
log_1.log.debug({ results }, `Results for multicall on ${functionName} across ${addresses.length} addresses as of block ${blockNumber}`);
|
|
69
|
+
return { blockNumber, results };
|
|
70
|
+
}
|
|
71
|
+
async callSameFunctionOnContractWithMultipleParams(params) {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
const { address, contractInterface, functionName, functionParams, additionalConfig, providerConfig, } = params;
|
|
74
|
+
const fragment = contractInterface.getFunction(functionName);
|
|
75
|
+
const gasLimitPerCall = (_a = additionalConfig === null || additionalConfig === void 0 ? void 0 : additionalConfig.gasLimitPerCallOverride) !== null && _a !== void 0 ? _a : this.gasLimitPerCall;
|
|
76
|
+
const blockNumberOverride = (_b = providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber) !== null && _b !== void 0 ? _b : undefined;
|
|
77
|
+
const calls = lodash_1.default.map(functionParams, (functionParam) => {
|
|
78
|
+
const callData = contractInterface.encodeFunctionData(fragment, functionParam);
|
|
79
|
+
return {
|
|
80
|
+
target: address,
|
|
81
|
+
callData,
|
|
82
|
+
gasLimit: gasLimitPerCall,
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
log_1.log.debug({ calls }, `About to multicall for ${functionName} at address ${address} with ${functionParams.length} different sets of params`);
|
|
86
|
+
const { blockNumber, returnData: aggregateResults } = await this.multicallContract.callStatic.multicall(calls, {
|
|
87
|
+
blockTag: blockNumberOverride,
|
|
88
|
+
});
|
|
89
|
+
const results = [];
|
|
90
|
+
const gasUsedForSuccess = [];
|
|
91
|
+
for (let i = 0; i < aggregateResults.length; i++) {
|
|
92
|
+
const { success, returnData, gasUsed } = aggregateResults[i];
|
|
93
|
+
// Return data "0x" is sometimes returned for invalid pools.
|
|
94
|
+
if (!success || returnData.length <= 2) {
|
|
95
|
+
log_1.log.debug({ result: aggregateResults[i] }, `Invalid result calling ${functionName} address ${address} with params ${functionParams[i]}`);
|
|
96
|
+
results.push({
|
|
97
|
+
success: false,
|
|
98
|
+
returnData,
|
|
99
|
+
gasUsed,
|
|
100
|
+
});
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
gasUsedForSuccess.push(gasUsed.toNumber());
|
|
104
|
+
results.push({
|
|
105
|
+
success: true,
|
|
106
|
+
result: contractInterface.decodeFunctionResult(fragment, returnData),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
log_1.log.debug({ results, functionName, address }, `Results for multicall for ${functionName} at address ${address} with ${functionParams.length} different sets of params. Results as of block ${blockNumber}`);
|
|
110
|
+
return {
|
|
111
|
+
blockNumber,
|
|
112
|
+
results,
|
|
113
|
+
approxGasUsedPerSuccessCall: stats_lite_1.default.percentile(gasUsedForSuccess, 99),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async callMultipleFunctionsOnSameContract(params) {
|
|
117
|
+
var _a, _b;
|
|
118
|
+
const { address, contractInterface, functionNames, functionParams, additionalConfig, providerConfig, } = params;
|
|
119
|
+
const gasLimitPerCall = (_a = additionalConfig === null || additionalConfig === void 0 ? void 0 : additionalConfig.gasLimitPerCallOverride) !== null && _a !== void 0 ? _a : this.gasLimitPerCall;
|
|
120
|
+
const blockNumberOverride = (_b = providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber) !== null && _b !== void 0 ? _b : undefined;
|
|
121
|
+
const calls = lodash_1.default.map(functionNames, (functionName, i) => {
|
|
122
|
+
const fragment = contractInterface.getFunction(functionName);
|
|
123
|
+
const param = functionParams ? functionParams[i] : [];
|
|
124
|
+
const callData = contractInterface.encodeFunctionData(fragment, param);
|
|
125
|
+
return {
|
|
126
|
+
target: address,
|
|
127
|
+
callData,
|
|
128
|
+
gasLimit: gasLimitPerCall,
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
log_1.log.debug({ calls }, `About to multicall for ${functionNames.length} functions at address ${address} with ${functionParams === null || functionParams === void 0 ? void 0 : functionParams.length} different sets of params`);
|
|
132
|
+
const { blockNumber, returnData: aggregateResults } = await this.multicallContract.callStatic.multicall(calls, {
|
|
133
|
+
blockTag: blockNumberOverride,
|
|
134
|
+
});
|
|
135
|
+
const results = [];
|
|
136
|
+
const gasUsedForSuccess = [];
|
|
137
|
+
for (let i = 0; i < aggregateResults.length; i++) {
|
|
138
|
+
const fragment = contractInterface.getFunction(functionNames[i]);
|
|
139
|
+
const { success, returnData, gasUsed } = aggregateResults[i];
|
|
140
|
+
// Return data "0x" is sometimes returned for invalid pools.
|
|
141
|
+
if (!success || returnData.length <= 2) {
|
|
142
|
+
log_1.log.debug({ result: aggregateResults[i] }, `Invalid result calling ${functionNames[i]} with ${functionParams ? functionParams[i] : '0'} params`);
|
|
143
|
+
results.push({
|
|
144
|
+
success: false,
|
|
145
|
+
returnData,
|
|
146
|
+
});
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
gasUsedForSuccess.push(gasUsed.toNumber());
|
|
150
|
+
results.push({
|
|
151
|
+
success: true,
|
|
152
|
+
result: contractInterface.decodeFunctionResult(fragment, returnData),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
log_1.log.debug({ results, functionNames, address }, `Results for multicall for ${functionNames.length} functions at address ${address} with ${functionParams ? functionParams.length : ' 0'} different sets of params. Results as of block ${blockNumber}`);
|
|
156
|
+
return {
|
|
157
|
+
blockNumber,
|
|
158
|
+
results,
|
|
159
|
+
approxGasUsedPerSuccessCall: stats_lite_1.default.percentile(gasUsedForSuccess, 99),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.UniswapMulticallProvider = UniswapMulticallProvider;
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGljYWxsLXVuaXN3YXAtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmlkZXJzL211bHRpY2FsbC11bmlzd2FwLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLG9EQUF1QjtBQUN2Qiw0REFBK0I7QUFFL0IsaUhBQThHO0FBRTlHLGlEQUFnRTtBQUNoRSxxQ0FBa0M7QUFFbEMsNkRBTThCO0FBTTlCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSx1Q0FBMEM7SUFHdEYsWUFDWSxPQUFnQixFQUNoQixRQUFzQixFQUN0QixrQkFBa0IsT0FBUztRQUVyQyxLQUFLLEVBQUUsQ0FBQztRQUpFLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixvQkFBZSxHQUFmLGVBQWUsQ0FBWTtRQUdyQyxNQUFNLGdCQUFnQixHQUFHLHVDQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsT0FBTyxFQUFFLENBQ3BFLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyx1RUFBa0MsQ0FBQyxPQUFPLENBQ2pFLGdCQUFnQixFQUNoQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLG1DQUFtQyxDQUk5QyxNQUFrRTs7UUFLbEUsTUFBTSxFQUNKLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGNBQWMsRUFDZCxjQUFjLEdBQ2YsR0FBRyxNQUFNLENBQUM7UUFFWCxNQUFNLG1CQUFtQixHQUFHLE1BQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFdBQVcsbUNBQUksU0FBUyxDQUFDO1FBRXJFLE1BQU0sUUFBUSxHQUFHLGlC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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ChainId } from '@fanx-protocol/sdk-core';
|
|
2
|
+
import { EIP1559GasPriceProvider } from './eip-1559-gas-price-provider';
|
|
3
|
+
import { GasPrice, IGasPriceProvider } from './gas-price-provider';
|
|
4
|
+
import { LegacyGasPriceProvider } from './legacy-gas-price-provider';
|
|
5
|
+
/**
|
|
6
|
+
* Gets gas prices on chain. If the chain supports EIP-1559 and has the feeHistory API,
|
|
7
|
+
* uses the EIP1559 provider. Otherwise it will use a legacy provider that uses eth_gasPrice
|
|
8
|
+
*
|
|
9
|
+
* @export
|
|
10
|
+
* @class OnChainGasPriceProvider
|
|
11
|
+
*/
|
|
12
|
+
export declare class OnChainGasPriceProvider extends IGasPriceProvider {
|
|
13
|
+
protected chainId: ChainId;
|
|
14
|
+
protected eip1559GasPriceProvider: EIP1559GasPriceProvider;
|
|
15
|
+
protected legacyGasPriceProvider: LegacyGasPriceProvider;
|
|
16
|
+
protected eipChains: ChainId[];
|
|
17
|
+
constructor(chainId: ChainId, eip1559GasPriceProvider: EIP1559GasPriceProvider, legacyGasPriceProvider: LegacyGasPriceProvider, eipChains?: ChainId[]);
|
|
18
|
+
getGasPrice(latestBlockNumber: number, requestBlockNumber?: number): Promise<GasPrice>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OnChainGasPriceProvider = void 0;
|
|
4
|
+
const l2FeeChains_1 = require("../util/l2FeeChains");
|
|
5
|
+
const gas_price_provider_1 = require("./gas-price-provider");
|
|
6
|
+
const DEFAULT_EIP_1559_SUPPORTED_CHAINS = [
|
|
7
|
+
// ChainId.MAINNET,
|
|
8
|
+
// ChainId.GOERLI,
|
|
9
|
+
// ChainId.POLYGON_MUMBAI,
|
|
10
|
+
// ChainId.ARBITRUM_ONE,
|
|
11
|
+
...l2FeeChains_1.opStackChains,
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* Gets gas prices on chain. If the chain supports EIP-1559 and has the feeHistory API,
|
|
15
|
+
* uses the EIP1559 provider. Otherwise it will use a legacy provider that uses eth_gasPrice
|
|
16
|
+
*
|
|
17
|
+
* @export
|
|
18
|
+
* @class OnChainGasPriceProvider
|
|
19
|
+
*/
|
|
20
|
+
class OnChainGasPriceProvider extends gas_price_provider_1.IGasPriceProvider {
|
|
21
|
+
constructor(chainId, eip1559GasPriceProvider, legacyGasPriceProvider, eipChains = DEFAULT_EIP_1559_SUPPORTED_CHAINS) {
|
|
22
|
+
super();
|
|
23
|
+
this.chainId = chainId;
|
|
24
|
+
this.eip1559GasPriceProvider = eip1559GasPriceProvider;
|
|
25
|
+
this.legacyGasPriceProvider = legacyGasPriceProvider;
|
|
26
|
+
this.eipChains = eipChains;
|
|
27
|
+
}
|
|
28
|
+
async getGasPrice(latestBlockNumber, requestBlockNumber) {
|
|
29
|
+
if (this.eipChains.includes(this.chainId)) {
|
|
30
|
+
return this.eip1559GasPriceProvider.getGasPrice(latestBlockNumber, requestBlockNumber);
|
|
31
|
+
}
|
|
32
|
+
return this.legacyGasPriceProvider.getGasPrice(latestBlockNumber, requestBlockNumber);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.OnChainGasPriceProvider = OnChainGasPriceProvider;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tY2hhaW4tZ2FzLXByaWNlLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9vbi1jaGFpbi1nYXMtcHJpY2UtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQW9EO0FBRXBELDZEQUFtRTtBQUduRSxNQUFNLGlDQUFpQyxHQUFHO0lBQ3hDLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsMEJBQTBCO0lBQzFCLHdCQUF3QjtJQUN4QixHQUFHLDJCQUFhO0NBQ2pCLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLHNDQUFpQjtJQUM1RCxZQUNZLE9BQWdCLEVBQ2hCLHVCQUFnRCxFQUNoRCxzQkFBOEMsRUFDOUMsWUFBdUIsaUNBQWlDO1FBRWxFLEtBQUssRUFBRSxDQUFDO1FBTEUsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsY0FBUyxHQUFULFNBQVMsQ0FBK0M7SUFHcEUsQ0FBQztJQUVlLEtBQUssQ0FBQyxXQUFXLENBQy9CLGlCQUF5QixFQUN6QixrQkFBMkI7UUFFM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUM3QyxpQkFBaUIsRUFDakIsa0JBQWtCLENBQ25CLENBQUM7U0FDSDtRQUVELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FDNUMsaUJBQWlCLEVBQ2pCLGtCQUFrQixDQUNuQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBMUJELDBEQTBCQyJ9
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { BigNumber, BigNumberish } from '@ethersproject/bignumber';
|
|
2
|
+
import { BytesLike } from '@ethersproject/bytes';
|
|
3
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
4
|
+
import { Protocol } from '@fanx-protocol/router-sdk';
|
|
5
|
+
import { ChainId } from '@fanx-protocol/sdk-core';
|
|
6
|
+
import { Options as RetryOptions } from 'async-retry';
|
|
7
|
+
import { SupportedRoutes, V3Route } from '../routers/router';
|
|
8
|
+
import { CurrencyAmount } from '../util/amounts';
|
|
9
|
+
import { Result } from './multicall-provider';
|
|
10
|
+
import { UniswapMulticallProvider } from './multicall-uniswap-provider';
|
|
11
|
+
import { ProviderConfig } from './provider';
|
|
12
|
+
/**
|
|
13
|
+
* Emulate on-chain [PathKey](https://github.com/Uniswap/v4-periphery/blob/main/src/libraries/PathKey.sol#L8) struct
|
|
14
|
+
*/
|
|
15
|
+
export declare type PathKey = {
|
|
16
|
+
intermediateCurrency: string;
|
|
17
|
+
fee: BigNumberish;
|
|
18
|
+
tickSpacing: BigNumberish;
|
|
19
|
+
hooks: string;
|
|
20
|
+
hookData: BytesLike;
|
|
21
|
+
};
|
|
22
|
+
export declare type SupportedPath = string | PathKey[];
|
|
23
|
+
/**
|
|
24
|
+
* Emulate on-chain [QuoteExactParams](https://github.com/Uniswap/v4-periphery/blob/main/src/interfaces/IQuoter.sol#L34) struct
|
|
25
|
+
*/
|
|
26
|
+
export declare type QuoteExactParams = {
|
|
27
|
+
exactCurrency: string;
|
|
28
|
+
path: PathKey[];
|
|
29
|
+
exactAmount: BigNumberish;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Emulate on-chain [ExtraQuoteExactInputParams](https://github.com/Uniswap/mixed-quoter/blob/main/src/interfaces/IMixedRouteQuoterV2.sol#L44C12-L44C38) struct
|
|
33
|
+
*/
|
|
34
|
+
declare type NonEncodableData = {
|
|
35
|
+
hookData: BytesLike;
|
|
36
|
+
};
|
|
37
|
+
export declare type ExtraQuoteExactInputParams = {
|
|
38
|
+
nonEncodableData: NonEncodableData[];
|
|
39
|
+
};
|
|
40
|
+
export declare type QuoteInputType = QuoteExactParams[] | [string, string] | [string, ExtraQuoteExactInputParams, string];
|
|
41
|
+
/**
|
|
42
|
+
* An on chain quote for a swap.
|
|
43
|
+
*/
|
|
44
|
+
export declare type AmountQuote = {
|
|
45
|
+
amount: CurrencyAmount;
|
|
46
|
+
/**
|
|
47
|
+
* Quotes can be null (e.g. pool did not have enough liquidity).
|
|
48
|
+
*/
|
|
49
|
+
quote: BigNumber | null;
|
|
50
|
+
/**
|
|
51
|
+
* For each pool in the route, the sqrtPriceX96 after the swap.
|
|
52
|
+
*/
|
|
53
|
+
sqrtPriceX96AfterList: BigNumber[] | null;
|
|
54
|
+
/**
|
|
55
|
+
* For each pool in the route, the number of ticks crossed.
|
|
56
|
+
*/
|
|
57
|
+
initializedTicksCrossedList: number[] | null;
|
|
58
|
+
/**
|
|
59
|
+
* An estimate of the gas used by the swap. This is returned by the multicall
|
|
60
|
+
* and is not necessarily accurate due to EIP-2929 causing gas costs to vary
|
|
61
|
+
* depending on if the slot has already been loaded in the call.
|
|
62
|
+
*/
|
|
63
|
+
gasEstimate: BigNumber | null;
|
|
64
|
+
/**
|
|
65
|
+
* Final attempted gas limit set by the on-chain quote provider
|
|
66
|
+
*/
|
|
67
|
+
gasLimit: BigNumber | null;
|
|
68
|
+
};
|
|
69
|
+
export declare class BlockConflictError extends Error {
|
|
70
|
+
name: string;
|
|
71
|
+
}
|
|
72
|
+
export declare class SuccessRateError extends Error {
|
|
73
|
+
name: string;
|
|
74
|
+
}
|
|
75
|
+
export declare class ProviderBlockHeaderError extends Error {
|
|
76
|
+
name: string;
|
|
77
|
+
}
|
|
78
|
+
export declare class ProviderTimeoutError extends Error {
|
|
79
|
+
name: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* This error typically means that the gas used by the multicall has
|
|
83
|
+
* exceeded the total call gas limit set by the node provider.
|
|
84
|
+
*
|
|
85
|
+
* This can be resolved by modifying BatchParams to request fewer
|
|
86
|
+
* quotes per call, or to set a lower gas limit per quote.
|
|
87
|
+
*
|
|
88
|
+
* @export
|
|
89
|
+
* @class ProviderGasError
|
|
90
|
+
*/
|
|
91
|
+
export declare class ProviderGasError extends Error {
|
|
92
|
+
name: string;
|
|
93
|
+
}
|
|
94
|
+
export declare type QuoteRetryOptions = RetryOptions;
|
|
95
|
+
/**
|
|
96
|
+
* The V3 route and a list of quotes for that route.
|
|
97
|
+
*/
|
|
98
|
+
export declare type RouteWithQuotes<TRoute extends SupportedRoutes> = [
|
|
99
|
+
TRoute,
|
|
100
|
+
AmountQuote[]
|
|
101
|
+
];
|
|
102
|
+
/**
|
|
103
|
+
* Final consolidated return type of all on-chain quotes.
|
|
104
|
+
*/
|
|
105
|
+
export declare type OnChainQuotes<TRoute extends SupportedRoutes> = {
|
|
106
|
+
routesWithQuotes: RouteWithQuotes<TRoute>[];
|
|
107
|
+
blockNumber: BigNumber;
|
|
108
|
+
};
|
|
109
|
+
export declare type SupportedExactOutRoutes = V3Route;
|
|
110
|
+
/**
|
|
111
|
+
* Provider for getting on chain quotes using routes containing V3 pools or V2 pools.
|
|
112
|
+
*
|
|
113
|
+
* @export
|
|
114
|
+
* @interface IOnChainQuoteProvider
|
|
115
|
+
*/
|
|
116
|
+
export interface IOnChainQuoteProvider {
|
|
117
|
+
/**
|
|
118
|
+
* For every route, gets an exactIn quotes for every amount provided.
|
|
119
|
+
* @notice While passing in exactIn V2Routes is supported, we recommend using the V2QuoteProvider to compute off chain quotes for V2 whenever possible
|
|
120
|
+
*
|
|
121
|
+
* @param amountIns The amounts to get quotes for.
|
|
122
|
+
* @param routes The routes to get quotes for.
|
|
123
|
+
* @param [providerConfig] The provider config.
|
|
124
|
+
* @returns For each route returns a RouteWithQuotes object that contains all the quotes.
|
|
125
|
+
* @returns The blockNumber used when generating the quotes.
|
|
126
|
+
*/
|
|
127
|
+
getQuotesManyExactIn<TRoute extends SupportedRoutes>(amountIns: CurrencyAmount[], routes: TRoute[], providerConfig?: ProviderConfig): Promise<OnChainQuotes<TRoute>>;
|
|
128
|
+
/**
|
|
129
|
+
* For every route, gets ane exactOut quote for every amount provided.
|
|
130
|
+
* @notice This does not support quotes for MixedRoutes (routes with both V3 and V2 pools/pairs) or pure V2 routes
|
|
131
|
+
*
|
|
132
|
+
* @param amountOuts The amounts to get quotes for.
|
|
133
|
+
* @param routes The routes to get quotes for.
|
|
134
|
+
* @param [providerConfig] The provider config.
|
|
135
|
+
* @returns For each route returns a RouteWithQuotes object that contains all the quotes.
|
|
136
|
+
* @returns The blockNumber used when generating the quotes.
|
|
137
|
+
*/
|
|
138
|
+
getQuotesManyExactOut<TRoute extends SupportedExactOutRoutes>(amountOuts: CurrencyAmount[], routes: TRoute[], providerConfig?: ProviderConfig): Promise<OnChainQuotes<TRoute>>;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The parameters for the multicalls we make.
|
|
142
|
+
*
|
|
143
|
+
* It is important to ensure that (gasLimitPerCall * multicallChunk) < providers gas limit per call.
|
|
144
|
+
*
|
|
145
|
+
* On chain quotes can consume a lot of gas (if the swap is so large that it swaps through a large
|
|
146
|
+
* number of ticks), so there is a risk of exceeded gas limits in these multicalls.
|
|
147
|
+
*/
|
|
148
|
+
export declare type BatchParams = {
|
|
149
|
+
/**
|
|
150
|
+
* The number of quotes to fetch in each multicall.
|
|
151
|
+
*/
|
|
152
|
+
multicallChunk: number;
|
|
153
|
+
/**
|
|
154
|
+
* The maximum call to consume for each quote in the multicall.
|
|
155
|
+
*/
|
|
156
|
+
gasLimitPerCall: number;
|
|
157
|
+
/**
|
|
158
|
+
* The minimum success rate for all quotes across all multicalls.
|
|
159
|
+
* If we set our gasLimitPerCall too low it could result in a large number of
|
|
160
|
+
* quotes failing due to out of gas. This parameters will fail the overall request
|
|
161
|
+
* in this case.
|
|
162
|
+
*/
|
|
163
|
+
quoteMinSuccessRate: number;
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* The fallback values for gasLimit and multicallChunk if any failures occur.
|
|
167
|
+
*
|
|
168
|
+
*/
|
|
169
|
+
export declare type FailureOverrides = {
|
|
170
|
+
multicallChunk: number;
|
|
171
|
+
gasLimitOverride: number;
|
|
172
|
+
};
|
|
173
|
+
export declare type BlockHeaderFailureOverridesDisabled = {
|
|
174
|
+
enabled: false;
|
|
175
|
+
};
|
|
176
|
+
export declare type BlockHeaderFailureOverridesEnabled = {
|
|
177
|
+
enabled: true;
|
|
178
|
+
rollbackBlockOffset: number;
|
|
179
|
+
attemptsBeforeRollback: number;
|
|
180
|
+
};
|
|
181
|
+
export declare type BlockHeaderFailureOverrides = BlockHeaderFailureOverridesDisabled | BlockHeaderFailureOverridesEnabled;
|
|
182
|
+
/**
|
|
183
|
+
* Config around what block number to query and how to handle failures due to block header errors.
|
|
184
|
+
*/
|
|
185
|
+
export declare type BlockNumberConfig = {
|
|
186
|
+
baseBlockOffset: number;
|
|
187
|
+
rollback: BlockHeaderFailureOverrides;
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Computes on chain quotes for swaps. For pure V3 routes, quotes are computed on-chain using
|
|
191
|
+
* the 'QuoterV2' smart contract. For exactIn mixed and V2 routes, quotes are computed using the 'MixedRouteQuoterV1' contract
|
|
192
|
+
* This is because computing quotes off-chain would require fetching all the tick data for each pool, which is a lot of data.
|
|
193
|
+
*
|
|
194
|
+
* To minimize the number of requests for quotes we use a Multicall contract. Generally
|
|
195
|
+
* the number of quotes to fetch exceeds the maximum we can fit in a single multicall
|
|
196
|
+
* while staying under gas limits, so we also batch these quotes across multiple multicalls.
|
|
197
|
+
*
|
|
198
|
+
* The biggest challenge with the quote provider is dealing with various gas limits.
|
|
199
|
+
* Each provider sets a limit on the amount of gas a call can consume (on Infura this
|
|
200
|
+
* is approximately 10x the block max size), so we must ensure each multicall does not
|
|
201
|
+
* exceed this limit. Additionally, each quote on V3 can consume a large number of gas if
|
|
202
|
+
* the pool lacks liquidity and the swap would cause all the ticks to be traversed.
|
|
203
|
+
*
|
|
204
|
+
* To ensure we don't exceed the node's call limit, we limit the gas used by each quote to
|
|
205
|
+
* a specific value, and we limit the number of quotes in each multicall request. Users of this
|
|
206
|
+
* class should set BatchParams such that multicallChunk * gasLimitPerCall is less than their node
|
|
207
|
+
* providers total gas limit per call.
|
|
208
|
+
*
|
|
209
|
+
* @export
|
|
210
|
+
* @class OnChainQuoteProvider
|
|
211
|
+
*/
|
|
212
|
+
export declare class OnChainQuoteProvider implements IOnChainQuoteProvider {
|
|
213
|
+
protected chainId: ChainId;
|
|
214
|
+
protected provider: BaseProvider;
|
|
215
|
+
protected multicall2Provider: UniswapMulticallProvider;
|
|
216
|
+
protected retryOptions: QuoteRetryOptions;
|
|
217
|
+
protected batchParams: (optimisticCachedRoutes: boolean, useMixedRouteQuoter: boolean) => BatchParams;
|
|
218
|
+
protected gasErrorFailureOverride: FailureOverrides;
|
|
219
|
+
protected successRateFailureOverrides: FailureOverrides;
|
|
220
|
+
protected blockNumberConfig: BlockNumberConfig;
|
|
221
|
+
protected quoterAddressOverride?: ((useMixedRouteQuoter: boolean, mixedRouteContainsV4Pool: boolean, protocol: Protocol) => string | undefined) | undefined;
|
|
222
|
+
protected metricsPrefix: (chainId: ChainId, useMixedRouteQuoter: boolean, optimisticCachedRoutes: boolean) => string;
|
|
223
|
+
/**
|
|
224
|
+
* Creates an instance of OnChainQuoteProvider.
|
|
225
|
+
*
|
|
226
|
+
* @param chainId The chain to get quotes for.
|
|
227
|
+
* @param provider The web 3 provider.
|
|
228
|
+
* @param multicall2Provider The multicall provider to use to get the quotes on-chain.
|
|
229
|
+
* Only supports the Uniswap Multicall contract as it needs the gas limitting functionality.
|
|
230
|
+
* @param retryOptions The retry options for each call to the multicall.
|
|
231
|
+
* @param batchParams The parameters for each batched call to the multicall.
|
|
232
|
+
* @param gasErrorFailureOverride The gas and chunk parameters to use when retrying a batch that failed due to out of gas.
|
|
233
|
+
* @param successRateFailureOverrides The parameters for retries when we fail to get quotes.
|
|
234
|
+
* @param blockNumberConfig Parameters for adjusting which block we get quotes from, and how to handle block header not found errors.
|
|
235
|
+
* @param [quoterAddressOverride] Overrides the address of the quoter contract to use.
|
|
236
|
+
* @param metricsPrefix metrics prefix to differentiate between different instances of the quote provider.
|
|
237
|
+
*/
|
|
238
|
+
constructor(chainId: ChainId, provider: BaseProvider, multicall2Provider: UniswapMulticallProvider, retryOptions?: QuoteRetryOptions, batchParams?: (optimisticCachedRoutes: boolean, useMixedRouteQuoter: boolean) => BatchParams, gasErrorFailureOverride?: FailureOverrides, successRateFailureOverrides?: FailureOverrides, blockNumberConfig?: BlockNumberConfig, quoterAddressOverride?: ((useMixedRouteQuoter: boolean, mixedRouteContainsV4Pool: boolean, protocol: Protocol) => string | undefined) | undefined, metricsPrefix?: (chainId: ChainId, useMixedRouteQuoter: boolean, optimisticCachedRoutes: boolean) => string);
|
|
239
|
+
private getQuoterAddress;
|
|
240
|
+
getQuotesManyExactIn<TRoute extends SupportedRoutes>(amountIns: CurrencyAmount[], routes: TRoute[], providerConfig?: ProviderConfig): Promise<OnChainQuotes<TRoute>>;
|
|
241
|
+
getQuotesManyExactOut<TRoute extends SupportedExactOutRoutes>(amountOuts: CurrencyAmount[], routes: TRoute[], providerConfig?: ProviderConfig): Promise<OnChainQuotes<TRoute>>;
|
|
242
|
+
private encodeRouteToPath;
|
|
243
|
+
private getContractInterface;
|
|
244
|
+
private consolidateResults;
|
|
245
|
+
private getQuotesManyData;
|
|
246
|
+
private partitionQuotes;
|
|
247
|
+
private processQuoteResults;
|
|
248
|
+
private validateBlockNumbers;
|
|
249
|
+
protected validateSuccessRate(allResults: Result<[BigNumber, BigNumber[], number[], BigNumber]>[], haveRetriedForSuccessRate: boolean, useMixedRouteQuoter: boolean, optimisticCachedRoutes: boolean): void | SuccessRateError;
|
|
250
|
+
/**
|
|
251
|
+
* Throw an error for incorrect routes / function combinations
|
|
252
|
+
* @param routes Any combination of V3, V2, and Mixed routes.
|
|
253
|
+
* @param functionName
|
|
254
|
+
* @param useMixedRouteQuoter true if there are ANY V2Routes or MixedRoutes in the routes parameter
|
|
255
|
+
*/
|
|
256
|
+
protected validateRoutes(routes: SupportedRoutes[], functionName: string, useMixedRouteQuoter: boolean): void;
|
|
257
|
+
}
|
|
258
|
+
export {};
|