@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,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TickBasedHeuristicGasModelFactory = void 0;
|
|
4
|
+
const bignumber_1 = require("@ethersproject/bignumber");
|
|
5
|
+
const sdk_core_1 = require("@fanx-protocol/sdk-core");
|
|
6
|
+
const util_1 = require("../../../util");
|
|
7
|
+
const gas_factory_helpers_1 = require("../../../util/gas-factory-helpers");
|
|
8
|
+
const gas_costs_1 = require("./gas-costs");
|
|
9
|
+
const gas_model_1 = require("./gas-model");
|
|
10
|
+
class TickBasedHeuristicGasModelFactory extends gas_model_1.IOnChainGasModelFactory {
|
|
11
|
+
constructor(provider) {
|
|
12
|
+
super();
|
|
13
|
+
this.provider = provider;
|
|
14
|
+
}
|
|
15
|
+
async buildGasModelInternal({ chainId, gasPriceWei, pools, amountToken, quoteToken, l2GasDataProvider, providerConfig, }) {
|
|
16
|
+
const l2GasData = l2GasDataProvider
|
|
17
|
+
? await l2GasDataProvider.getGasData(providerConfig)
|
|
18
|
+
: undefined;
|
|
19
|
+
const usdPool = pools.usdPool;
|
|
20
|
+
const calculateL1GasFees = async (route) => {
|
|
21
|
+
return await (0, gas_factory_helpers_1.calculateL1GasFeesHelper)(route, chainId, usdPool, quoteToken, pools.nativeAndQuoteTokenV3Pool, this.provider, l2GasData, providerConfig);
|
|
22
|
+
};
|
|
23
|
+
const nativeCurrency = util_1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
24
|
+
let nativeAmountPool = null;
|
|
25
|
+
if (!amountToken.equals(nativeCurrency)) {
|
|
26
|
+
nativeAmountPool = pools.nativeAndAmountTokenV3Pool;
|
|
27
|
+
}
|
|
28
|
+
const usdToken = usdPool.token0.equals(nativeCurrency)
|
|
29
|
+
? usdPool.token1
|
|
30
|
+
: usdPool.token0;
|
|
31
|
+
const estimateGasCost = (routeWithValidQuote) => {
|
|
32
|
+
var _a;
|
|
33
|
+
const { totalGasCostNativeCurrency, baseGasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId, providerConfig);
|
|
34
|
+
/** ------ MARK: USD logic -------- */
|
|
35
|
+
// We only need to go through V2 and V3 USD pools for now,
|
|
36
|
+
// because v4 pools don't have deep liquidity yet.
|
|
37
|
+
// If one day, we see v3 usd pools have much deeper liquidity than v2/v3 usd pools, then we will add v4 pools for gas cost
|
|
38
|
+
const gasCostInTermsOfUSD = (0, gas_model_1.getQuoteThroughNativePool)(chainId, totalGasCostNativeCurrency, usdPool);
|
|
39
|
+
/** ------ MARK: Conditional logic run if gasToken is specified -------- */
|
|
40
|
+
const nativeAndSpecifiedGasTokenPool = pools.nativeAndSpecifiedGasTokenV3Pool;
|
|
41
|
+
let gasCostInTermsOfGasToken = undefined;
|
|
42
|
+
// we don't want to fetch the gasToken pool if the gasToken is the native currency
|
|
43
|
+
if (nativeAndSpecifiedGasTokenPool) {
|
|
44
|
+
// We only need to go through V2 and V3 USD pools for now,
|
|
45
|
+
// because v4 pools don't have deep liquidity yet.
|
|
46
|
+
// If one day, we see v3 usd pools have much deeper liquidity than v2/v3 usd pools, then we will add v4 pools for gas cost
|
|
47
|
+
gasCostInTermsOfGasToken = (0, gas_model_1.getQuoteThroughNativePool)(chainId, totalGasCostNativeCurrency, nativeAndSpecifiedGasTokenPool);
|
|
48
|
+
}
|
|
49
|
+
// if the gasToken is the native currency, we can just use the totalGasCostNativeCurrency
|
|
50
|
+
else if ((_a = providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.gasToken) === null || _a === void 0 ? void 0 : _a.equals(nativeCurrency)) {
|
|
51
|
+
gasCostInTermsOfGasToken = totalGasCostNativeCurrency;
|
|
52
|
+
}
|
|
53
|
+
/** ------ MARK: return early if quoteToken is wrapped native currency ------- */
|
|
54
|
+
if (quoteToken.equals(nativeCurrency)) {
|
|
55
|
+
return {
|
|
56
|
+
gasEstimate: baseGasUse,
|
|
57
|
+
gasCostInToken: totalGasCostNativeCurrency,
|
|
58
|
+
gasCostInUSD: gasCostInTermsOfUSD,
|
|
59
|
+
gasCostInGasToken: gasCostInTermsOfGasToken,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** ------ MARK: Main gas logic in terms of quote token -------- */
|
|
63
|
+
// Since the quote token is not in the native currency, we convert the gas cost to be in terms of the quote token.
|
|
64
|
+
// We do this by getting the highest liquidity <quoteToken>/<nativeCurrency> pool. eg. <quoteToken>/ETH pool.
|
|
65
|
+
const nativeAndQuoteTokenPool = pools.nativeAndQuoteTokenV3Pool;
|
|
66
|
+
let gasCostInTermsOfQuoteToken = null;
|
|
67
|
+
if (nativeAndQuoteTokenPool) {
|
|
68
|
+
// We only need to go through V2 and V3 USD pools for now,
|
|
69
|
+
// because v4 pools don't have deep liquidity yet.
|
|
70
|
+
// If one day, we see v3 usd pools have much deeper liquidity than v2/v3 usd pools, then we will add v4 pools for gas cost
|
|
71
|
+
gasCostInTermsOfQuoteToken = (0, gas_model_1.getQuoteThroughNativePool)(chainId, totalGasCostNativeCurrency, nativeAndQuoteTokenPool);
|
|
72
|
+
}
|
|
73
|
+
// We may have a nativeAmountPool, but not a nativePool
|
|
74
|
+
else {
|
|
75
|
+
util_1.log.info(`Unable to find ${nativeCurrency.symbol} pool with the quote token, ${quoteToken.symbol} to produce gas adjusted costs. Using amountToken to calculate gas costs.`);
|
|
76
|
+
}
|
|
77
|
+
/** ------ MARK: (V3 ONLY) Logic for calculating synthetic gas cost in terms of amount token -------- */
|
|
78
|
+
// TODO: evaluate effectiveness and potentially refactor
|
|
79
|
+
// Highest liquidity pool for the non quote token / ETH
|
|
80
|
+
// A pool with the non quote token / ETH should not be required and errors should be handled separately
|
|
81
|
+
if (nativeAmountPool) {
|
|
82
|
+
// get current execution price (amountToken / quoteToken)
|
|
83
|
+
const executionPrice = new sdk_core_1.Price(routeWithValidQuote.amount.currency, routeWithValidQuote.quote.currency, routeWithValidQuote.amount.quotient, routeWithValidQuote.quote.quotient);
|
|
84
|
+
const inputIsToken0 = nativeAmountPool.token0.address == nativeCurrency.address;
|
|
85
|
+
// ratio of input / native
|
|
86
|
+
const nativeAndAmountTokenPrice = inputIsToken0
|
|
87
|
+
? nativeAmountPool.token0Price
|
|
88
|
+
: nativeAmountPool.token1Price;
|
|
89
|
+
const gasCostInTermsOfAmountToken = nativeAndAmountTokenPrice.quote(totalGasCostNativeCurrency);
|
|
90
|
+
// Convert gasCostInTermsOfAmountToken to quote token using execution price
|
|
91
|
+
let syntheticGasCostInTermsOfQuoteToken;
|
|
92
|
+
try {
|
|
93
|
+
syntheticGasCostInTermsOfQuoteToken = executionPrice.quote(gasCostInTermsOfAmountToken);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
if (err instanceof RangeError &&
|
|
97
|
+
err.message.includes('Division by zero')) {
|
|
98
|
+
// If the quote fails (division by zero), set syntheticGasCostInTermsOfQuoteToken to null
|
|
99
|
+
syntheticGasCostInTermsOfQuoteToken = null;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// any other error, throw
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Note that the syntheticGasCost being lessThan the original quoted value is not always strictly better
|
|
107
|
+
// e.g. the scenario where the amountToken/ETH pool is very illiquid as well and returns an extremely small number
|
|
108
|
+
// however, it is better to have the gasEstimation be almost 0 than almost infinity, as the user will still receive a quote
|
|
109
|
+
if (syntheticGasCostInTermsOfQuoteToken !== null &&
|
|
110
|
+
(gasCostInTermsOfQuoteToken === null ||
|
|
111
|
+
syntheticGasCostInTermsOfQuoteToken.lessThan(gasCostInTermsOfQuoteToken.asFraction))) {
|
|
112
|
+
util_1.log.info({
|
|
113
|
+
nativeAndAmountTokenPrice: nativeAndAmountTokenPrice.toSignificant(6),
|
|
114
|
+
gasCostInTermsOfQuoteToken: gasCostInTermsOfQuoteToken
|
|
115
|
+
? gasCostInTermsOfQuoteToken.toExact()
|
|
116
|
+
: 0,
|
|
117
|
+
gasCostInTermsOfAmountToken: gasCostInTermsOfAmountToken.toExact(),
|
|
118
|
+
executionPrice: executionPrice.toSignificant(6),
|
|
119
|
+
syntheticGasCostInTermsOfQuoteToken: syntheticGasCostInTermsOfQuoteToken === null || syntheticGasCostInTermsOfQuoteToken === void 0 ? void 0 : syntheticGasCostInTermsOfQuoteToken.toSignificant(6),
|
|
120
|
+
}, 'New gasCostInTermsOfQuoteToken calculated with synthetic quote token price is less than original');
|
|
121
|
+
gasCostInTermsOfQuoteToken = syntheticGasCostInTermsOfQuoteToken;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// If gasCostInTermsOfQuoteToken is null, both attempts to calculate gasCostInTermsOfQuoteToken failed (nativePool and amountNativePool)
|
|
125
|
+
if (gasCostInTermsOfQuoteToken === null) {
|
|
126
|
+
util_1.log.info(`Unable to find ${nativeCurrency.symbol} pool with the quote token, ${quoteToken.symbol}, or amount Token, ${amountToken.symbol} to produce gas adjusted costs. Route will not account for gas.`);
|
|
127
|
+
return {
|
|
128
|
+
gasEstimate: baseGasUse,
|
|
129
|
+
gasCostInToken: util_1.CurrencyAmount.fromRawAmount(quoteToken, 0),
|
|
130
|
+
gasCostInUSD: util_1.CurrencyAmount.fromRawAmount(usdToken, 0),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
gasEstimate: baseGasUse,
|
|
135
|
+
gasCostInToken: gasCostInTermsOfQuoteToken,
|
|
136
|
+
gasCostInUSD: gasCostInTermsOfUSD,
|
|
137
|
+
gasCostInGasToken: gasCostInTermsOfGasToken,
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
return {
|
|
141
|
+
estimateGasCost: estimateGasCost.bind(this),
|
|
142
|
+
calculateL1GasFees,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
estimateGas(routeWithValidQuote, gasPriceWei, chainId, providerConfig) {
|
|
146
|
+
var _a;
|
|
147
|
+
const totalInitializedTicksCrossed = this.totalInitializedTicksCrossed(routeWithValidQuote.initializedTicksCrossedList);
|
|
148
|
+
const totalHops = bignumber_1.BigNumber.from(routeWithValidQuote.route.pools.length);
|
|
149
|
+
let hopsGasUse = (0, gas_costs_1.COST_PER_HOP)(chainId).mul(totalHops);
|
|
150
|
+
// We have observed that this algorithm tends to underestimate single hop swaps.
|
|
151
|
+
// We add a buffer in the case of a single hop swap.
|
|
152
|
+
if (totalHops.eq(1)) {
|
|
153
|
+
hopsGasUse = hopsGasUse.add((0, gas_costs_1.SINGLE_HOP_OVERHEAD)(chainId));
|
|
154
|
+
}
|
|
155
|
+
// Some tokens have extremely expensive transferFrom functions, which causes
|
|
156
|
+
// us to underestimate them by a large amount. For known tokens, we apply an
|
|
157
|
+
// adjustment.
|
|
158
|
+
const tokenOverhead = (0, gas_costs_1.TOKEN_OVERHEAD)(chainId, routeWithValidQuote.route);
|
|
159
|
+
const tickGasUse = (0, gas_costs_1.COST_PER_INIT_TICK)(chainId).mul(totalInitializedTicksCrossed);
|
|
160
|
+
const uninitializedTickGasUse = gas_costs_1.COST_PER_UNINIT_TICK.mul(0);
|
|
161
|
+
/*
|
|
162
|
+
// Eventually we can just use the quoter gas estimate for the base gas use
|
|
163
|
+
// It will be more accurate than doing the offchain gas estimate like below
|
|
164
|
+
// V4 hookful routing is not supported
|
|
165
|
+
// const baseGasUse = routeWithValidQuote.quoterGasEstimate
|
|
166
|
+
*/
|
|
167
|
+
// base estimate gas used based on chainId estimates for hops and ticks gas useage
|
|
168
|
+
const baseGasUse = (0, gas_costs_1.BASE_SWAP_COST)(chainId)
|
|
169
|
+
.add(hopsGasUse)
|
|
170
|
+
.add(tokenOverhead)
|
|
171
|
+
.add(tickGasUse)
|
|
172
|
+
.add(uninitializedTickGasUse)
|
|
173
|
+
.add((_a = providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.additionalGasOverhead) !== null && _a !== void 0 ? _a : bignumber_1.BigNumber.from(0));
|
|
174
|
+
const baseGasCostWei = gasPriceWei.mul(baseGasUse);
|
|
175
|
+
const wrappedCurrency = util_1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
176
|
+
const totalGasCostNativeCurrency = util_1.CurrencyAmount.fromRawAmount(wrappedCurrency, baseGasCostWei.toString());
|
|
177
|
+
return {
|
|
178
|
+
totalGasCostNativeCurrency,
|
|
179
|
+
totalInitializedTicksCrossed,
|
|
180
|
+
baseGasUse,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.TickBasedHeuristicGasModelFactory = TickBasedHeuristicGasModelFactory;
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGljay1iYXNlZC1oZXVyaXN0aWMtZ2FzLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL2dhcy1tb2RlbHMvdGljay1iYXNlZC1oZXVyaXN0aWMtZ2FzLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQUFxRDtBQUVyRCxzREFBeUQ7QUFFekQsd0NBQTZFO0FBQzdFLDJFQUE2RTtBQUk3RSwyQ0FPcUI7QUFDckIsMkNBTXFCO0FBRXJCLE1BQXNCLGlDQUVwQixTQUFRLG1DQUE2QztJQUdyRCxZQUFzQixRQUFzQjtRQUMxQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFUyxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFDcEMsT0FBTyxFQUNQLFdBQVcsRUFDWCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsY0FBYyxHQUNrQjtRQUdoQyxNQUFNLFNBQVMsR0FBRyxpQkFBaUI7WUFDakMsQ0FBQyxDQUFDLE1BQU0saUJBQWlCLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsTUFBTSxPQUFPLEdBQVMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUVwQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFDOUIsS0FBNkIsRUFNNUIsRUFBRTtZQUNILE9BQU8sTUFBTSxJQUFBLDhDQUF3QixFQUNuQyxLQUFLLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxDQUFDLHlCQUF5QixFQUMvQixJQUFJLENBQUMsUUFBUSxFQUNiLFNBQVMsRUFDVCxjQUFjLENBQ2YsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLDhCQUF1QixDQUFDLE9BQU8sQ0FBRSxDQUFDO1FBQ3pELElBQUksZ0JBQWdCLEdBQWdCLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN2QyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsMEJBQTBCLENBQUM7U0FDckQ7UUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDcEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ2hCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRW5CLE1BQU0sZUFBZSxHQUFHLENBQ3RCLG1CQUF5QyxFQU16QyxFQUFFOztZQUNGLE1BQU0sRUFBRSwwQkFBMEIsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUNqRSxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLE9BQU8sRUFDUCxjQUFjLENBQ2YsQ0FBQztZQUVGLHVDQUF1QztZQUN2QywwREFBMEQ7WUFDMUQsa0RBQWtEO1lBQ2xELDBIQUEwSDtZQUMxSCxNQUFNLG1CQUFtQixHQUFHLElBQUEscUNBQXlCLEVBQ25ELE9BQU8sRUFDUCwwQkFBMEIsRUFDMUIsT0FBTyxDQUNSLENBQUM7WUFFRiw0RUFBNEU7WUFDNUUsTUFBTSw4QkFBOEIsR0FDbEMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDO1lBQ3pDLElBQUksd0JBQXdCLEdBQStCLFNBQVMsQ0FBQztZQUNyRSxrRkFBa0Y7WUFDbEYsSUFBSSw4QkFBOEIsRUFBRTtnQkFDbEMsMERBQTBEO2dCQUMxRCxrREFBa0Q7Z0JBQ2xELDBIQUEwSDtnQkFDMUgsd0JBQXdCLEdBQUcsSUFBQSxxQ0FBeUIsRUFDbEQsT0FBTyxFQUNQLDBCQUEwQixFQUMxQiw4QkFBOEIsQ0FDL0IsQ0FBQzthQUNIO1lBQ0QseUZBQXlGO2lCQUNwRixJQUFJLE1BQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFFBQVEsMENBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUN6RCx3QkFBd0IsR0FBRywwQkFBMEIsQ0FBQzthQUN2RDtZQUVELGlGQUFpRjtZQUNqRixJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ3JDLE9BQU87b0JBQ0wsV0FBVyxFQUFFLFVBQVU7b0JBQ3ZCLGNBQWMsRUFBRSwwQkFBMEI7b0JBQzFDLFlBQVksRUFBRSxtQkFBbUI7b0JBQ2pDLGlCQUFpQixFQUFFLHdCQUF3QjtpQkFDNUMsQ0FBQzthQUNIO1lBRUQsbUVBQW1FO1lBRW5FLGtIQUFrSDtZQUNsSCw2R0FBNkc7WUFDN0csTUFBTSx1QkFBdUIsR0FDM0IsS0FBSyxDQUFDLHlCQUF5QixDQUFDO1lBRWxDLElBQUksMEJBQTBCLEdBQTBCLElBQUksQ0FBQztZQUM3RCxJQUFJLHVCQUF1QixFQUFFO2dCQUMzQiwwREFBMEQ7Z0JBQzFELGtEQUFrRDtnQkFDbEQsMEhBQTBIO2dCQUMxSCwwQkFBMEIsR0FBRyxJQUFBLHFDQUF5QixFQUNwRCxPQUFPLEVBQ1AsMEJBQTBCLEVBQzFCLHVCQUF1QixDQUN4QixDQUFDO2FBQ0g7WUFDRCx1REFBdUQ7aUJBQ2xEO2dCQUNILFVBQUcsQ0FBQyxJQUFJLENBQ04sa0JBQWtCLGNBQWMsQ0FBQyxNQUFNLCtCQUErQixVQUFVLENBQUMsTUFBTSwyRUFBMkUsQ0FDbkssQ0FBQzthQUNIO1lBRUQsd0dBQXdHO1lBQ3hHLHdEQUF3RDtZQUV4RCx1REFBdUQ7WUFDdkQsdUdBQXVHO1lBQ3ZHLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3BCLHlEQUF5RDtnQkFDekQsTUFBTSxjQUFjLEdBQUcsSUFBSSxnQkFBSyxDQUM5QixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNuQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUNsQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNuQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNuQyxDQUFDO2dCQUVGLE1BQU0sYUFBYSxHQUNqQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0JBQzVELDBCQUEwQjtnQkFDMUIsTUFBTSx5QkFBeUIsR0FBRyxhQUFhO29CQUM3QyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsV0FBVztvQkFDOUIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztnQkFFakMsTUFBTSwyQkFBMkIsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQ2pFLDBCQUEwQixDQUNULENBQUM7Z0JBRXBCLDJFQUEyRTtnQkFDM0UsSUFBSSxtQ0FBMEQsQ0FBQztnQkFDL0QsSUFBSTtvQkFDRixtQ0FBbUMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUN4RCwyQkFBMkIsQ0FDNUIsQ0FBQztpQkFDSDtnQkFBQyxPQUFPLEdBQUcsRUFBRTtvQkFDWixJQUNFLEdBQUcsWUFBWSxVQUFVO3dCQUN6QixHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUN4Qzt3QkFDQSx5RkFBeUY7d0JBQ3pGLG1DQUFtQyxHQUFHLElBQUksQ0FBQztxQkFDNUM7eUJBQU07d0JBQ0wseUJBQXlCO3dCQUN6QixNQUFNLEdBQUcsQ0FBQztxQkFDWDtpQkFDRjtnQkFFRCx3R0FBd0c7Z0JBQ3hHLGtIQUFrSDtnQkFDbEgsMkhBQTJIO2dCQUMzSCxJQUNFLG1DQUFtQyxLQUFLLElBQUk7b0JBQzVDLENBQUMsMEJBQTBCLEtBQUssSUFBSTt3QkFDbEMsbUNBQW1DLENBQUMsUUFBUSxDQUMxQywwQkFBMEIsQ0FBQyxVQUFVLENBQ3RDLENBQUMsRUFDSjtvQkFDQSxVQUFHLENBQUMsSUFBSSxDQUNOO3dCQUNFLHlCQUF5QixFQUN2Qix5QkFBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUM1QywwQkFBMEIsRUFBRSwwQkFBMEI7NEJBQ3BELENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUU7NEJBQ3RDLENBQUMsQ0FBQyxDQUFDO3dCQUNMLDJCQUEyQixFQUN6QiwyQkFBMkIsQ0FBQyxPQUFPLEVBQUU7d0JBQ3ZDLGNBQWMsRUFBRSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzt3QkFDL0MsbUNBQW1DLEVBQ2pDLG1DQUFtQyxhQUFuQyxtQ0FBbUMsdUJBQW5DLG1DQUFtQyxDQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7cUJBQ3hELEVBQ0Qsa0dBQWtHLENBQ25HLENBQUM7b0JBRUYsMEJBQTBCLEdBQUcsbUNBQW1DLENBQUM7aUJBQ2xFO2FBQ0Y7WUFFRCx3SUFBd0k7WUFDeEksSUFBSSwwQkFBMEIsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZDLFVBQUcsQ0FBQyxJQUFJLENBQ04sa0JBQWtCLGNBQWMsQ0FBQyxNQUFNLCtCQUErQixVQUFVLENBQUMsTUFBTSxzQkFBc0IsV0FBVyxDQUFDLE1BQU0saUVBQWlFLENBQ2pNLENBQUM7Z0JBQ0YsT0FBTztvQkFDTCxXQUFXLEVBQUUsVUFBVTtvQkFDdkIsY0FBYyxFQUFFLHFCQUFjLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7b0JBQzNELFlBQVksRUFBRSxxQkFBYyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2lCQUN4RCxDQUFDO2FBQ0g7WUFFRCxPQUFPO2dCQUNMLFdBQVcsRUFBRSxVQUFVO2dCQUN2QixjQUFjLEVBQUUsMEJBQTBCO2dCQUMxQyxZQUFZLEVBQUUsbUJBQW9CO2dCQUNsQyxpQkFBaUIsRUFBRSx3QkFBd0I7YUFDNUMsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLE9BQU87WUFDTCxlQUFlLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0Msa0JBQWtCO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRVMsV0FBVyxDQUNuQixtQkFBeUMsRUFDekMsV0FBc0IsRUFDdEIsT0FBZ0IsRUFDaEIsY0FBdUM7O1FBRXZDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUNwRSxtQkFBbUIsQ0FBQywyQkFBMkIsQ0FDaEQsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLHFCQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFekUsSUFBSSxVQUFVLEdBQUcsSUFBQSx3QkFBWSxFQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxnRkFBZ0Y7UUFDaEYsb0RBQW9EO1FBQ3BELElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFBLCtCQUFtQixFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFFRCw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLGNBQWM7UUFDZCxNQUFNLGFBQWEsR0FBRyxJQUFBLDBCQUFjLEVBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpFLE1BQU0sVUFBVSxHQUFHLElBQUEsOEJBQWtCLEVBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUNoRCw0QkFBNEIsQ0FDN0IsQ0FBQztRQUNGLE1BQU0sdUJBQXVCLEdBQUcsZ0NBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVEOzs7OztVQUtFO1FBRUYsa0ZBQWtGO1FBQ2xGLE1BQU0sVUFBVSxHQUFHLElBQUEsMEJBQWMsRUFBQyxPQUFPLENBQUM7YUFDdkMsR0FBRyxDQUFDLFVBQVUsQ0FBQzthQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUM7YUFDbEIsR0FBRyxDQUFDLFVBQVUsQ0FBQzthQUNmLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQzthQUM1QixHQUFHLENBQUMsTUFBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUscUJBQXFCLG1DQUFJLHFCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkUsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuRCxNQUFNLGVBQWUsR0FBRyw4QkFBdUIsQ0FBQyxPQUFPLENBQUUsQ0FBQztRQUUxRCxNQUFNLDBCQUEwQixHQUFHLHFCQUFjLENBQUMsYUFBYSxDQUM3RCxlQUFlLEVBQ2YsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUMxQixDQUFDO1FBRUYsT0FBTztZQUNMLDBCQUEwQjtZQUMxQiw0QkFBNEI7WUFDNUIsVUFBVTtTQUNYLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF4U0QsOEVBd1NDIn0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
3
|
+
import { V2RouteWithValidQuote } from '../../entities/route-with-valid-quote';
|
|
4
|
+
import { BuildV2GasModelFactoryType, IGasModel, IV2GasModelFactory } from '../gas-model';
|
|
5
|
+
export declare const BASE_SWAP_COST: BigNumber;
|
|
6
|
+
export declare const COST_PER_EXTRA_HOP: BigNumber;
|
|
7
|
+
/**
|
|
8
|
+
* Computes a gas estimate for a V2 swap using heuristics.
|
|
9
|
+
* Considers number of hops in the route and the typical base cost for a swap.
|
|
10
|
+
*
|
|
11
|
+
* We compute gas estimates off-chain because
|
|
12
|
+
* 1/ Calling eth_estimateGas for a swaps requires the caller to have
|
|
13
|
+
* the full balance token being swapped, and approvals.
|
|
14
|
+
* 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
|
|
15
|
+
* due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
|
|
16
|
+
* 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
|
|
17
|
+
*
|
|
18
|
+
* Note, certain tokens e.g. rebasing/fee-on-transfer, may incur higher gas costs than
|
|
19
|
+
* what we estimate here. This is because they run extra logic on token transfer.
|
|
20
|
+
*
|
|
21
|
+
* @export
|
|
22
|
+
* @class V2HeuristicGasModelFactory
|
|
23
|
+
*/
|
|
24
|
+
export declare class V2HeuristicGasModelFactory extends IV2GasModelFactory {
|
|
25
|
+
private provider;
|
|
26
|
+
constructor(provider: BaseProvider);
|
|
27
|
+
buildGasModel({ chainId, gasPriceWei, poolProvider, token, l2GasDataProvider, providerConfig, }: BuildV2GasModelFactoryType): Promise<IGasModel<V2RouteWithValidQuote>>;
|
|
28
|
+
private estimateGas;
|
|
29
|
+
private getEthPool;
|
|
30
|
+
private getHighestLiquidityUSDPool;
|
|
31
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
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.V2HeuristicGasModelFactory = exports.COST_PER_EXTRA_HOP = exports.BASE_SWAP_COST = void 0;
|
|
7
|
+
const bignumber_1 = require("@ethersproject/bignumber");
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const util_1 = require("../../../../util");
|
|
10
|
+
const amounts_1 = require("../../../../util/amounts");
|
|
11
|
+
const gas_factory_helpers_1 = require("../../../../util/gas-factory-helpers");
|
|
12
|
+
const gas_model_1 = require("../gas-model");
|
|
13
|
+
// Constant cost for doing any swap regardless of pools.
|
|
14
|
+
exports.BASE_SWAP_COST = bignumber_1.BigNumber.from(135000); // 115000, bumped up by 20_000 @eric 7/8/2022
|
|
15
|
+
// Constant per extra hop in the route.
|
|
16
|
+
exports.COST_PER_EXTRA_HOP = bignumber_1.BigNumber.from(50000); // 20000, bumped up by 30_000 @eric 7/8/2022
|
|
17
|
+
/**
|
|
18
|
+
* Computes a gas estimate for a V2 swap using heuristics.
|
|
19
|
+
* Considers number of hops in the route and the typical base cost for a swap.
|
|
20
|
+
*
|
|
21
|
+
* We compute gas estimates off-chain because
|
|
22
|
+
* 1/ Calling eth_estimateGas for a swaps requires the caller to have
|
|
23
|
+
* the full balance token being swapped, and approvals.
|
|
24
|
+
* 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
|
|
25
|
+
* due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
|
|
26
|
+
* 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
|
|
27
|
+
*
|
|
28
|
+
* Note, certain tokens e.g. rebasing/fee-on-transfer, may incur higher gas costs than
|
|
29
|
+
* what we estimate here. This is because they run extra logic on token transfer.
|
|
30
|
+
*
|
|
31
|
+
* @export
|
|
32
|
+
* @class V2HeuristicGasModelFactory
|
|
33
|
+
*/
|
|
34
|
+
class V2HeuristicGasModelFactory extends gas_model_1.IV2GasModelFactory {
|
|
35
|
+
constructor(provider) {
|
|
36
|
+
super();
|
|
37
|
+
this.provider = provider;
|
|
38
|
+
}
|
|
39
|
+
async buildGasModel({ chainId, gasPriceWei, poolProvider, token, l2GasDataProvider, providerConfig, }) {
|
|
40
|
+
const l2GasData = l2GasDataProvider
|
|
41
|
+
? await l2GasDataProvider.getGasData(providerConfig)
|
|
42
|
+
: undefined;
|
|
43
|
+
const usdPoolPromise = this.getHighestLiquidityUSDPool(chainId, poolProvider, providerConfig);
|
|
44
|
+
// Only fetch the native gasToken pool if specified by the config AND the gas token is not the native currency.
|
|
45
|
+
const nativeAndSpecifiedGasTokenPoolPromise = (providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.gasToken) &&
|
|
46
|
+
!(providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.gasToken.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId]))
|
|
47
|
+
? this.getEthPool(chainId, providerConfig.gasToken, poolProvider, providerConfig)
|
|
48
|
+
: Promise.resolve(null);
|
|
49
|
+
const [usdPool, nativeAndSpecifiedGasTokenPool] = await Promise.all([
|
|
50
|
+
usdPoolPromise,
|
|
51
|
+
nativeAndSpecifiedGasTokenPoolPromise,
|
|
52
|
+
]);
|
|
53
|
+
let ethPool = null;
|
|
54
|
+
if (!token.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])) {
|
|
55
|
+
ethPool = await this.getEthPool(chainId, token, poolProvider, providerConfig);
|
|
56
|
+
}
|
|
57
|
+
const usdToken = usdPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address
|
|
58
|
+
? usdPool.token1
|
|
59
|
+
: usdPool.token0;
|
|
60
|
+
const calculateL1GasFees = async (route) => {
|
|
61
|
+
const nativePool = !token.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])
|
|
62
|
+
? await (0, gas_factory_helpers_1.getV2NativePool)(token, poolProvider, providerConfig)
|
|
63
|
+
: null;
|
|
64
|
+
return await (0, gas_factory_helpers_1.calculateL1GasFeesHelper)(route, chainId, usdPool, token, nativePool, this.provider, l2GasData);
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
estimateGasCost: (routeWithValidQuote) => {
|
|
68
|
+
var _a;
|
|
69
|
+
const { gasCostInEth, gasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId, providerConfig);
|
|
70
|
+
/** ------ MARK: USD logic -------- */
|
|
71
|
+
const gasCostInTermsOfUSD = (0, gas_model_1.getQuoteThroughNativePool)(chainId, gasCostInEth, usdPool);
|
|
72
|
+
/** ------ MARK: Conditional logic run if gasToken is specified -------- */
|
|
73
|
+
let gasCostInTermsOfGasToken = undefined;
|
|
74
|
+
if (nativeAndSpecifiedGasTokenPool) {
|
|
75
|
+
gasCostInTermsOfGasToken = (0, gas_model_1.getQuoteThroughNativePool)(chainId, gasCostInEth, nativeAndSpecifiedGasTokenPool);
|
|
76
|
+
}
|
|
77
|
+
// if the gasToken is the native currency, we can just use the gasCostInEth
|
|
78
|
+
else if ((_a = providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.gasToken) === null || _a === void 0 ? void 0 : _a.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])) {
|
|
79
|
+
gasCostInTermsOfGasToken = gasCostInEth;
|
|
80
|
+
}
|
|
81
|
+
/** ------ MARK: return early if quoteToken is wrapped native currency ------- */
|
|
82
|
+
if (token.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])) {
|
|
83
|
+
return {
|
|
84
|
+
gasEstimate: gasUse,
|
|
85
|
+
gasCostInToken: gasCostInEth,
|
|
86
|
+
gasCostInUSD: gasCostInTermsOfUSD,
|
|
87
|
+
gasCostInGasToken: gasCostInTermsOfGasToken,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// If the quote token is not WETH, we convert the gas cost to be in terms of the quote token.
|
|
91
|
+
// We do this by getting the highest liquidity <token>/ETH pool.
|
|
92
|
+
if (!ethPool) {
|
|
93
|
+
util_1.log.info('Unable to find ETH pool with the quote token to produce gas adjusted costs. Route will not account for gas.');
|
|
94
|
+
return {
|
|
95
|
+
gasEstimate: gasUse,
|
|
96
|
+
gasCostInToken: amounts_1.CurrencyAmount.fromRawAmount(token, 0),
|
|
97
|
+
gasCostInUSD: amounts_1.CurrencyAmount.fromRawAmount(usdToken, 0),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const gasCostInTermsOfQuoteToken = (0, gas_model_1.getQuoteThroughNativePool)(chainId, gasCostInEth, ethPool);
|
|
101
|
+
return {
|
|
102
|
+
gasEstimate: gasUse,
|
|
103
|
+
gasCostInToken: gasCostInTermsOfQuoteToken,
|
|
104
|
+
gasCostInUSD: gasCostInTermsOfUSD,
|
|
105
|
+
gasCostInGasToken: gasCostInTermsOfGasToken,
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
calculateL1GasFees,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
estimateGas(routeWithValidQuote, gasPriceWei, chainId, providerConfig) {
|
|
112
|
+
const hops = routeWithValidQuote.route.pairs.length;
|
|
113
|
+
let gasUse = exports.BASE_SWAP_COST.add(exports.COST_PER_EXTRA_HOP.mul(hops - 1));
|
|
114
|
+
if (providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.additionalGasOverhead) {
|
|
115
|
+
gasUse = gasUse.add(providerConfig.additionalGasOverhead);
|
|
116
|
+
}
|
|
117
|
+
const totalGasCostWei = gasPriceWei.mul(gasUse);
|
|
118
|
+
const weth = util_1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
119
|
+
const gasCostInEth = amounts_1.CurrencyAmount.fromRawAmount(weth, totalGasCostWei.toString());
|
|
120
|
+
return { gasCostInEth, gasUse };
|
|
121
|
+
}
|
|
122
|
+
async getEthPool(chainId, token, poolProvider, providerConfig) {
|
|
123
|
+
const weth = util_1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
124
|
+
const poolAccessor = await poolProvider.getPools([[weth, token]], providerConfig);
|
|
125
|
+
const pool = poolAccessor.getPool(weth, token);
|
|
126
|
+
if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {
|
|
127
|
+
util_1.log.error({
|
|
128
|
+
weth,
|
|
129
|
+
token,
|
|
130
|
+
reserve0: pool === null || pool === void 0 ? void 0 : pool.reserve0.toExact(),
|
|
131
|
+
reserve1: pool === null || pool === void 0 ? void 0 : pool.reserve1.toExact(),
|
|
132
|
+
}, `Could not find a valid WETH pool with ${token.symbol} for computing gas costs.`);
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
return pool;
|
|
136
|
+
}
|
|
137
|
+
async getHighestLiquidityUSDPool(chainId, poolProvider, providerConfig) {
|
|
138
|
+
const usdTokens = gas_model_1.usdGasTokensByChain[chainId];
|
|
139
|
+
if (!usdTokens) {
|
|
140
|
+
throw new Error(`Could not find a USD token for computing gas costs on ${chainId}`);
|
|
141
|
+
}
|
|
142
|
+
const usdPools = lodash_1.default.map(usdTokens, (usdToken) => [
|
|
143
|
+
usdToken,
|
|
144
|
+
util_1.WRAPPED_NATIVE_CURRENCY[chainId],
|
|
145
|
+
]);
|
|
146
|
+
const poolAccessor = await poolProvider.getPools(usdPools, providerConfig);
|
|
147
|
+
const poolsRaw = poolAccessor.getAllPools();
|
|
148
|
+
const pools = poolsRaw.filter((pool) => pool.reserve0.greaterThan(0) &&
|
|
149
|
+
pool.reserve1.greaterThan(0) &&
|
|
150
|
+
// this case should never happen in production, but when we mock the pool provider it may return non native pairs
|
|
151
|
+
(pool.token0.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId]) ||
|
|
152
|
+
pool.token1.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])));
|
|
153
|
+
if (pools.length == 0) {
|
|
154
|
+
util_1.log.error({ pools }, `Could not find a USD/WETH pool for computing gas costs.`);
|
|
155
|
+
throw new Error(`Can't find USD/WETH pool for computing gas costs.`);
|
|
156
|
+
}
|
|
157
|
+
const maxPool = lodash_1.default.maxBy(pools, (pool) => {
|
|
158
|
+
if (pool.token0.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])) {
|
|
159
|
+
return parseFloat(pool.reserve0.toSignificant(2));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
return parseFloat(pool.reserve1.toSignificant(2));
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return maxPool;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.V2HeuristicGasModelFactory = V2HeuristicGasModelFactory;
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjItaGV1cmlzdGljLWdhcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2FscGhhLXJvdXRlci9nYXMtbW9kZWxzL3YyL3YyLWhldXJpc3RpYy1nYXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQXFEO0FBR3JELG9EQUF1QjtBQUt2QiwyQ0FBZ0U7QUFDaEUsc0RBQTBEO0FBQzFELDhFQUc4QztBQUU5Qyw0Q0FPc0I7QUFFdEIsd0RBQXdEO0FBQzNDLFFBQUEsY0FBYyxHQUFHLHFCQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsNkNBQTZDO0FBRW5HLHVDQUF1QztBQUMxQixRQUFBLGtCQUFrQixHQUFHLHFCQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNENBQTRDO0FBRXJHOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBYSwwQkFBMkIsU0FBUSw4QkFBa0I7SUFHaEUsWUFBWSxRQUFzQjtRQUNoQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQ3pCLE9BQU8sRUFDUCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxpQkFBaUIsRUFDakIsY0FBYyxHQUNhO1FBQzNCLE1BQU0sU0FBUyxHQUFHLGlCQUFpQjtZQUNqQyxDQUFDLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLGNBQWMsR0FBa0IsSUFBSSxDQUFDLDBCQUEwQixDQUNuRSxPQUFPLEVBQ1AsWUFBWSxFQUNaLGNBQWMsQ0FDZixDQUFDO1FBRUYsK0dBQStHO1FBQy9HLE1BQU0scUNBQXFDLEdBQ3pDLENBQUEsY0FBYyxh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
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { V3RouteWithValidQuote } from '../../entities/route-with-valid-quote';
|
|
2
|
+
import { BuildOnChainGasModelFactoryType, IGasModel } from '../gas-model';
|
|
3
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
4
|
+
import { TickBasedHeuristicGasModelFactory } from '../tick-based-heuristic-gas-model';
|
|
5
|
+
/**
|
|
6
|
+
* Computes a gas estimate for a V3 swap using heuristics.
|
|
7
|
+
* Considers number of hops in the route, number of ticks crossed
|
|
8
|
+
* and the typical base cost for a swap.
|
|
9
|
+
*
|
|
10
|
+
* We get the number of ticks crossed in a swap from the QuoterV2
|
|
11
|
+
* contract.
|
|
12
|
+
*
|
|
13
|
+
* We compute gas estimates off-chain because
|
|
14
|
+
* 1/ Calling eth_estimateGas for a swaps requires the caller to have
|
|
15
|
+
* the full balance token being swapped, and approvals.
|
|
16
|
+
* 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
|
|
17
|
+
* due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
|
|
18
|
+
* 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
|
|
19
|
+
*
|
|
20
|
+
* @export
|
|
21
|
+
* @class V3HeuristicGasModelFactory
|
|
22
|
+
*/
|
|
23
|
+
export declare class V3HeuristicGasModelFactory extends TickBasedHeuristicGasModelFactory<V3RouteWithValidQuote> {
|
|
24
|
+
constructor(provider: BaseProvider);
|
|
25
|
+
buildGasModel({ chainId, gasPriceWei, pools, amountToken, quoteToken, v2poolProvider, l2GasDataProvider, providerConfig, }: BuildOnChainGasModelFactoryType): Promise<IGasModel<V3RouteWithValidQuote>>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.V3HeuristicGasModelFactory = void 0;
|
|
4
|
+
const tick_based_heuristic_gas_model_1 = require("../tick-based-heuristic-gas-model");
|
|
5
|
+
/**
|
|
6
|
+
* Computes a gas estimate for a V3 swap using heuristics.
|
|
7
|
+
* Considers number of hops in the route, number of ticks crossed
|
|
8
|
+
* and the typical base cost for a swap.
|
|
9
|
+
*
|
|
10
|
+
* We get the number of ticks crossed in a swap from the QuoterV2
|
|
11
|
+
* contract.
|
|
12
|
+
*
|
|
13
|
+
* We compute gas estimates off-chain because
|
|
14
|
+
* 1/ Calling eth_estimateGas for a swaps requires the caller to have
|
|
15
|
+
* the full balance token being swapped, and approvals.
|
|
16
|
+
* 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
|
|
17
|
+
* due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
|
|
18
|
+
* 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
|
|
19
|
+
*
|
|
20
|
+
* @export
|
|
21
|
+
* @class V3HeuristicGasModelFactory
|
|
22
|
+
*/
|
|
23
|
+
class V3HeuristicGasModelFactory extends tick_based_heuristic_gas_model_1.TickBasedHeuristicGasModelFactory {
|
|
24
|
+
constructor(provider) {
|
|
25
|
+
super(provider);
|
|
26
|
+
}
|
|
27
|
+
async buildGasModel({ chainId, gasPriceWei, pools, amountToken, quoteToken, v2poolProvider, l2GasDataProvider, providerConfig, }) {
|
|
28
|
+
return await super.buildGasModelInternal({
|
|
29
|
+
chainId,
|
|
30
|
+
gasPriceWei,
|
|
31
|
+
pools,
|
|
32
|
+
amountToken,
|
|
33
|
+
quoteToken,
|
|
34
|
+
v2poolProvider,
|
|
35
|
+
l2GasDataProvider,
|
|
36
|
+
providerConfig,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.V3HeuristicGasModelFactory = V3HeuristicGasModelFactory;
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjMtaGV1cmlzdGljLWdhcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2FscGhhLXJvdXRlci9nYXMtbW9kZWxzL3YzL3YzLWhldXJpc3RpYy1nYXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsc0ZBQXNGO0FBRXRGOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsMEJBQTJCLFNBQVEsa0VBQXdEO0lBQ3RHLFlBQVksUUFBc0I7UUFDaEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFZSxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQ2xDLE9BQU8sRUFDUCxXQUFXLEVBQ1gsS0FBSyxFQUNMLFdBQVcsRUFDWCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixjQUFjLEdBQ2tCO1FBR2hDLE9BQU8sTUFBTSxLQUFLLENBQUMscUJBQXFCLENBQUM7WUFDdkMsT0FBTztZQUNQLFdBQVc7WUFDWCxLQUFLO1lBQ0wsV0FBVztZQUNYLFVBQVU7WUFDVixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLGNBQWM7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE1QkQsZ0VBNEJDIn0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./alpha-router"), exports);
|
|
18
|
+
__exportStar(require("./entities"), exports);
|
|
19
|
+
__exportStar(require("./gas-models"), exports);
|
|
20
|
+
__exportStar(require("./quoters"), exports);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcm91dGVycy9hbHBoYS1yb3V0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQjtBQUMvQiw2Q0FBMkI7QUFDM0IsK0NBQTZCO0FBQzdCLDRDQUEwQiJ9
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { Protocol } from '@fanx-protocol/router-sdk';
|
|
3
|
+
import { ChainId, Currency, Token, TradeType } from '@fanx-protocol/sdk-core';
|
|
4
|
+
import { ITokenListProvider, ITokenProvider, ITokenValidatorProvider, TokenValidationResult } from '../../../providers';
|
|
5
|
+
import { CurrencyAmount } from '../../../util';
|
|
6
|
+
import { SupportedRoutes } from '../../router';
|
|
7
|
+
import { AlphaRouterConfig } from '../alpha-router';
|
|
8
|
+
import { RouteWithValidQuote } from '../entities/route-with-valid-quote';
|
|
9
|
+
import { CandidatePoolsBySelectionCriteria, CrossLiquidityCandidatePools, SupportedCandidatePools, V2CandidatePools, V3CandidatePools } from '../functions/get-candidate-pools';
|
|
10
|
+
import { IGasModel } from '../gas-models';
|
|
11
|
+
import { TPool } from '@fanx-protocol/router-sdk/dist/utils/TPool';
|
|
12
|
+
import { GetQuotesResult, GetRoutesResult } from './model/results';
|
|
13
|
+
/**
|
|
14
|
+
* Interface for a Quoter.
|
|
15
|
+
* Defines the base dependencies, helper methods and interface for how to fetch quotes.
|
|
16
|
+
*
|
|
17
|
+
* @abstract
|
|
18
|
+
* @template CandidatePools
|
|
19
|
+
* @template Route
|
|
20
|
+
*/
|
|
21
|
+
export declare abstract class BaseQuoter<CandidatePools extends SupportedCandidatePools | [
|
|
22
|
+
V3CandidatePools,
|
|
23
|
+
V2CandidatePools,
|
|
24
|
+
CrossLiquidityCandidatePools
|
|
25
|
+
], Route extends SupportedRoutes, TCurrency extends Currency> {
|
|
26
|
+
protected tokenProvider: ITokenProvider;
|
|
27
|
+
protected chainId: ChainId;
|
|
28
|
+
protected protocol: Protocol;
|
|
29
|
+
protected blockedTokenListProvider?: ITokenListProvider;
|
|
30
|
+
protected tokenValidatorProvider?: ITokenValidatorProvider;
|
|
31
|
+
constructor(tokenProvider: ITokenProvider, chainId: ChainId, protocol: Protocol, blockedTokenListProvider?: ITokenListProvider, tokenValidatorProvider?: ITokenValidatorProvider);
|
|
32
|
+
/**
|
|
33
|
+
* Protected method in charge of fetching the routes for the tokenIn/tokenOut pair.
|
|
34
|
+
*
|
|
35
|
+
* @protected
|
|
36
|
+
* @abstract
|
|
37
|
+
* @param tokenIn The token that the user wants to provide
|
|
38
|
+
* @param tokenOut The token that the usaw wants to receive
|
|
39
|
+
* @param candidatePools the candidate pools that are used to generate the routes
|
|
40
|
+
* @param tradeType The type of quote the user wants. He could want to provide exactly X tokenIn or receive exactly X tokenOut
|
|
41
|
+
* @param routingConfig
|
|
42
|
+
* @returns Promise<GetRoutesResult<Route>>
|
|
43
|
+
*/
|
|
44
|
+
protected abstract getRoutes(tokenIn: TCurrency, tokenOut: TCurrency, candidatePools: CandidatePools, tradeType: TradeType, routingConfig: AlphaRouterConfig): Promise<GetRoutesResult<Route>>;
|
|
45
|
+
/**
|
|
46
|
+
* Public method that will fetch quotes for the combination of every route and every amount.
|
|
47
|
+
*
|
|
48
|
+
* @param routes the list of route that can be used to fetch a quote.
|
|
49
|
+
* @param amounts the list of amounts to query for EACH route.
|
|
50
|
+
* @param percents the percentage of each amount.
|
|
51
|
+
* @param quoteToken
|
|
52
|
+
* @param tradeType
|
|
53
|
+
* @param routingConfig
|
|
54
|
+
* @param candidatePools the candidate pools that were used to generate the routes
|
|
55
|
+
* @param gasModel the gasModel to be used for estimating gas cost
|
|
56
|
+
* @param gasPriceWei instead of passing gasModel, gasPriceWei is used to generate a gasModel
|
|
57
|
+
* @returns Promise<GetQuotesResult<Route>>
|
|
58
|
+
*/
|
|
59
|
+
abstract getQuotes(routes: Route[], amounts: CurrencyAmount[], percents: number[], quoteToken: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig, candidatePools?: CandidatePoolsBySelectionCriteria, gasModel?: IGasModel<RouteWithValidQuote>, gasPriceWei?: BigNumber): Promise<GetQuotesResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Public method which would first get the routes and then get the quotes.
|
|
62
|
+
*
|
|
63
|
+
* @param tokenIn The token that the user wants to provide
|
|
64
|
+
* @param tokenOut The token that the usaw wants to receive
|
|
65
|
+
* @param amounts the list of amounts to query for EACH route.
|
|
66
|
+
* @param percents the percentage of each amount.
|
|
67
|
+
* @param quoteToken
|
|
68
|
+
* @param candidatePools
|
|
69
|
+
* @param tradeType
|
|
70
|
+
* @param routingConfig
|
|
71
|
+
* @param gasModel the gasModel to be used for estimating gas cost
|
|
72
|
+
* @param gasPriceWei instead of passing gasModel, gasPriceWei is used to generate a gasModel
|
|
73
|
+
*/
|
|
74
|
+
getRoutesThenQuotes(tokenIn: TCurrency, tokenOut: TCurrency, amount: CurrencyAmount, amounts: CurrencyAmount[], percents: number[], quoteToken: Token, candidatePools: CandidatePools, tradeType: TradeType, routingConfig: AlphaRouterConfig, gasModel?: IGasModel<RouteWithValidQuote>, gasPriceWei?: BigNumber): Promise<GetQuotesResult>;
|
|
75
|
+
protected applyTokenValidatorToPools<T extends TPool>(pools: T[], isInvalidFn: (token: Currency, tokenValidation: TokenValidationResult | undefined) => boolean): Promise<T[]>;
|
|
76
|
+
}
|