v-swap-smart-order-router 3.10.2
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 +248 -0
- package/build/main/index.d.ts +3 -0
- package/build/main/index.js +20 -0
- package/build/main/providers/cache-node.d.ts +9 -0
- package/build/main/providers/cache-node.js +19 -0
- package/build/main/providers/cache.d.ts +13 -0
- package/build/main/providers/cache.js +3 -0
- package/build/main/providers/caching/route/index.d.ts +2 -0
- package/build/main/providers/caching/route/index.js +19 -0
- package/build/main/providers/caching/route/model/cache-mode.d.ts +16 -0
- package/build/main/providers/caching/route/model/cache-mode.js +21 -0
- package/build/main/providers/caching/route/model/cached-route.d.ts +26 -0
- package/build/main/providers/caching/route/model/cached-route.js +30 -0
- package/build/main/providers/caching/route/model/cached-routes.d.ts +63 -0
- package/build/main/providers/caching/route/model/cached-routes.js +73 -0
- package/build/main/providers/caching/route/model/index.d.ts +3 -0
- package/build/main/providers/caching/route/model/index.js +20 -0
- package/build/main/providers/caching/route/route-caching-provider.d.ts +91 -0
- package/build/main/providers/caching/route/route-caching-provider.js +65 -0
- package/build/main/providers/caching-gas-provider.d.ts +23 -0
- package/build/main/providers/caching-gas-provider.js +37 -0
- package/build/main/providers/caching-token-list-provider.d.ts +40 -0
- package/build/main/providers/caching-token-list-provider.js +123 -0
- package/build/main/providers/caching-token-provider.d.ts +25 -0
- package/build/main/providers/caching-token-provider.js +202 -0
- package/build/main/providers/eip-1559-gas-price-provider.d.ts +31 -0
- package/build/main/providers/eip-1559-gas-price-provider.js +66 -0
- package/build/main/providers/eth-estimate-gas-provider.d.ts +16 -0
- package/build/main/providers/eth-estimate-gas-provider.js +74 -0
- package/build/main/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
- package/build/main/providers/eth-gas-station-info-gas-price-provider.js +37 -0
- package/build/main/providers/gas-price-provider.d.ts +10 -0
- package/build/main/providers/gas-price-provider.js +10 -0
- package/build/main/providers/index.d.ts +37 -0
- package/build/main/providers/index.js +54 -0
- package/build/main/providers/legacy-gas-price-provider.d.ts +7 -0
- package/build/main/providers/legacy-gas-price-provider.js +20 -0
- package/build/main/providers/multicall-provider.d.ts +82 -0
- package/build/main/providers/multicall-provider.js +15 -0
- package/build/main/providers/multicall-uniswap-provider.d.ts +37 -0
- package/build/main/providers/multicall-uniswap-provider.js +163 -0
- package/build/main/providers/on-chain-gas-price-provider.d.ts +19 -0
- package/build/main/providers/on-chain-gas-price-provider.js +38 -0
- package/build/main/providers/on-chain-quote-provider.d.ts +221 -0
- package/build/main/providers/on-chain-quote-provider.js +523 -0
- package/build/main/providers/provider.d.ts +10 -0
- package/build/main/providers/provider.js +3 -0
- package/build/main/providers/simulation-provider.d.ts +42 -0
- package/build/main/providers/simulation-provider.js +130 -0
- package/build/main/providers/static-gas-price-provider.d.ts +7 -0
- package/build/main/providers/static-gas-price-provider.js +13 -0
- package/build/main/providers/swap-router-provider.d.ts +31 -0
- package/build/main/providers/swap-router-provider.js +42 -0
- package/build/main/providers/tenderly-simulation-provider.d.ts +45 -0
- package/build/main/providers/tenderly-simulation-provider.js +254 -0
- package/build/main/providers/token-provider.d.ts +114 -0
- package/build/main/providers/token-provider.js +297 -0
- package/build/main/providers/token-validator-provider.d.ts +42 -0
- package/build/main/providers/token-validator-provider.js +95 -0
- package/build/main/providers/uri-subgraph-provider.d.ts +20 -0
- package/build/main/providers/uri-subgraph-provider.js +65 -0
- package/build/main/providers/v2/caching-pool-provider.d.ts +34 -0
- package/build/main/providers/v2/caching-pool-provider.js +88 -0
- package/build/main/providers/v2/caching-subgraph-provider.d.ts +23 -0
- package/build/main/providers/v2/caching-subgraph-provider.js +34 -0
- package/build/main/providers/v2/pool-provider.d.ts +60 -0
- package/build/main/providers/v2/pool-provider.js +110 -0
- package/build/main/providers/v2/quote-provider.d.ts +33 -0
- package/build/main/providers/v2/quote-provider.js +91 -0
- package/build/main/providers/v2/static-subgraph-provider.d.ts +20 -0
- package/build/main/providers/v2/static-subgraph-provider.js +103 -0
- package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +19 -0
- package/build/main/providers/v2/subgraph-provider-with-fallback.js +35 -0
- package/build/main/providers/v2/subgraph-provider.d.ts +34 -0
- package/build/main/providers/v2/subgraph-provider.js +135 -0
- package/build/main/providers/v2/uri-subgraph-provider.d.ts +4 -0
- package/build/main/providers/v2/uri-subgraph-provider.js +8 -0
- package/build/main/providers/v3/caching-pool-provider.d.ts +33 -0
- package/build/main/providers/v3/caching-pool-provider.js +77 -0
- package/build/main/providers/v3/caching-subgraph-provider.d.ts +23 -0
- package/build/main/providers/v3/caching-subgraph-provider.js +34 -0
- package/build/main/providers/v3/gas-data-provider.d.ts +57 -0
- package/build/main/providers/v3/gas-data-provider.js +66 -0
- package/build/main/providers/v3/pool-provider.d.ts +61 -0
- package/build/main/providers/v3/pool-provider.js +123 -0
- package/build/main/providers/v3/static-subgraph-provider.d.ts +21 -0
- package/build/main/providers/v3/static-subgraph-provider.js +203 -0
- package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +15 -0
- package/build/main/providers/v3/subgraph-provider-with-fallback.js +31 -0
- package/build/main/providers/v3/subgraph-provider.d.ts +37 -0
- package/build/main/providers/v3/subgraph-provider.js +145 -0
- package/build/main/providers/v3/uri-subgraph-provider.d.ts +4 -0
- package/build/main/providers/v3/uri-subgraph-provider.js +8 -0
- package/build/main/routers/alpha-router/alpha-router.d.ts +267 -0
- package/build/main/routers/alpha-router/alpha-router.js +825 -0
- package/build/main/routers/alpha-router/config.d.ts +4 -0
- package/build/main/routers/alpha-router/config.js +93 -0
- package/build/main/routers/alpha-router/entities/index.d.ts +1 -0
- package/build/main/routers/alpha-router/entities/index.js +18 -0
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +163 -0
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +143 -0
- package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +19 -0
- package/build/main/routers/alpha-router/functions/best-swap-route.js +364 -0
- package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
- package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js +18 -0
- package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +8 -0
- package/build/main/routers/alpha-router/functions/compute-all-routes.js +72 -0
- package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +78 -0
- package/build/main/routers/alpha-router/functions/get-candidate-pools.js +761 -0
- package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +83 -0
- package/build/main/routers/alpha-router/gas-models/gas-model.js +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 +25 -0
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +175 -0
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +29 -0
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +167 -0
- package/build/main/routers/alpha-router/gas-models/v3/gas-costs.d.ts +6 -0
- package/build/main/routers/alpha-router/gas-models/v3/gas-costs.js +110 -0
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +31 -0
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +288 -0
- package/build/main/routers/alpha-router/index.d.ts +4 -0
- package/build/main/routers/alpha-router/index.js +21 -0
- package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +68 -0
- package/build/main/routers/alpha-router/quoters/base-quoter.js +61 -0
- package/build/main/routers/alpha-router/quoters/index.d.ts +5 -0
- package/build/main/routers/alpha-router/quoters/index.js +22 -0
- package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +20 -0
- package/build/main/routers/alpha-router/quoters/mixed-quoter.js +130 -0
- package/build/main/routers/alpha-router/quoters/model/index.d.ts +1 -0
- package/build/main/routers/alpha-router/quoters/model/index.js +18 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.js +3 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.js +3 -0
- package/build/main/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
- package/build/main/routers/alpha-router/quoters/model/results/index.js +19 -0
- package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +21 -0
- package/build/main/routers/alpha-router/quoters/v2-quoter.js +122 -0
- package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
- package/build/main/routers/alpha-router/quoters/v3-quoter.js +125 -0
- package/build/main/routers/index.d.ts +4 -0
- package/build/main/routers/index.js +21 -0
- package/build/main/routers/legacy-router/bases.d.ts +136 -0
- package/build/main/routers/legacy-router/bases.js +87 -0
- package/build/main/routers/legacy-router/index.d.ts +1 -0
- package/build/main/routers/legacy-router/index.js +18 -0
- package/build/main/routers/legacy-router/legacy-router.d.ts +42 -0
- package/build/main/routers/legacy-router/legacy-router.js +289 -0
- package/build/main/routers/router.d.ts +165 -0
- package/build/main/routers/router.js +52 -0
- package/build/main/tsconfig.tsbuildinfo +1 -0
- package/build/main/types/other/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/GasPriceOracle__factory.d.ts +46 -0
- package/build/main/types/other/factories/GasPriceOracle__factory.js +316 -0
- package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
- package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js +156 -0
- package/build/main/types/other/factories/ITokenValidator__factory.d.ts +22 -0
- package/build/main/types/other/factories/ITokenValidator__factory.js +78 -0
- package/build/main/types/other/factories/Permit2__factory.d.ts +87 -0
- package/build/main/types/other/factories/Permit2__factory.js +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/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 +26 -0
- package/build/main/util/addresses.js +73 -0
- package/build/main/util/amounts.d.ts +8 -0
- package/build/main/util/amounts.js +51 -0
- package/build/main/util/callData.d.ts +1 -0
- package/build/main/util/callData.js +6 -0
- package/build/main/util/chains.d.ts +77 -0
- package/build/main/util/chains.js +564 -0
- package/build/main/util/gas-factory-helpers.d.ts +24 -0
- package/build/main/util/gas-factory-helpers.js +308 -0
- package/build/main/util/index.d.ts +7 -0
- package/build/main/util/index.js +24 -0
- package/build/main/util/log.d.ts +3 -0
- package/build/main/util/log.js +97 -0
- package/build/main/util/methodParameters.d.ts +5 -0
- package/build/main/util/methodParameters.js +108 -0
- package/build/main/util/metric.d.ts +48 -0
- package/build/main/util/metric.js +59 -0
- package/build/main/util/protocols.d.ts +2 -0
- package/build/main/util/protocols.js +18 -0
- package/build/main/util/routes.d.ts +8 -0
- package/build/main/util/routes.js +60 -0
- package/build/main/util/unsupported-tokens.d.ts +37 -0
- package/build/main/util/unsupported-tokens.js +1119 -0
- package/build/module/index.d.ts +3 -0
- package/build/module/index.js +4 -0
- package/build/module/providers/cache-node.d.ts +9 -0
- package/build/module/providers/cache-node.js +15 -0
- package/build/module/providers/cache.d.ts +13 -0
- package/build/module/providers/cache.js +2 -0
- package/build/module/providers/caching/route/index.d.ts +2 -0
- package/build/module/providers/caching/route/index.js +3 -0
- package/build/module/providers/caching/route/model/cache-mode.d.ts +16 -0
- package/build/module/providers/caching/route/model/cache-mode.js +18 -0
- package/build/module/providers/caching/route/model/cached-route.d.ts +26 -0
- package/build/module/providers/caching/route/model/cached-route.js +26 -0
- package/build/module/providers/caching/route/model/cached-routes.d.ts +63 -0
- package/build/module/providers/caching/route/model/cached-routes.js +66 -0
- package/build/module/providers/caching/route/model/index.d.ts +3 -0
- package/build/module/providers/caching/route/model/index.js +4 -0
- package/build/module/providers/caching/route/route-caching-provider.d.ts +91 -0
- package/build/module/providers/caching/route/route-caching-provider.js +61 -0
- package/build/module/providers/caching-gas-provider.d.ts +23 -0
- package/build/module/providers/caching-gas-provider.js +33 -0
- package/build/module/providers/caching-token-list-provider.d.ts +40 -0
- package/build/module/providers/caching-token-list-provider.js +116 -0
- package/build/module/providers/caching-token-provider.d.ts +25 -0
- package/build/module/providers/caching-token-provider.js +195 -0
- package/build/module/providers/eip-1559-gas-price-provider.d.ts +31 -0
- package/build/module/providers/eip-1559-gas-price-provider.js +59 -0
- package/build/module/providers/eth-estimate-gas-provider.d.ts +16 -0
- package/build/module/providers/eth-estimate-gas-provider.js +82 -0
- package/build/module/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
- package/build/module/providers/eth-gas-station-info-gas-price-provider.js +30 -0
- package/build/module/providers/gas-price-provider.d.ts +10 -0
- package/build/module/providers/gas-price-provider.js +6 -0
- package/build/module/providers/index.d.ts +37 -0
- package/build/module/providers/index.js +38 -0
- package/build/module/providers/legacy-gas-price-provider.d.ts +7 -0
- package/build/module/providers/legacy-gas-price-provider.js +16 -0
- package/build/module/providers/multicall-provider.d.ts +82 -0
- package/build/module/providers/multicall-provider.js +11 -0
- package/build/module/providers/multicall-uniswap-provider.d.ts +37 -0
- package/build/module/providers/multicall-uniswap-provider.js +156 -0
- package/build/module/providers/on-chain-gas-price-provider.d.ts +19 -0
- package/build/module/providers/on-chain-gas-price-provider.js +34 -0
- package/build/module/providers/on-chain-quote-provider.d.ts +221 -0
- package/build/module/providers/on-chain-quote-provider.js +517 -0
- package/build/module/providers/provider.d.ts +10 -0
- package/build/module/providers/provider.js +2 -0
- package/build/module/providers/simulation-provider.d.ts +42 -0
- package/build/module/providers/simulation-provider.js +132 -0
- package/build/module/providers/static-gas-price-provider.d.ts +7 -0
- package/build/module/providers/static-gas-price-provider.js +9 -0
- package/build/module/providers/swap-router-provider.d.ts +31 -0
- package/build/module/providers/swap-router-provider.js +38 -0
- package/build/module/providers/tenderly-simulation-provider.d.ts +45 -0
- package/build/module/providers/tenderly-simulation-provider.js +249 -0
- package/build/module/providers/token-provider.d.ts +114 -0
- package/build/module/providers/token-provider.js +285 -0
- package/build/module/providers/token-validator-provider.d.ts +42 -0
- package/build/module/providers/token-validator-provider.js +88 -0
- package/build/module/providers/uri-subgraph-provider.d.ts +20 -0
- package/build/module/providers/uri-subgraph-provider.js +58 -0
- package/build/module/providers/v2/caching-pool-provider.d.ts +34 -0
- package/build/module/providers/v2/caching-pool-provider.js +81 -0
- package/build/module/providers/v2/caching-subgraph-provider.d.ts +23 -0
- package/build/module/providers/v2/caching-subgraph-provider.js +30 -0
- package/build/module/providers/v2/pool-provider.d.ts +60 -0
- package/build/module/providers/v2/pool-provider.js +103 -0
- package/build/module/providers/v2/quote-provider.d.ts +33 -0
- package/build/module/providers/v2/quote-provider.js +87 -0
- package/build/module/providers/v2/static-subgraph-provider.d.ts +20 -0
- package/build/module/providers/v2/static-subgraph-provider.js +96 -0
- package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +19 -0
- package/build/module/providers/v2/subgraph-provider-with-fallback.js +31 -0
- package/build/module/providers/v2/subgraph-provider.d.ts +34 -0
- package/build/module/providers/v2/subgraph-provider.js +136 -0
- package/build/module/providers/v2/uri-subgraph-provider.d.ts +4 -0
- package/build/module/providers/v2/uri-subgraph-provider.js +4 -0
- package/build/module/providers/v3/caching-pool-provider.d.ts +33 -0
- package/build/module/providers/v3/caching-pool-provider.js +70 -0
- package/build/module/providers/v3/caching-subgraph-provider.d.ts +23 -0
- package/build/module/providers/v3/caching-subgraph-provider.js +30 -0
- package/build/module/providers/v3/gas-data-provider.d.ts +57 -0
- package/build/module/providers/v3/gas-data-provider.js +61 -0
- package/build/module/providers/v3/pool-provider.d.ts +61 -0
- package/build/module/providers/v3/pool-provider.js +116 -0
- package/build/module/providers/v3/static-subgraph-provider.d.ts +21 -0
- package/build/module/providers/v3/static-subgraph-provider.js +200 -0
- package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +15 -0
- package/build/module/providers/v3/subgraph-provider-with-fallback.js +27 -0
- package/build/module/providers/v3/subgraph-provider.d.ts +37 -0
- package/build/module/providers/v3/subgraph-provider.js +132 -0
- package/build/module/providers/v3/uri-subgraph-provider.d.ts +4 -0
- package/build/module/providers/v3/uri-subgraph-provider.js +4 -0
- package/build/module/routers/alpha-router/alpha-router.d.ts +267 -0
- package/build/module/routers/alpha-router/alpha-router.js +823 -0
- package/build/module/routers/alpha-router/config.d.ts +4 -0
- package/build/module/routers/alpha-router/config.js +89 -0
- package/build/module/routers/alpha-router/entities/index.d.ts +1 -0
- package/build/module/routers/alpha-router/entities/index.js +2 -0
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +163 -0
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +134 -0
- package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +19 -0
- package/build/module/routers/alpha-router/functions/best-swap-route.js +356 -0
- package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
- package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.js +14 -0
- package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +8 -0
- package/build/module/routers/alpha-router/functions/compute-all-routes.js +65 -0
- package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +78 -0
- package/build/module/routers/alpha-router/functions/get-candidate-pools.js +776 -0
- package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +83 -0
- package/build/module/routers/alpha-router/gas-models/gas-model.js +67 -0
- package/build/module/routers/alpha-router/gas-models/index.d.ts +2 -0
- package/build/module/routers/alpha-router/gas-models/index.js +3 -0
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +25 -0
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +168 -0
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +29 -0
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +160 -0
- package/build/module/routers/alpha-router/gas-models/v3/gas-costs.d.ts +6 -0
- package/build/module/routers/alpha-router/gas-models/v3/gas-costs.js +104 -0
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +31 -0
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +281 -0
- package/build/module/routers/alpha-router/index.d.ts +4 -0
- package/build/module/routers/alpha-router/index.js +5 -0
- package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +68 -0
- package/build/module/routers/alpha-router/quoters/base-quoter.js +54 -0
- package/build/module/routers/alpha-router/quoters/index.d.ts +5 -0
- package/build/module/routers/alpha-router/quoters/index.js +6 -0
- package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +20 -0
- package/build/module/routers/alpha-router/quoters/mixed-quoter.js +123 -0
- package/build/module/routers/alpha-router/quoters/model/index.d.ts +1 -0
- package/build/module/routers/alpha-router/quoters/model/index.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/index.js +3 -0
- package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +21 -0
- package/build/module/routers/alpha-router/quoters/v2-quoter.js +115 -0
- package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
- package/build/module/routers/alpha-router/quoters/v3-quoter.js +118 -0
- package/build/module/routers/index.d.ts +4 -0
- package/build/module/routers/index.js +5 -0
- package/build/module/routers/legacy-router/bases.d.ts +136 -0
- package/build/module/routers/legacy-router/bases.js +93 -0
- package/build/module/routers/legacy-router/index.d.ts +1 -0
- package/build/module/routers/legacy-router/index.js +2 -0
- package/build/module/routers/legacy-router/legacy-router.d.ts +42 -0
- package/build/module/routers/legacy-router/legacy-router.js +290 -0
- package/build/module/routers/router.d.ts +165 -0
- package/build/module/routers/router.js +44 -0
- package/build/module/tsconfig.module.tsbuildinfo +1 -0
- package/build/module/types/other/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/GasPriceOracle__factory.d.ts +46 -0
- package/build/module/types/other/factories/GasPriceOracle__factory.js +312 -0
- package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
- package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.js +152 -0
- package/build/module/types/other/factories/ITokenValidator__factory.d.ts +22 -0
- package/build/module/types/other/factories/ITokenValidator__factory.js +74 -0
- package/build/module/types/other/factories/Permit2__factory.d.ts +87 -0
- package/build/module/types/other/factories/Permit2__factory.js +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/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 +26 -0
- package/build/module/util/addresses.js +98 -0
- package/build/module/util/amounts.d.ts +8 -0
- package/build/module/util/amounts.js +41 -0
- package/build/module/util/callData.d.ts +1 -0
- package/build/module/util/callData.js +3 -0
- package/build/module/util/chains.d.ts +77 -0
- package/build/module/util/chains.js +556 -0
- package/build/module/util/gas-factory-helpers.d.ts +24 -0
- package/build/module/util/gas-factory-helpers.js +291 -0
- package/build/module/util/index.d.ts +7 -0
- package/build/module/util/index.js +8 -0
- package/build/module/util/log.d.ts +3 -0
- package/build/module/util/log.js +93 -0
- package/build/module/util/methodParameters.d.ts +5 -0
- package/build/module/util/methodParameters.js +106 -0
- package/build/module/util/metric.d.ts +48 -0
- package/build/module/util/metric.js +53 -0
- package/build/module/util/protocols.d.ts +2 -0
- package/build/module/util/protocols.js +14 -0
- package/build/module/util/routes.d.ts +8 -0
- package/build/module/util/routes.js +50 -0
- package/build/module/util/unsupported-tokens.d.ts +37 -0
- package/build/module/util/unsupported-tokens.js +1116 -0
- package/package.json +119 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { Token } from '@uniswap/sdk-core';
|
|
3
|
+
import { IV2PoolProvider } from '../../../providers/v2/pool-provider';
|
|
4
|
+
import { ArbitrumGasData, IL2GasDataProvider, OptimismGasData } from '../../../providers/v3/gas-data-provider';
|
|
5
|
+
import { IV3PoolProvider } from '../../../providers/v3/pool-provider';
|
|
6
|
+
import { CurrencyAmount } from '../../../util/amounts';
|
|
7
|
+
import { ChainId } from '../../../util/chains';
|
|
8
|
+
import { MixedRouteWithValidQuote, RouteWithValidQuote, V2RouteWithValidQuote, V3RouteWithValidQuote } from '../entities/route-with-valid-quote';
|
|
9
|
+
export declare const usdGasTokensByChain: {
|
|
10
|
+
[chainId in ChainId]?: Token[];
|
|
11
|
+
};
|
|
12
|
+
export declare type L1ToL2GasCosts = {
|
|
13
|
+
gasUsedL1: BigNumber;
|
|
14
|
+
gasCostL1USD: CurrencyAmount;
|
|
15
|
+
gasCostL1QuoteToken: CurrencyAmount;
|
|
16
|
+
};
|
|
17
|
+
export declare type BuildOnChainGasModelFactoryType = {
|
|
18
|
+
chainId: ChainId;
|
|
19
|
+
gasPriceWei: BigNumber;
|
|
20
|
+
v3poolProvider: IV3PoolProvider;
|
|
21
|
+
amountToken: Token;
|
|
22
|
+
quoteToken: Token;
|
|
23
|
+
v2poolProvider: IV2PoolProvider;
|
|
24
|
+
l2GasDataProvider?: IL2GasDataProvider<OptimismGasData> | IL2GasDataProvider<ArbitrumGasData>;
|
|
25
|
+
};
|
|
26
|
+
export declare type BuildV2GasModelFactoryType = {
|
|
27
|
+
chainId: ChainId;
|
|
28
|
+
gasPriceWei: BigNumber;
|
|
29
|
+
poolProvider: IV2PoolProvider;
|
|
30
|
+
token: Token;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Contains functions for generating gas estimates for given routes.
|
|
34
|
+
*
|
|
35
|
+
* We generally compute gas estimates off-chain because
|
|
36
|
+
* 1/ Calling eth_estimateGas for a swaps requires the caller to have
|
|
37
|
+
* the full balance token being swapped, and approvals.
|
|
38
|
+
* 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
|
|
39
|
+
* due to EIP-2929
|
|
40
|
+
* 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
|
|
41
|
+
*
|
|
42
|
+
* Generally these models should be optimized to return quickly by performing any
|
|
43
|
+
* long running operations (like fetching external data) outside of the functions defined.
|
|
44
|
+
* This is because the functions in the model are called once for every route and every
|
|
45
|
+
* amount that is considered in the algorithm so it is important to minimize the number of
|
|
46
|
+
* long running operations.
|
|
47
|
+
*/
|
|
48
|
+
export declare type IGasModel<TRouteWithValidQuote extends RouteWithValidQuote> = {
|
|
49
|
+
estimateGasCost(routeWithValidQuote: TRouteWithValidQuote): {
|
|
50
|
+
gasEstimate: BigNumber;
|
|
51
|
+
gasCostInToken: CurrencyAmount;
|
|
52
|
+
gasCostInUSD: CurrencyAmount;
|
|
53
|
+
};
|
|
54
|
+
calculateL1GasFees?(routes: TRouteWithValidQuote[]): Promise<L1ToL2GasCosts>;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Factory for building gas models that can be used with any route to generate
|
|
58
|
+
* gas estimates.
|
|
59
|
+
*
|
|
60
|
+
* Factory model is used so that any supporting data can be fetched once and
|
|
61
|
+
* returned as part of the model.
|
|
62
|
+
*
|
|
63
|
+
* @export
|
|
64
|
+
* @abstract
|
|
65
|
+
* @class IV2GasModelFactory
|
|
66
|
+
*/
|
|
67
|
+
export declare abstract class IV2GasModelFactory {
|
|
68
|
+
abstract buildGasModel({ chainId, gasPriceWei, poolProvider, token, }: BuildV2GasModelFactoryType): Promise<IGasModel<V2RouteWithValidQuote>>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Factory for building gas models that can be used with any route to generate
|
|
72
|
+
* gas estimates.
|
|
73
|
+
*
|
|
74
|
+
* Factory model is used so that any supporting data can be fetched once and
|
|
75
|
+
* returned as part of the model.
|
|
76
|
+
*
|
|
77
|
+
* @export
|
|
78
|
+
* @abstract
|
|
79
|
+
* @class IOnChainGasModelFactory
|
|
80
|
+
*/
|
|
81
|
+
export declare abstract class IOnChainGasModelFactory {
|
|
82
|
+
abstract buildGasModel({ chainId, gasPriceWei, v3poolProvider: V3poolProvider, amountToken, quoteToken, v2poolProvider: V2poolProvider, l2GasDataProvider, }: BuildOnChainGasModelFactoryType): Promise<IGasModel<V3RouteWithValidQuote | MixedRouteWithValidQuote>>;
|
|
83
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IOnChainGasModelFactory = exports.IV2GasModelFactory = exports.usdGasTokensByChain = void 0;
|
|
4
|
+
const token_provider_1 = require("../../../providers/token-provider");
|
|
5
|
+
const chains_1 = require("../../../util/chains");
|
|
6
|
+
exports.usdGasTokensByChain = {
|
|
7
|
+
[chains_1.ChainId.MAINNET]: [token_provider_1.DAI_MAINNET, token_provider_1.USDC_MAINNET, token_provider_1.USDT_MAINNET],
|
|
8
|
+
[chains_1.ChainId.RINKEBY]: [token_provider_1.DAI_RINKEBY_1, token_provider_1.DAI_RINKEBY_2],
|
|
9
|
+
[chains_1.ChainId.ARBITRUM_ONE]: [token_provider_1.DAI_ARBITRUM, token_provider_1.USDC_ARBITRUM, token_provider_1.USDT_ARBITRUM],
|
|
10
|
+
[chains_1.ChainId.OPTIMISM]: [token_provider_1.DAI_OPTIMISM, token_provider_1.USDC_OPTIMISM, token_provider_1.USDT_OPTIMISM],
|
|
11
|
+
[chains_1.ChainId.OPTIMISM_GOERLI]: [
|
|
12
|
+
token_provider_1.DAI_OPTIMISM_GOERLI,
|
|
13
|
+
token_provider_1.USDC_OPTIMISM_GOERLI,
|
|
14
|
+
token_provider_1.USDT_OPTIMISM_GOERLI,
|
|
15
|
+
],
|
|
16
|
+
[chains_1.ChainId.OPTIMISTIC_KOVAN]: [
|
|
17
|
+
token_provider_1.DAI_OPTIMISTIC_KOVAN,
|
|
18
|
+
token_provider_1.USDC_OPTIMISTIC_KOVAN,
|
|
19
|
+
token_provider_1.USDT_OPTIMISTIC_KOVAN,
|
|
20
|
+
],
|
|
21
|
+
[chains_1.ChainId.ARBITRUM_RINKEBY]: [token_provider_1.DAI_ARBITRUM_RINKEBY, token_provider_1.USDT_ARBITRUM_RINKEBY],
|
|
22
|
+
[chains_1.ChainId.ARBITRUM_GOERLI]: [token_provider_1.USDC_ARBITRUM_GOERLI],
|
|
23
|
+
[chains_1.ChainId.KOVAN]: [token_provider_1.DAI_KOVAN, token_provider_1.USDC_KOVAN, token_provider_1.USDT_KOVAN],
|
|
24
|
+
[chains_1.ChainId.GÖRLI]: [token_provider_1.DAI_GÖRLI, token_provider_1.USDC_GÖRLI, token_provider_1.USDT_GÖRLI, token_provider_1.WBTC_GÖRLI],
|
|
25
|
+
[chains_1.ChainId.ROPSTEN]: [token_provider_1.DAI_ROPSTEN, token_provider_1.USDC_ROPSTEN, token_provider_1.USDT_ROPSTEN],
|
|
26
|
+
[chains_1.ChainId.POLYGON]: [token_provider_1.USDC_POLYGON],
|
|
27
|
+
[chains_1.ChainId.POLYGON_MUMBAI]: [token_provider_1.DAI_POLYGON_MUMBAI],
|
|
28
|
+
[chains_1.ChainId.CELO]: [token_provider_1.CUSD_CELO],
|
|
29
|
+
[chains_1.ChainId.CELO_ALFAJORES]: [token_provider_1.CUSD_CELO_ALFAJORES],
|
|
30
|
+
[chains_1.ChainId.GNOSIS]: [token_provider_1.USDC_ETHEREUM_GNOSIS],
|
|
31
|
+
[chains_1.ChainId.MOONBEAM]: [token_provider_1.USDC_MOONBEAM],
|
|
32
|
+
[chains_1.ChainId.BSC]: [token_provider_1.USDT_BSC, token_provider_1.USDC_BSC, token_provider_1.DAI_BSC],
|
|
33
|
+
[chains_1.ChainId.CFX]: [token_provider_1.USDT_CFX, token_provider_1.USDC_CFX, token_provider_1.DAI_CFX],
|
|
34
|
+
[chains_1.ChainId.CFX_TEST]: [
|
|
35
|
+
token_provider_1.USDT_CFX_TEST,
|
|
36
|
+
// USDC_CFX_TEST,
|
|
37
|
+
// DAI_CFX_TEST
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Factory for building gas models that can be used with any route to generate
|
|
42
|
+
* gas estimates.
|
|
43
|
+
*
|
|
44
|
+
* Factory model is used so that any supporting data can be fetched once and
|
|
45
|
+
* returned as part of the model.
|
|
46
|
+
*
|
|
47
|
+
* @export
|
|
48
|
+
* @abstract
|
|
49
|
+
* @class IV2GasModelFactory
|
|
50
|
+
*/
|
|
51
|
+
class IV2GasModelFactory {
|
|
52
|
+
}
|
|
53
|
+
exports.IV2GasModelFactory = IV2GasModelFactory;
|
|
54
|
+
/**
|
|
55
|
+
* Factory for building gas models that can be used with any route to generate
|
|
56
|
+
* gas estimates.
|
|
57
|
+
*
|
|
58
|
+
* Factory model is used so that any supporting data can be fetched once and
|
|
59
|
+
* returned as part of the model.
|
|
60
|
+
*
|
|
61
|
+
* @export
|
|
62
|
+
* @abstract
|
|
63
|
+
* @class IOnChainGasModelFactory
|
|
64
|
+
*/
|
|
65
|
+
class IOnChainGasModelFactory {
|
|
66
|
+
}
|
|
67
|
+
exports.IOnChainGasModelFactory = IOnChainGasModelFactory;
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL2dhcy1tb2RlbHMvZ2FzLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLHNFQThDMkM7QUFTM0MsaURBQStDO0FBUWxDLFFBQUEsbUJBQW1CLEdBQXVDO0lBQ3JFLENBQUMsZ0JBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLDRCQUFXLEVBQUUsNkJBQVksRUFBRSw2QkFBWSxDQUFDO0lBQzVELENBQUMsZ0JBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLDhCQUFhLEVBQUUsOEJBQWEsQ0FBQztJQUNqRCxDQUFDLGdCQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyw2QkFBWSxFQUFFLDhCQUFhLEVBQUUsOEJBQWEsQ0FBQztJQUNwRSxDQUFDLGdCQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyw2QkFBWSxFQUFFLDhCQUFhLEVBQUUsOEJBQWEsQ0FBQztJQUNoRSxDQUFDLGdCQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDekIsb0NBQW1CO1FBQ25CLHFDQUFvQjtRQUNwQixxQ0FBb0I7S0FDckI7SUFDRCxDQUFDLGdCQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUMxQixxQ0FBb0I7UUFDcEIsc0NBQXFCO1FBQ3JCLHNDQUFxQjtLQUN0QjtJQUNELENBQUMsZ0JBQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMscUNBQW9CLEVBQUUsc0NBQXFCLENBQUM7SUFDekUsQ0FBQyxnQkFBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMscUNBQW9CLENBQUM7SUFDakQsQ0FBQyxnQkFBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQVMsRUFBRSwyQkFBVSxFQUFFLDJCQUFVLENBQUM7SUFDcEQsQ0FBQyxnQkFBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQVMsRUFBRSwyQkFBVSxFQUFFLDJCQUFVLEVBQUUsMkJBQVUsQ0FBQztJQUNoRSxDQUFDLGdCQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyw0QkFBVyxFQUFFLDZCQUFZLEVBQUUsNkJBQVksQ0FBQztJQUM1RCxDQUFDLGdCQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyw2QkFBWSxDQUFDO0lBQ2pDLENBQUMsZ0JBQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLG1DQUFrQixDQUFDO0lBQzlDLENBQUMsZ0JBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLDBCQUFTLENBQUM7SUFDM0IsQ0FBQyxnQkFBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsb0NBQW1CLENBQUM7SUFDL0MsQ0FBQyxnQkFBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMscUNBQW9CLENBQUM7SUFDeEMsQ0FBQyxnQkFBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsOEJBQWEsQ0FBQztJQUNuQyxDQUFDLGdCQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyx5QkFBUSxFQUFFLHlCQUFRLEVBQUUsd0JBQU8sQ0FBQztJQUM1QyxDQUFDLGdCQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyx5QkFBUSxFQUFFLHlCQUFRLEVBQUUsd0JBQU8sQ0FBQztJQUM1QyxDQUFDLGdCQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDbEIsOEJBQWE7UUFDakIsb0JBQW9CO1FBQ3BCLGtCQUFrQjtLQUNmO0NBQ0YsQ0FBQztBQW9ERjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBc0Isa0JBQWtCO0NBT3ZDO0FBUEQsZ0RBT0M7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBc0IsdUJBQXVCO0NBWTVDO0FBWkQsMERBWUMifQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
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("./gas-model"), exports);
|
|
18
|
+
__exportStar(require("./v3/v3-heuristic-gas-model"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcm91dGVycy9hbHBoYS1yb3V0ZXIvZ2FzLW1vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQTRCO0FBQzVCLDhEQUE0QyJ9
|
package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { MixedRouteWithValidQuote } from '../../entities/route-with-valid-quote';
|
|
2
|
+
import { BuildOnChainGasModelFactoryType, IGasModel, IOnChainGasModelFactory } from '../gas-model';
|
|
3
|
+
/**
|
|
4
|
+
* Computes a gas estimate for a mixed route swap using heuristics.
|
|
5
|
+
* Considers number of hops in the route, number of ticks crossed
|
|
6
|
+
* and the typical base cost for a swap.
|
|
7
|
+
*
|
|
8
|
+
* We get the number of ticks crossed in a swap from the MixedRouteQuoterV1
|
|
9
|
+
* contract.
|
|
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
|
+
* @export
|
|
19
|
+
* @class MixedRouteHeuristicGasModelFactory
|
|
20
|
+
*/
|
|
21
|
+
export declare class MixedRouteHeuristicGasModelFactory extends IOnChainGasModelFactory {
|
|
22
|
+
constructor();
|
|
23
|
+
buildGasModel({ chainId, gasPriceWei, v3poolProvider: V3poolProvider, quoteToken, v2poolProvider: V2poolProvider, }: BuildOnChainGasModelFactoryType): Promise<IGasModel<MixedRouteWithValidQuote>>;
|
|
24
|
+
private estimateGas;
|
|
25
|
+
}
|
package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
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.MixedRouteHeuristicGasModelFactory = void 0;
|
|
7
|
+
const bignumber_1 = require("@ethersproject/bignumber");
|
|
8
|
+
const router_sdk_1 = require("@uniswap/router-sdk");
|
|
9
|
+
const v2_sdk_1 = require("@uniswap/v2-sdk");
|
|
10
|
+
const v3_sdk_1 = require("@uniswap/v3-sdk");
|
|
11
|
+
const jsbi_1 = __importDefault(require("jsbi"));
|
|
12
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
13
|
+
const __1 = require("../../../..");
|
|
14
|
+
const util_1 = require("../../../../util");
|
|
15
|
+
const amounts_1 = require("../../../../util/amounts");
|
|
16
|
+
const gas_factory_helpers_1 = require("../../../../util/gas-factory-helpers");
|
|
17
|
+
const gas_model_1 = require("../gas-model");
|
|
18
|
+
const v2_heuristic_gas_model_1 = require("../v2/v2-heuristic-gas-model");
|
|
19
|
+
const gas_costs_1 = require("../v3/gas-costs");
|
|
20
|
+
/**
|
|
21
|
+
* Computes a gas estimate for a mixed route swap using heuristics.
|
|
22
|
+
* Considers number of hops in the route, number of ticks crossed
|
|
23
|
+
* and the typical base cost for a swap.
|
|
24
|
+
*
|
|
25
|
+
* We get the number of ticks crossed in a swap from the MixedRouteQuoterV1
|
|
26
|
+
* contract.
|
|
27
|
+
*
|
|
28
|
+
* We compute gas estimates off-chain because
|
|
29
|
+
* 1/ Calling eth_estimateGas for a swaps requires the caller to have
|
|
30
|
+
* the full balance token being swapped, and approvals.
|
|
31
|
+
* 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
|
|
32
|
+
* due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
|
|
33
|
+
* 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
|
|
34
|
+
*
|
|
35
|
+
* @export
|
|
36
|
+
* @class MixedRouteHeuristicGasModelFactory
|
|
37
|
+
*/
|
|
38
|
+
class MixedRouteHeuristicGasModelFactory extends gas_model_1.IOnChainGasModelFactory {
|
|
39
|
+
constructor() {
|
|
40
|
+
super();
|
|
41
|
+
}
|
|
42
|
+
async buildGasModel({ chainId, gasPriceWei, v3poolProvider: V3poolProvider, quoteToken, v2poolProvider: V2poolProvider, }) {
|
|
43
|
+
const usdPool = await (0, gas_factory_helpers_1.getHighestLiquidityV3USDPool)(chainId, V3poolProvider);
|
|
44
|
+
// If our quote token is WETH, we don't need to convert our gas use to be in terms
|
|
45
|
+
// of the quote token in order to produce a gas adjusted amount.
|
|
46
|
+
// We do return a gas use in USD however, so we still convert to usd.
|
|
47
|
+
const nativeCurrency = __1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
48
|
+
if (quoteToken.equals(nativeCurrency)) {
|
|
49
|
+
const estimateGasCost = (routeWithValidQuote) => {
|
|
50
|
+
const { totalGasCostNativeCurrency, baseGasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId);
|
|
51
|
+
const token0 = usdPool.token0.address == nativeCurrency.address;
|
|
52
|
+
const nativeTokenPrice = token0
|
|
53
|
+
? usdPool.token0Price
|
|
54
|
+
: usdPool.token1Price;
|
|
55
|
+
const gasCostInTermsOfUSD = nativeTokenPrice.quote(totalGasCostNativeCurrency);
|
|
56
|
+
return {
|
|
57
|
+
gasEstimate: baseGasUse,
|
|
58
|
+
gasCostInToken: totalGasCostNativeCurrency,
|
|
59
|
+
gasCostInUSD: gasCostInTermsOfUSD,
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
estimateGasCost,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// If the quote token is not in the native currency, we convert the gas cost to be in terms of the quote token.
|
|
67
|
+
// We do this by getting the highest liquidity <quoteToken>/<nativeCurrency> pool. eg. <quoteToken>/ETH pool.
|
|
68
|
+
const nativeV3Pool = await (0, gas_factory_helpers_1.getHighestLiquidityV3NativePool)(quoteToken, V3poolProvider);
|
|
69
|
+
let nativeV2Pool;
|
|
70
|
+
if (V2poolProvider) {
|
|
71
|
+
/// MixedRoutes
|
|
72
|
+
nativeV2Pool = await (0, gas_factory_helpers_1.getV2NativePool)(quoteToken, V2poolProvider);
|
|
73
|
+
}
|
|
74
|
+
const usdToken = usdPool.token0.address == nativeCurrency.address
|
|
75
|
+
? usdPool.token1
|
|
76
|
+
: usdPool.token0;
|
|
77
|
+
const estimateGasCost = (routeWithValidQuote) => {
|
|
78
|
+
const { totalGasCostNativeCurrency, baseGasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId);
|
|
79
|
+
if (!nativeV3Pool && !nativeV2Pool) {
|
|
80
|
+
util_1.log.info(`Unable to find ${nativeCurrency.symbol} pool with the quote token, ${quoteToken.symbol} to produce gas adjusted costs. Route will not account for gas.`);
|
|
81
|
+
return {
|
|
82
|
+
gasEstimate: baseGasUse,
|
|
83
|
+
gasCostInToken: amounts_1.CurrencyAmount.fromRawAmount(quoteToken, 0),
|
|
84
|
+
gasCostInUSD: amounts_1.CurrencyAmount.fromRawAmount(usdToken, 0),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/// we will use nativeV2Pool for fallback if nativeV3 does not exist or has 0 liquidity
|
|
88
|
+
/// can use ! here because we return above if v3Pool and v2Pool are null
|
|
89
|
+
const nativePool = (!nativeV3Pool || jsbi_1.default.equal(nativeV3Pool.liquidity, jsbi_1.default.BigInt(0))) &&
|
|
90
|
+
nativeV2Pool
|
|
91
|
+
? nativeV2Pool
|
|
92
|
+
: nativeV3Pool;
|
|
93
|
+
const token0 = nativePool.token0.address == nativeCurrency.address;
|
|
94
|
+
// returns mid price in terms of the native currency (the ratio of quoteToken/nativeToken)
|
|
95
|
+
const nativeTokenPrice = token0
|
|
96
|
+
? nativePool.token0Price
|
|
97
|
+
: nativePool.token1Price;
|
|
98
|
+
let gasCostInTermsOfQuoteToken;
|
|
99
|
+
try {
|
|
100
|
+
// native token is base currency
|
|
101
|
+
gasCostInTermsOfQuoteToken = nativeTokenPrice.quote(totalGasCostNativeCurrency);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
util_1.log.info({
|
|
105
|
+
nativeTokenPriceBase: nativeTokenPrice.baseCurrency,
|
|
106
|
+
nativeTokenPriceQuote: nativeTokenPrice.quoteCurrency,
|
|
107
|
+
gasCostInEth: totalGasCostNativeCurrency.currency,
|
|
108
|
+
}, 'Debug eth price token issue');
|
|
109
|
+
throw err;
|
|
110
|
+
}
|
|
111
|
+
// true if token0 is the native currency
|
|
112
|
+
const token0USDPool = usdPool.token0.address == nativeCurrency.address;
|
|
113
|
+
// gets the mid price of the pool in terms of the native token
|
|
114
|
+
const nativeTokenPriceUSDPool = token0USDPool
|
|
115
|
+
? usdPool.token0Price
|
|
116
|
+
: usdPool.token1Price;
|
|
117
|
+
let gasCostInTermsOfUSD;
|
|
118
|
+
try {
|
|
119
|
+
gasCostInTermsOfUSD = nativeTokenPriceUSDPool.quote(totalGasCostNativeCurrency);
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
util_1.log.info({
|
|
123
|
+
usdT1: usdPool.token0.symbol,
|
|
124
|
+
usdT2: usdPool.token1.symbol,
|
|
125
|
+
gasCostInNativeToken: totalGasCostNativeCurrency.currency.symbol,
|
|
126
|
+
}, 'Failed to compute USD gas price');
|
|
127
|
+
throw err;
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
gasEstimate: baseGasUse,
|
|
131
|
+
gasCostInToken: gasCostInTermsOfQuoteToken,
|
|
132
|
+
gasCostInUSD: gasCostInTermsOfUSD,
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
estimateGasCost: estimateGasCost.bind(this),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
estimateGas(routeWithValidQuote, gasPriceWei, chainId) {
|
|
140
|
+
const totalInitializedTicksCrossed = bignumber_1.BigNumber.from(Math.max(1, lodash_1.default.sum(routeWithValidQuote.initializedTicksCrossedList)));
|
|
141
|
+
/**
|
|
142
|
+
* Since we must make a separate call to multicall for each v3 and v2 section, we will have to
|
|
143
|
+
* add the BASE_SWAP_COST to each section.
|
|
144
|
+
*/
|
|
145
|
+
let baseGasUse = bignumber_1.BigNumber.from(0);
|
|
146
|
+
const route = routeWithValidQuote.route;
|
|
147
|
+
const res = (0, router_sdk_1.partitionMixedRouteByProtocol)(route);
|
|
148
|
+
res.map((section) => {
|
|
149
|
+
if (section.every((pool) => pool instanceof v3_sdk_1.Pool)) {
|
|
150
|
+
baseGasUse = baseGasUse.add((0, gas_costs_1.BASE_SWAP_COST)(chainId));
|
|
151
|
+
baseGasUse = baseGasUse.add((0, gas_costs_1.COST_PER_HOP)(chainId).mul(section.length));
|
|
152
|
+
}
|
|
153
|
+
else if (section.every((pool) => pool instanceof v2_sdk_1.Pair)) {
|
|
154
|
+
baseGasUse = baseGasUse.add(v2_heuristic_gas_model_1.BASE_SWAP_COST);
|
|
155
|
+
baseGasUse = baseGasUse.add(
|
|
156
|
+
/// same behavior in v2 heuristic gas model factory
|
|
157
|
+
v2_heuristic_gas_model_1.COST_PER_EXTRA_HOP.mul(section.length - 1));
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
const tickGasUse = (0, gas_costs_1.COST_PER_INIT_TICK)(chainId).mul(totalInitializedTicksCrossed);
|
|
161
|
+
const uninitializedTickGasUse = gas_costs_1.COST_PER_UNINIT_TICK.mul(0);
|
|
162
|
+
// base estimate gas used based on chainId estimates for hops and ticks gas useage
|
|
163
|
+
baseGasUse = baseGasUse.add(tickGasUse).add(uninitializedTickGasUse);
|
|
164
|
+
const baseGasCostWei = gasPriceWei.mul(baseGasUse);
|
|
165
|
+
const wrappedCurrency = __1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
166
|
+
const totalGasCostNativeCurrency = amounts_1.CurrencyAmount.fromRawAmount(wrappedCurrency, baseGasCostWei.toString());
|
|
167
|
+
return {
|
|
168
|
+
totalGasCostNativeCurrency,
|
|
169
|
+
totalInitializedTicksCrossed,
|
|
170
|
+
baseGasUse,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.MixedRouteHeuristicGasModelFactory = MixedRouteHeuristicGasModelFactory;
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWQtcm91dGUtaGV1cmlzdGljLWdhcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2FscGhhLXJvdXRlci9nYXMtbW9kZWxzL21peGVkUm91dGUvbWl4ZWQtcm91dGUtaGV1cmlzdGljLWdhcy1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx3REFBcUQ7QUFDckQsb0RBQW9FO0FBQ3BFLDRDQUF1QztBQUN2Qyw0Q0FBdUM7QUFDdkMsZ0RBQXdCO0FBQ3hCLG9EQUF1QjtBQUV2QixtQ0FBc0Q7QUFDdEQsMkNBQWdEO0FBQ2hELHNEQUEwRDtBQUMxRCw4RUFJOEM7QUFFOUMsNENBSXNCO0FBQ3RCLHlFQUdzQztBQUN0QywrQ0FLeUI7QUFFekI7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBYSxrQ0FBbUMsU0FBUSxtQ0FBdUI7SUFDN0U7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQ3pCLE9BQU8sRUFDUCxXQUFXLEVBQ1gsY0FBYyxFQUFFLGNBQWMsRUFDOUIsVUFBVSxFQUNWLGNBQWMsRUFBRSxjQUFjLEdBQ0U7UUFHaEMsTUFBTSxPQUFPLEdBQVMsTUFBTSxJQUFBLGtEQUE0QixFQUN0RCxPQUFPLEVBQ1AsY0FBYyxDQUNmLENBQUM7UUFFRixrRkFBa0Y7UUFDbEYsZ0VBQWdFO1FBQ2hFLHFFQUFxRTtRQUNyRSxNQUFNLGNBQWMsR0FBRywyQkFBdUIsQ0FBQyxPQUFPLENBQUUsQ0FBQztRQUN6RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDckMsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsbUJBQTZDLEVBSzdDLEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQ2pFLG1CQUFtQixFQUNu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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { V2RouteWithValidQuote } from '../../entities/route-with-valid-quote';
|
|
3
|
+
import { BuildV2GasModelFactoryType, IGasModel, IV2GasModelFactory } from '../gas-model';
|
|
4
|
+
export declare const BASE_SWAP_COST: BigNumber;
|
|
5
|
+
export declare const COST_PER_EXTRA_HOP: BigNumber;
|
|
6
|
+
/**
|
|
7
|
+
* Computes a gas estimate for a V2 swap using heuristics.
|
|
8
|
+
* Considers number of hops in the route and the typical base cost for a swap.
|
|
9
|
+
*
|
|
10
|
+
* We compute gas estimates off-chain because
|
|
11
|
+
* 1/ Calling eth_estimateGas for a swaps requires the caller to have
|
|
12
|
+
* the full balance token being swapped, and approvals.
|
|
13
|
+
* 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
|
|
14
|
+
* due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
|
|
15
|
+
* 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
|
|
16
|
+
*
|
|
17
|
+
* Note, certain tokens e.g. rebasing/fee-on-transfer, may incur higher gas costs than
|
|
18
|
+
* what we estimate here. This is because they run extra logic on token transfer.
|
|
19
|
+
*
|
|
20
|
+
* @export
|
|
21
|
+
* @class V2HeuristicGasModelFactory
|
|
22
|
+
*/
|
|
23
|
+
export declare class V2HeuristicGasModelFactory extends IV2GasModelFactory {
|
|
24
|
+
constructor();
|
|
25
|
+
buildGasModel({ chainId, gasPriceWei, poolProvider, token, }: BuildV2GasModelFactoryType): Promise<IGasModel<V2RouteWithValidQuote>>;
|
|
26
|
+
private estimateGas;
|
|
27
|
+
private getEthPool;
|
|
28
|
+
private getHighestLiquidityUSDPool;
|
|
29
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
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_model_1 = require("../gas-model");
|
|
12
|
+
// Constant cost for doing any swap regardless of pools.
|
|
13
|
+
exports.BASE_SWAP_COST = bignumber_1.BigNumber.from(135000); // 115000, bumped up by 20_000 @eric 7/8/2022
|
|
14
|
+
// Constant per extra hop in the route.
|
|
15
|
+
exports.COST_PER_EXTRA_HOP = bignumber_1.BigNumber.from(50000); // 20000, bumped up by 30_000 @eric 7/8/2022
|
|
16
|
+
/**
|
|
17
|
+
* Computes a gas estimate for a V2 swap using heuristics.
|
|
18
|
+
* Considers number of hops in the route and the typical base cost for a swap.
|
|
19
|
+
*
|
|
20
|
+
* We compute gas estimates off-chain because
|
|
21
|
+
* 1/ Calling eth_estimateGas for a swaps requires the caller to have
|
|
22
|
+
* the full balance token being swapped, and approvals.
|
|
23
|
+
* 2/ Tracking gas used using a wrapper contract is not accurate with Multicall
|
|
24
|
+
* due to EIP-2929. We would have to make a request for every swap we wanted to estimate.
|
|
25
|
+
* 3/ For V2 we simulate all our swaps off-chain so have no way to track gas used.
|
|
26
|
+
*
|
|
27
|
+
* Note, certain tokens e.g. rebasing/fee-on-transfer, may incur higher gas costs than
|
|
28
|
+
* what we estimate here. This is because they run extra logic on token transfer.
|
|
29
|
+
*
|
|
30
|
+
* @export
|
|
31
|
+
* @class V2HeuristicGasModelFactory
|
|
32
|
+
*/
|
|
33
|
+
class V2HeuristicGasModelFactory extends gas_model_1.IV2GasModelFactory {
|
|
34
|
+
constructor() {
|
|
35
|
+
super();
|
|
36
|
+
}
|
|
37
|
+
async buildGasModel({ chainId, gasPriceWei, poolProvider, token, }) {
|
|
38
|
+
if (token.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])) {
|
|
39
|
+
const usdPool = await this.getHighestLiquidityUSDPool(chainId, poolProvider);
|
|
40
|
+
return {
|
|
41
|
+
estimateGasCost: (routeWithValidQuote) => {
|
|
42
|
+
const { gasCostInEth, gasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId);
|
|
43
|
+
const ethToken0 = usdPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address;
|
|
44
|
+
const ethTokenPrice = ethToken0
|
|
45
|
+
? usdPool.token0Price
|
|
46
|
+
: usdPool.token1Price;
|
|
47
|
+
const gasCostInTermsOfUSD = ethTokenPrice.quote(gasCostInEth);
|
|
48
|
+
return {
|
|
49
|
+
gasEstimate: gasUse,
|
|
50
|
+
gasCostInToken: gasCostInEth,
|
|
51
|
+
gasCostInUSD: gasCostInTermsOfUSD,
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// If the quote token is not WETH, we convert the gas cost to be in terms of the quote token.
|
|
57
|
+
// We do this by getting the highest liquidity <token>/ETH pool.
|
|
58
|
+
const ethPool = await this.getEthPool(chainId, token, poolProvider);
|
|
59
|
+
if (!ethPool) {
|
|
60
|
+
util_1.log.info('Unable to find ETH pool with the quote token to produce gas adjusted costs. Route will not account for gas.');
|
|
61
|
+
}
|
|
62
|
+
const usdPool = await this.getHighestLiquidityUSDPool(chainId, poolProvider);
|
|
63
|
+
return {
|
|
64
|
+
estimateGasCost: (routeWithValidQuote) => {
|
|
65
|
+
const usdToken = usdPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address
|
|
66
|
+
? usdPool.token1
|
|
67
|
+
: usdPool.token0;
|
|
68
|
+
const { gasCostInEth, gasUse } = this.estimateGas(routeWithValidQuote, gasPriceWei, chainId);
|
|
69
|
+
if (!ethPool) {
|
|
70
|
+
return {
|
|
71
|
+
gasEstimate: gasUse,
|
|
72
|
+
gasCostInToken: amounts_1.CurrencyAmount.fromRawAmount(token, 0),
|
|
73
|
+
gasCostInUSD: amounts_1.CurrencyAmount.fromRawAmount(usdToken, 0),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const ethToken0 = ethPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address;
|
|
77
|
+
const ethTokenPrice = ethToken0
|
|
78
|
+
? ethPool.token0Price
|
|
79
|
+
: ethPool.token1Price;
|
|
80
|
+
let gasCostInTermsOfQuoteToken;
|
|
81
|
+
try {
|
|
82
|
+
gasCostInTermsOfQuoteToken = ethTokenPrice.quote(gasCostInEth);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
util_1.log.error({
|
|
86
|
+
ethTokenPriceBase: ethTokenPrice.baseCurrency,
|
|
87
|
+
ethTokenPriceQuote: ethTokenPrice.quoteCurrency,
|
|
88
|
+
gasCostInEth: gasCostInEth.currency,
|
|
89
|
+
}, 'Debug eth price token issue');
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
const ethToken0USDPool = usdPool.token0.address == util_1.WRAPPED_NATIVE_CURRENCY[chainId].address;
|
|
93
|
+
const ethTokenPriceUSDPool = ethToken0USDPool
|
|
94
|
+
? usdPool.token0Price
|
|
95
|
+
: usdPool.token1Price;
|
|
96
|
+
let gasCostInTermsOfUSD;
|
|
97
|
+
try {
|
|
98
|
+
gasCostInTermsOfUSD = ethTokenPriceUSDPool.quote(gasCostInEth);
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
util_1.log.error({
|
|
102
|
+
usdT1: usdPool.token0.symbol,
|
|
103
|
+
usdT2: usdPool.token1.symbol,
|
|
104
|
+
gasCostInEthToken: gasCostInEth.currency.symbol,
|
|
105
|
+
}, 'Failed to compute USD gas price');
|
|
106
|
+
throw err;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
gasEstimate: gasUse,
|
|
110
|
+
gasCostInToken: gasCostInTermsOfQuoteToken,
|
|
111
|
+
gasCostInUSD: gasCostInTermsOfUSD,
|
|
112
|
+
};
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
estimateGas(routeWithValidQuote, gasPriceWei, chainId) {
|
|
117
|
+
const hops = routeWithValidQuote.route.pairs.length;
|
|
118
|
+
const gasUse = exports.BASE_SWAP_COST.add(exports.COST_PER_EXTRA_HOP.mul(hops - 1));
|
|
119
|
+
const totalGasCostWei = gasPriceWei.mul(gasUse);
|
|
120
|
+
const weth = util_1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
121
|
+
const gasCostInEth = amounts_1.CurrencyAmount.fromRawAmount(weth, totalGasCostWei.toString());
|
|
122
|
+
return { gasCostInEth, gasUse };
|
|
123
|
+
}
|
|
124
|
+
async getEthPool(chainId, token, poolProvider) {
|
|
125
|
+
const weth = util_1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
126
|
+
const poolAccessor = await poolProvider.getPools([[weth, token]]);
|
|
127
|
+
const pool = poolAccessor.getPool(weth, token);
|
|
128
|
+
if (!pool || pool.reserve0.equalTo(0) || pool.reserve1.equalTo(0)) {
|
|
129
|
+
util_1.log.error({
|
|
130
|
+
weth,
|
|
131
|
+
token,
|
|
132
|
+
reserve0: pool === null || pool === void 0 ? void 0 : pool.reserve0.toExact(),
|
|
133
|
+
reserve1: pool === null || pool === void 0 ? void 0 : pool.reserve1.toExact(),
|
|
134
|
+
}, `Could not find a valid WETH pool with ${token.symbol} for computing gas costs.`);
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
return pool;
|
|
138
|
+
}
|
|
139
|
+
async getHighestLiquidityUSDPool(chainId, poolProvider) {
|
|
140
|
+
const usdTokens = gas_model_1.usdGasTokensByChain[chainId];
|
|
141
|
+
if (!usdTokens) {
|
|
142
|
+
throw new Error(`Could not find a USD token for computing gas costs on ${chainId}`);
|
|
143
|
+
}
|
|
144
|
+
const usdPools = lodash_1.default.map(usdTokens, (usdToken) => [
|
|
145
|
+
usdToken,
|
|
146
|
+
util_1.WRAPPED_NATIVE_CURRENCY[chainId],
|
|
147
|
+
]);
|
|
148
|
+
const poolAccessor = await poolProvider.getPools(usdPools);
|
|
149
|
+
const poolsRaw = poolAccessor.getAllPools();
|
|
150
|
+
const pools = lodash_1.default.filter(poolsRaw, (pool) => pool.reserve0.greaterThan(0) && pool.reserve1.greaterThan(0));
|
|
151
|
+
if (pools.length == 0) {
|
|
152
|
+
util_1.log.error({ pools }, `Could not find a USD/WETH pool for computing gas costs.`);
|
|
153
|
+
throw new Error(`Can't find USD/WETH pool for computing gas costs.`);
|
|
154
|
+
}
|
|
155
|
+
const maxPool = lodash_1.default.maxBy(pools, (pool) => {
|
|
156
|
+
if (pool.token0.equals(util_1.WRAPPED_NATIVE_CURRENCY[chainId])) {
|
|
157
|
+
return parseFloat(pool.reserve0.toSignificant(2));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
return parseFloat(pool.reserve1.toSignificant(2));
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
return maxPool;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.V2HeuristicGasModelFactory = V2HeuristicGasModelFactory;
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjItaGV1cmlzdGljLWdhcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2FscGhhLXJvdXRlci9nYXMtbW9kZWxzL3YyL3YyLWhldXJpc3RpYy1nYXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQXFEO0FBR3JELG9EQUF1QjtBQUd2QiwyQ0FBeUU7QUFDekUsc0RBQTBEO0FBRTFELDRDQUtzQjtBQUV0Qix3REFBd0Q7QUFDM0MsUUFBQSxjQUFjLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7QUFFbkcsdUNBQXVDO0FBQzFCLFFBQUEsa0JBQWtCLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw0Q0FBNEM7QUFFckc7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFhLDBCQUEyQixTQUFRLDhCQUFrQjtJQUNoRTtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDekIsT0FBTyxFQUNQLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxHQUNzQjtRQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsOEJBQXVCLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBRTtZQUNuRCxNQUFNLE9BQU8sR0FBUyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FDekQsT0FBTyxFQUNQLFlBQVksQ0FDYixDQUFDO1lBRUYsT0FBTztnQkFDTCxlQUFlLEVBQUUsQ0FBQyxtQkFBMEMsRUFBRSxFQUFFO29CQUM5RCxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQy9DLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsT0FBTyxDQUNSLENBQUM7b0JBRUYsTUFBTSxTQUFTLEdBQ2IsT0FBTyxDQUFD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
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
import { ChainId } from '../../../..';
|
|
3
|
+
export declare const COST_PER_UNINIT_TICK: BigNumber;
|
|
4
|
+
export declare const BASE_SWAP_COST: (id: ChainId) => BigNumber;
|
|
5
|
+
export declare const COST_PER_INIT_TICK: (id: ChainId) => BigNumber;
|
|
6
|
+
export declare const COST_PER_HOP: (id: ChainId) => BigNumber;
|