@synthra-swap/smart-order-router 3.15.33 → 3.16.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/README.md +21 -21
- package/build/main/providers/caching/route/model/cached-route.d.ts +5 -5
- package/build/main/providers/caching/route/model/cached-routes.d.ts +5 -5
- package/build/main/providers/caching/route/model/cached-routes.js +1 -1
- package/build/main/providers/caching/route/route-caching-provider.d.ts +2 -2
- package/build/main/providers/caching/route/route-caching-provider.js +3 -3
- package/build/main/providers/caching-gas-provider.d.ts +1 -1
- package/build/main/providers/caching-token-list-provider.d.ts +2 -2
- package/build/main/providers/caching-token-list-provider.js +3 -3
- package/build/main/providers/caching-token-provider.d.ts +1 -1
- package/build/main/providers/caching-token-provider.js +34 -34
- package/build/main/providers/eth-estimate-gas-provider.d.ts +2 -4
- package/build/main/providers/eth-estimate-gas-provider.js +4 -5
- package/build/main/providers/index.d.ts +1 -10
- package/build/main/providers/index.js +2 -11
- package/build/main/providers/multicall-uniswap-provider.d.ts +1 -1
- package/build/main/providers/multicall-uniswap-provider.js +2 -2
- package/build/main/providers/on-chain-gas-price-provider.d.ts +1 -1
- package/build/main/providers/on-chain-gas-price-provider.js +5 -5
- package/build/main/providers/on-chain-quote-provider.d.ts +11 -19
- package/build/main/providers/on-chain-quote-provider.js +18 -39
- package/build/main/providers/simulation-provider.d.ts +1 -1
- package/build/main/providers/simulation-provider.js +6 -6
- package/build/main/providers/swap-router-provider.d.ts +2 -2
- package/build/main/providers/tenderly-simulation-provider.d.ts +2 -4
- package/build/main/providers/tenderly-simulation-provider.js +13 -14
- package/build/main/providers/token-provider.d.ts +1 -1
- package/build/main/providers/token-provider.js +112 -112
- package/build/main/providers/token-validator-provider.d.ts +1 -1
- package/build/main/providers/uri-subgraph-provider.d.ts +3 -5
- package/build/main/providers/uri-subgraph-provider.js +2 -3
- package/build/main/providers/v3/caching-pool-provider.d.ts +2 -2
- package/build/main/providers/v3/caching-subgraph-provider.d.ts +1 -1
- package/build/main/providers/v3/gas-data-provider.d.ts +1 -1
- package/build/main/providers/v3/gas-data-provider.js +3 -3
- package/build/main/providers/v3/pool-provider.d.ts +2 -2
- package/build/main/providers/v3/pool-provider.js +15 -7
- package/build/main/providers/v3/static-subgraph-provider.d.ts +1 -1
- package/build/main/providers/v3/static-subgraph-provider.js +48 -47
- package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +1 -1
- package/build/main/providers/v3/subgraph-provider.d.ts +1 -3
- package/build/main/providers/v3/subgraph-provider.js +12 -14
- package/build/main/routers/alpha-router/alpha-router.d.ts +17 -54
- package/build/main/routers/alpha-router/alpha-router.js +92 -170
- package/build/main/routers/alpha-router/config.d.ts +1 -2
- package/build/main/routers/alpha-router/config.js +11 -39
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +5 -93
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +5 -93
- package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +1 -1
- package/build/main/routers/alpha-router/functions/best-swap-route.js +12 -39
- package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +1 -1
- package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js +3 -3
- package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +4 -7
- package/build/main/routers/alpha-router/functions/compute-all-routes.js +2 -28
- package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +3 -39
- package/build/main/routers/alpha-router/functions/get-candidate-pools.js +28 -433
- package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +8 -29
- package/build/main/routers/alpha-router/gas-models/gas-model.js +28 -39
- package/build/main/routers/alpha-router/gas-models/v3/gas-costs.d.ts +1 -1
- package/build/main/routers/alpha-router/gas-models/v3/gas-costs.js +75 -69
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +1 -1
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +41 -42
- package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +5 -6
- package/build/main/routers/alpha-router/quoters/base-quoter.js +1 -1
- package/build/main/routers/alpha-router/quoters/index.d.ts +1 -3
- package/build/main/routers/alpha-router/quoters/index.js +2 -4
- package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +2 -2
- package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +1 -1
- package/build/main/routers/alpha-router/quoters/v3-quoter.js +3 -3
- package/build/main/routers/index.d.ts +1 -1
- package/build/main/routers/index.js +2 -2
- package/build/main/routers/router.d.ts +4 -11
- package/build/main/routers/router.js +5 -20
- package/build/main/routers/synthra-router/config.d.ts +5 -0
- package/build/main/routers/synthra-router/config.js +30 -0
- package/build/main/routers/synthra-router/index.d.ts +3 -0
- package/build/main/routers/{legacy-router → synthra-router}/index.js +4 -2
- package/build/main/routers/synthra-router/synthra-router.d.ts +31 -0
- package/build/main/routers/synthra-router/synthra-router.js +437 -0
- package/build/main/routers/synthra-router/types.d.ts +158 -0
- package/build/main/routers/synthra-router/types.js +3 -0
- package/build/main/tsconfig.tsbuildinfo +1 -1
- package/build/main/types/v3/factories/{IUniswapV3PoolState__factory.d.ts → ISynthraV3PoolState__factory.d.ts} +4 -4
- package/build/main/types/v3/factories/{IUniswapV3PoolState__factory.js → ISynthraV3PoolState__factory.js} +5 -5
- package/build/main/types/v3/factories/{UniswapInterfaceMulticall__factory.d.ts → SynthraInterfaceMulticall__factory.d.ts} +7 -7
- package/build/main/types/v3/factories/{UniswapInterfaceMulticall__factory.js → SynthraInterfaceMulticall__factory.js} +8 -8
- package/build/main/util/addresses.d.ts +1 -4
- package/build/main/util/addresses.js +29 -53
- package/build/main/util/amounts.d.ts +3 -3
- package/build/main/util/amounts.js +12 -12
- package/build/main/util/chains.d.ts +2 -31
- package/build/main/util/chains.js +83 -511
- package/build/main/util/gas-factory-helpers.d.ts +8 -11
- package/build/main/util/gas-factory-helpers.js +57 -103
- package/build/main/util/index.d.ts +0 -1
- package/build/main/util/index.js +1 -2
- package/build/main/util/methodParameters.d.ts +2 -2
- package/build/main/util/methodParameters.js +10 -57
- package/build/main/util/router-sdk.d.ts +21 -0
- package/build/main/util/router-sdk.js +24 -0
- package/build/main/util/routes.d.ts +4 -5
- package/build/main/util/routes.js +9 -19
- package/build/main/util/token-list.d.ts +28 -0
- package/build/main/util/token-list.js +14 -0
- package/build/module/providers/caching/route/model/cached-route.d.ts +5 -5
- package/build/module/providers/caching/route/model/cached-routes.d.ts +5 -5
- package/build/module/providers/caching/route/model/cached-routes.js +1 -1
- package/build/module/providers/caching/route/route-caching-provider.d.ts +2 -2
- package/build/module/providers/caching/route/route-caching-provider.js +1 -1
- package/build/module/providers/caching-gas-provider.d.ts +1 -1
- package/build/module/providers/caching-token-list-provider.d.ts +2 -2
- package/build/module/providers/caching-token-list-provider.js +2 -2
- package/build/module/providers/caching-token-provider.d.ts +1 -1
- package/build/module/providers/caching-token-provider.js +1 -1
- package/build/module/providers/eth-estimate-gas-provider.d.ts +2 -4
- package/build/module/providers/eth-estimate-gas-provider.js +4 -5
- package/build/module/providers/index.d.ts +1 -10
- package/build/module/providers/index.js +2 -11
- package/build/module/providers/multicall-uniswap-provider.d.ts +1 -1
- package/build/module/providers/multicall-uniswap-provider.js +2 -2
- package/build/module/providers/on-chain-gas-price-provider.d.ts +1 -1
- package/build/module/providers/on-chain-gas-price-provider.js +1 -1
- package/build/module/providers/on-chain-quote-provider.d.ts +11 -19
- package/build/module/providers/on-chain-quote-provider.js +17 -38
- package/build/module/providers/simulation-provider.d.ts +1 -1
- package/build/module/providers/simulation-provider.js +3 -3
- package/build/module/providers/swap-router-provider.d.ts +2 -2
- package/build/module/providers/tenderly-simulation-provider.d.ts +2 -4
- package/build/module/providers/tenderly-simulation-provider.js +6 -7
- package/build/module/providers/token-provider.d.ts +1 -1
- package/build/module/providers/token-provider.js +3 -3
- package/build/module/providers/token-validator-provider.d.ts +1 -1
- package/build/module/providers/uri-subgraph-provider.d.ts +3 -5
- package/build/module/providers/uri-subgraph-provider.js +2 -3
- package/build/module/providers/v3/caching-pool-provider.d.ts +2 -2
- package/build/module/providers/v3/caching-subgraph-provider.d.ts +1 -1
- package/build/module/providers/v3/gas-data-provider.d.ts +1 -1
- package/build/module/providers/v3/gas-data-provider.js +1 -1
- package/build/module/providers/v3/pool-provider.d.ts +2 -2
- package/build/module/providers/v3/pool-provider.js +13 -5
- package/build/module/providers/v3/static-subgraph-provider.d.ts +1 -1
- package/build/module/providers/v3/static-subgraph-provider.js +5 -4
- package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +1 -1
- package/build/module/providers/v3/subgraph-provider.d.ts +1 -3
- package/build/module/providers/v3/subgraph-provider.js +2 -3
- package/build/module/routers/alpha-router/alpha-router.d.ts +17 -54
- package/build/module/routers/alpha-router/alpha-router.js +74 -145
- package/build/module/routers/alpha-router/config.d.ts +1 -2
- package/build/module/routers/alpha-router/config.js +2 -30
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +5 -93
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +3 -89
- package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +1 -1
- package/build/module/routers/alpha-router/functions/best-swap-route.js +8 -35
- package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +1 -1
- package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.js +1 -1
- package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +4 -7
- package/build/module/routers/alpha-router/functions/compute-all-routes.js +2 -26
- package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +3 -39
- package/build/module/routers/alpha-router/functions/get-candidate-pools.js +5 -418
- package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +8 -29
- package/build/module/routers/alpha-router/gas-models/gas-model.js +7 -18
- package/build/module/routers/alpha-router/gas-models/v3/gas-costs.d.ts +1 -1
- package/build/module/routers/alpha-router/gas-models/v3/gas-costs.js +8 -2
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +1 -1
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +27 -28
- package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +5 -6
- package/build/module/routers/alpha-router/quoters/base-quoter.js +1 -1
- package/build/module/routers/alpha-router/quoters/index.d.ts +1 -3
- package/build/module/routers/alpha-router/quoters/index.js +2 -4
- package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +2 -2
- package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +1 -1
- package/build/module/routers/alpha-router/quoters/v3-quoter.js +1 -1
- package/build/module/routers/index.d.ts +1 -1
- package/build/module/routers/index.js +2 -2
- package/build/module/routers/router.d.ts +4 -11
- package/build/module/routers/router.js +3 -16
- package/build/module/routers/synthra-router/config.d.ts +5 -0
- package/build/module/routers/synthra-router/config.js +27 -0
- package/build/module/routers/synthra-router/index.d.ts +3 -0
- package/build/module/routers/synthra-router/index.js +4 -0
- package/build/module/routers/synthra-router/synthra-router.d.ts +31 -0
- package/build/module/routers/synthra-router/synthra-router.js +447 -0
- package/build/module/routers/synthra-router/types.d.ts +158 -0
- package/build/module/routers/synthra-router/types.js +2 -0
- package/build/module/tsconfig.module.tsbuildinfo +1 -1
- package/build/module/types/v3/factories/{IUniswapV3PoolState__factory.d.ts → ISynthraV3PoolState__factory.d.ts} +4 -4
- package/build/module/types/v3/factories/{IUniswapV3PoolState__factory.js → ISynthraV3PoolState__factory.js} +3 -3
- package/build/module/types/v3/factories/{UniswapInterfaceMulticall__factory.d.ts → SynthraInterfaceMulticall__factory.d.ts} +7 -7
- package/build/module/types/v3/factories/{UniswapInterfaceMulticall__factory.js → SynthraInterfaceMulticall__factory.js} +6 -6
- package/build/module/util/addresses.d.ts +1 -4
- package/build/module/util/addresses.js +7 -82
- package/build/module/util/amounts.d.ts +3 -3
- package/build/module/util/amounts.js +3 -3
- package/build/module/util/chains.d.ts +2 -31
- package/build/module/util/chains.js +3 -435
- package/build/module/util/gas-factory-helpers.d.ts +8 -11
- package/build/module/util/gas-factory-helpers.js +31 -76
- package/build/module/util/index.d.ts +0 -1
- package/build/module/util/index.js +1 -2
- package/build/module/util/methodParameters.d.ts +2 -2
- package/build/module/util/methodParameters.js +7 -54
- package/build/module/util/router-sdk.d.ts +21 -0
- package/build/module/util/router-sdk.js +19 -0
- package/build/module/util/routes.d.ts +4 -5
- package/build/module/util/routes.js +8 -18
- package/build/module/util/token-list.d.ts +28 -0
- package/build/module/util/token-list.js +11 -0
- package/package.json +13 -26
- package/build/main/providers/eth-gas-station-info-gas-price-provider.d.ts +0 -19
- package/build/main/providers/eth-gas-station-info-gas-price-provider.js +0 -37
- package/build/main/providers/v2/caching-pool-provider.d.ts +0 -33
- package/build/main/providers/v2/caching-pool-provider.js +0 -88
- package/build/main/providers/v2/caching-subgraph-provider.d.ts +0 -23
- package/build/main/providers/v2/caching-subgraph-provider.js +0 -34
- package/build/main/providers/v2/pool-provider.d.ts +0 -59
- package/build/main/providers/v2/pool-provider.js +0 -111
- package/build/main/providers/v2/quote-provider.d.ts +0 -33
- package/build/main/providers/v2/quote-provider.js +0 -91
- package/build/main/providers/v2/static-subgraph-provider.d.ts +0 -19
- package/build/main/providers/v2/static-subgraph-provider.js +0 -97
- package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +0 -19
- package/build/main/providers/v2/subgraph-provider-with-fallback.js +0 -35
- package/build/main/providers/v2/subgraph-provider.d.ts +0 -33
- package/build/main/providers/v2/subgraph-provider.js +0 -134
- package/build/main/providers/v2/uri-subgraph-provider.d.ts +0 -4
- package/build/main/providers/v2/uri-subgraph-provider.js +0 -8
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +0 -25
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +0 -175
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +0 -29
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +0 -167
- package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +0 -20
- package/build/main/routers/alpha-router/quoters/mixed-quoter.js +0 -130
- package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +0 -21
- package/build/main/routers/alpha-router/quoters/v2-quoter.js +0 -122
- package/build/main/routers/legacy-router/bases.d.ts +0 -183
- package/build/main/routers/legacy-router/bases.js +0 -81
- package/build/main/routers/legacy-router/index.d.ts +0 -1
- package/build/main/routers/legacy-router/legacy-router.d.ts +0 -41
- package/build/main/routers/legacy-router/legacy-router.js +0 -289
- package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +0 -41
- package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js +0 -156
- package/build/main/types/v2/commons.d.ts +0 -16
- package/build/main/types/v2/commons.js +0 -6
- package/build/main/types/v2/factories/IUniswapV2Pair__factory.d.ts +0 -35
- package/build/main/types/v2/factories/IUniswapV2Pair__factory.js +0 -671
- package/build/main/util/protocols.d.ts +0 -2
- package/build/main/util/protocols.js +0 -18
- package/build/main/util/unsupported-tokens.d.ts +0 -37
- package/build/main/util/unsupported-tokens.js +0 -1119
- package/build/module/providers/eth-gas-station-info-gas-price-provider.d.ts +0 -19
- package/build/module/providers/eth-gas-station-info-gas-price-provider.js +0 -30
- package/build/module/providers/v2/caching-pool-provider.d.ts +0 -33
- package/build/module/providers/v2/caching-pool-provider.js +0 -81
- package/build/module/providers/v2/caching-subgraph-provider.d.ts +0 -23
- package/build/module/providers/v2/caching-subgraph-provider.js +0 -30
- package/build/module/providers/v2/pool-provider.d.ts +0 -59
- package/build/module/providers/v2/pool-provider.js +0 -104
- package/build/module/providers/v2/quote-provider.d.ts +0 -33
- package/build/module/providers/v2/quote-provider.js +0 -87
- package/build/module/providers/v2/static-subgraph-provider.d.ts +0 -19
- package/build/module/providers/v2/static-subgraph-provider.js +0 -90
- package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +0 -19
- package/build/module/providers/v2/subgraph-provider-with-fallback.js +0 -31
- package/build/module/providers/v2/subgraph-provider.d.ts +0 -33
- package/build/module/providers/v2/subgraph-provider.js +0 -135
- package/build/module/providers/v2/uri-subgraph-provider.d.ts +0 -4
- package/build/module/providers/v2/uri-subgraph-provider.js +0 -4
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +0 -25
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +0 -168
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +0 -29
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +0 -160
- package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +0 -20
- package/build/module/routers/alpha-router/quoters/mixed-quoter.js +0 -123
- package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +0 -21
- package/build/module/routers/alpha-router/quoters/v2-quoter.js +0 -115
- package/build/module/routers/legacy-router/bases.d.ts +0 -183
- package/build/module/routers/legacy-router/bases.js +0 -87
- package/build/module/routers/legacy-router/index.d.ts +0 -1
- package/build/module/routers/legacy-router/index.js +0 -2
- package/build/module/routers/legacy-router/legacy-router.d.ts +0 -41
- package/build/module/routers/legacy-router/legacy-router.js +0 -290
- package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +0 -41
- package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.js +0 -152
- package/build/module/types/v2/commons.d.ts +0 -16
- package/build/module/types/v2/commons.js +0 -5
- package/build/module/types/v2/factories/IUniswapV2Pair__factory.d.ts +0 -35
- package/build/module/types/v2/factories/IUniswapV2Pair__factory.js +0 -667
- package/build/module/util/protocols.d.ts +0 -2
- package/build/module/util/protocols.js +0 -14
- package/build/module/util/unsupported-tokens.d.ts +0 -37
- package/build/module/util/unsupported-tokens.js +0 -1116
|
@@ -1,167 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjItaGV1cmlzdGljLWdhcy1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXJzL2FscGhhLXJvdXRlci9nYXMtbW9kZWxzL3YyL3YyLWhldXJpc3RpYy1nYXMtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQXFEO0FBR3JELG9EQUF1QjtBQUd2QiwyQ0FBZ0U7QUFDaEUsc0RBQTBEO0FBRTFELDRDQUtzQjtBQUV0Qix3REFBd0Q7QUFDM0MsUUFBQSxjQUFjLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7QUFFbkcsdUNBQXVDO0FBQzFCLFFBQUEsa0JBQWtCLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw0Q0FBNEM7QUFFckc7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFhLDBCQUEyQixTQUFRLDhCQUFrQjtJQUNoRTtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDekIsT0FBTyxFQUNQLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxHQUNzQjtRQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsOEJBQXVCLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBRTtZQUNuRCxNQUFNLE9BQU8sR0FBUyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FDekQsT0FBTyxFQUNQLFlBQVksQ0FDYixDQUFDO1lBRUYsT0FBTztnQkFDTCxlQUFlLEVBQUUsQ0FBQyxtQkFBMEMsRUFBRSxFQUFFO29CQUM5RCxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQy9DLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsT0FBTyxDQUNSLENBQUM7b0JBRUYsTUFBTSxTQUFTLEdBQ2IsT0FBTyxDQUFD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
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ChainId, Token, TradeType } from '@synthra-swap/sdk-core';
|
|
2
|
-
import { IOnChainQuoteProvider, ITokenListProvider, ITokenProvider, ITokenValidatorProvider, IV2PoolProvider, IV2SubgraphProvider, IV3PoolProvider, IV3SubgraphProvider } from '../../../providers';
|
|
3
|
-
import { CurrencyAmount } from '../../../util';
|
|
4
|
-
import { MixedRoute } from '../../router';
|
|
5
|
-
import { AlphaRouterConfig } from '../alpha-router';
|
|
6
|
-
import { MixedRouteWithValidQuote } from '../entities';
|
|
7
|
-
import { CandidatePoolsBySelectionCriteria } from '../functions/get-candidate-pools';
|
|
8
|
-
import { IGasModel } from '../gas-models';
|
|
9
|
-
import { BaseQuoter } from './base-quoter';
|
|
10
|
-
import { GetQuotesResult, GetRoutesResult } from './model';
|
|
11
|
-
export declare class MixedQuoter extends BaseQuoter<MixedRoute> {
|
|
12
|
-
protected v3SubgraphProvider: IV3SubgraphProvider;
|
|
13
|
-
protected v3PoolProvider: IV3PoolProvider;
|
|
14
|
-
protected v2SubgraphProvider: IV2SubgraphProvider;
|
|
15
|
-
protected v2PoolProvider: IV2PoolProvider;
|
|
16
|
-
protected onChainQuoteProvider: IOnChainQuoteProvider;
|
|
17
|
-
constructor(v3SubgraphProvider: IV3SubgraphProvider, v3PoolProvider: IV3PoolProvider, v2SubgraphProvider: IV2SubgraphProvider, v2PoolProvider: IV2PoolProvider, onChainQuoteProvider: IOnChainQuoteProvider, tokenProvider: ITokenProvider, chainId: ChainId, blockedTokenListProvider?: ITokenListProvider, tokenValidatorProvider?: ITokenValidatorProvider);
|
|
18
|
-
protected getRoutes(tokenIn: Token, tokenOut: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig): Promise<GetRoutesResult<MixedRoute>>;
|
|
19
|
-
getQuotes(routes: MixedRoute[], amounts: CurrencyAmount[], percents: number[], quoteToken: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig, candidatePools?: CandidatePoolsBySelectionCriteria, gasModel?: IGasModel<MixedRouteWithValidQuote>): Promise<GetQuotesResult>;
|
|
20
|
-
}
|
|
@@ -1,130 +0,0 @@
|
|
|
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.MixedQuoter = void 0;
|
|
7
|
-
const sdk_core_1 = require("@synthra-swap/sdk-core");
|
|
8
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
-
const providers_1 = require("../../../providers");
|
|
10
|
-
const util_1 = require("../../../util");
|
|
11
|
-
const entities_1 = require("../entities");
|
|
12
|
-
const compute_all_routes_1 = require("../functions/compute-all-routes");
|
|
13
|
-
const get_candidate_pools_1 = require("../functions/get-candidate-pools");
|
|
14
|
-
const base_quoter_1 = require("./base-quoter");
|
|
15
|
-
class MixedQuoter extends base_quoter_1.BaseQuoter {
|
|
16
|
-
constructor(v3SubgraphProvider, v3PoolProvider, v2SubgraphProvider, v2PoolProvider, onChainQuoteProvider, tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {
|
|
17
|
-
super(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider);
|
|
18
|
-
this.v3SubgraphProvider = v3SubgraphProvider;
|
|
19
|
-
this.v3PoolProvider = v3PoolProvider;
|
|
20
|
-
this.v2SubgraphProvider = v2SubgraphProvider;
|
|
21
|
-
this.v2PoolProvider = v2PoolProvider;
|
|
22
|
-
this.onChainQuoteProvider = onChainQuoteProvider;
|
|
23
|
-
}
|
|
24
|
-
async getRoutes(tokenIn, tokenOut, tradeType, routingConfig) {
|
|
25
|
-
if (tradeType != sdk_core_1.TradeType.EXACT_INPUT) {
|
|
26
|
-
throw new Error('Mixed route quotes are not supported for EXACT_OUTPUT');
|
|
27
|
-
}
|
|
28
|
-
const { V2poolAccessor, V3poolAccessor, candidatePools: mixedRouteCandidatePools, } = await (0, get_candidate_pools_1.getMixedRouteCandidatePools)({
|
|
29
|
-
tokenIn,
|
|
30
|
-
tokenOut,
|
|
31
|
-
tokenProvider: this.tokenProvider,
|
|
32
|
-
blockedTokenListProvider: this.blockedTokenListProvider,
|
|
33
|
-
v3poolProvider: this.v3PoolProvider,
|
|
34
|
-
v2poolProvider: this.v2PoolProvider,
|
|
35
|
-
routeType: tradeType,
|
|
36
|
-
v3subgraphProvider: this.v3SubgraphProvider,
|
|
37
|
-
v2subgraphProvider: this.v2SubgraphProvider,
|
|
38
|
-
routingConfig,
|
|
39
|
-
chainId: this.chainId,
|
|
40
|
-
});
|
|
41
|
-
const V3poolsRaw = V3poolAccessor.getAllPools();
|
|
42
|
-
const V2poolsRaw = V2poolAccessor.getAllPools();
|
|
43
|
-
const poolsRaw = [...V3poolsRaw, ...V2poolsRaw];
|
|
44
|
-
const candidatePools = mixedRouteCandidatePools;
|
|
45
|
-
// Drop any pools that contain fee on transfer tokens (not supported by v3) or have issues with being transferred.
|
|
46
|
-
const pools = await this.applyTokenValidatorToPools(poolsRaw, (token, tokenValidation) => {
|
|
47
|
-
// If there is no available validation result we assume the token is fine.
|
|
48
|
-
if (!tokenValidation) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
// Only filters out *intermediate* pools that involve tokens that we detect
|
|
52
|
-
// cant be transferred. This prevents us trying to route through tokens that may
|
|
53
|
-
// not be transferrable, but allows users to still swap those tokens if they
|
|
54
|
-
// specify.
|
|
55
|
-
//
|
|
56
|
-
if (tokenValidation == providers_1.TokenValidationResult.STF &&
|
|
57
|
-
(token.equals(tokenIn) || token.equals(tokenOut))) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
return (tokenValidation == providers_1.TokenValidationResult.FOT ||
|
|
61
|
-
tokenValidation == providers_1.TokenValidationResult.STF);
|
|
62
|
-
});
|
|
63
|
-
const { maxSwapsPerPath } = routingConfig;
|
|
64
|
-
const routes = (0, compute_all_routes_1.computeAllMixedRoutes)(tokenIn, tokenOut, pools, maxSwapsPerPath);
|
|
65
|
-
return {
|
|
66
|
-
routes,
|
|
67
|
-
candidatePools,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
async getQuotes(routes, amounts, percents, quoteToken, tradeType, routingConfig, candidatePools, gasModel) {
|
|
71
|
-
util_1.log.info('Starting to get mixed quotes');
|
|
72
|
-
if (gasModel === undefined) {
|
|
73
|
-
throw new Error('GasModel for MixedRouteWithValidQuote is required to getQuotes');
|
|
74
|
-
}
|
|
75
|
-
if (routes.length == 0) {
|
|
76
|
-
return { routesWithValidQuotes: [], candidatePools };
|
|
77
|
-
}
|
|
78
|
-
// For all our routes, and all the fractional amounts, fetch quotes on-chain.
|
|
79
|
-
const quoteFn = this.onChainQuoteProvider.getQuotesManyExactIn.bind(this.onChainQuoteProvider);
|
|
80
|
-
const beforeQuotes = Date.now();
|
|
81
|
-
util_1.log.info(`Getting quotes for mixed for ${routes.length} routes with ${amounts.length} amounts per route.`);
|
|
82
|
-
const { routesWithQuotes } = await quoteFn(amounts, routes, {
|
|
83
|
-
blockNumber: routingConfig.blockNumber,
|
|
84
|
-
});
|
|
85
|
-
util_1.metric.putMetric('MixedQuotesLoad', Date.now() - beforeQuotes, util_1.MetricLoggerUnit.Milliseconds);
|
|
86
|
-
util_1.metric.putMetric('MixedQuotesFetched', (0, lodash_1.default)(routesWithQuotes)
|
|
87
|
-
.map(([, quotes]) => quotes.length)
|
|
88
|
-
.sum(), util_1.MetricLoggerUnit.Count);
|
|
89
|
-
const routesWithValidQuotes = [];
|
|
90
|
-
for (const routeWithQuote of routesWithQuotes) {
|
|
91
|
-
const [route, quotes] = routeWithQuote;
|
|
92
|
-
for (let i = 0; i < quotes.length; i++) {
|
|
93
|
-
const percent = percents[i];
|
|
94
|
-
const amountQuote = quotes[i];
|
|
95
|
-
const { quote, amount, sqrtPriceX96AfterList, initializedTicksCrossedList, gasEstimate, } = amountQuote;
|
|
96
|
-
if (!quote ||
|
|
97
|
-
!sqrtPriceX96AfterList ||
|
|
98
|
-
!initializedTicksCrossedList ||
|
|
99
|
-
!gasEstimate) {
|
|
100
|
-
util_1.log.debug({
|
|
101
|
-
route: (0, util_1.routeToString)(route),
|
|
102
|
-
amountQuote,
|
|
103
|
-
}, 'Dropping a null mixed quote for route.');
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
const routeWithValidQuote = new entities_1.MixedRouteWithValidQuote({
|
|
107
|
-
route,
|
|
108
|
-
rawQuote: quote,
|
|
109
|
-
amount,
|
|
110
|
-
percent,
|
|
111
|
-
sqrtPriceX96AfterList,
|
|
112
|
-
initializedTicksCrossedList,
|
|
113
|
-
quoterGasEstimate: gasEstimate,
|
|
114
|
-
mixedRouteGasModel: gasModel,
|
|
115
|
-
quoteToken,
|
|
116
|
-
tradeType,
|
|
117
|
-
v3PoolProvider: this.v3PoolProvider,
|
|
118
|
-
v2PoolProvider: this.v2PoolProvider,
|
|
119
|
-
});
|
|
120
|
-
routesWithValidQuotes.push(routeWithValidQuote);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
routesWithValidQuotes,
|
|
125
|
-
candidatePools,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
exports.MixedQuoter = MixedQuoter;
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWQtcXVvdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL3F1b3RlcnMvbWl4ZWQtcXVvdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUE2RTtBQUM3RSxvREFBdUI7QUFFdkIsa0RBVTRCO0FBQzVCLHdDQU11QjtBQUd2QiwwQ0FBdUQ7QUFDdkQsd0VBQXdFO0FBQ3hFLDBFQUcwQztBQUcxQywrQ0FBMkM7QUFHM0MsTUFBYSxXQUFZLFNBQVEsd0JBQXNCO0lBT3JELFlBQ0Usa0JBQXVDLEVBQ3ZDLGNBQStCLEVBQy9CLGtCQUF1QyxFQUN2QyxjQUErQixFQUMvQixvQkFBMkMsRUFDM0MsYUFBNkIsRUFDN0IsT0FBZ0IsRUFDaEIsd0JBQTZDLEVBQzdDLHNCQUFnRDtRQUVoRCxLQUFLLENBQ0gsYUFBYSxFQUNiLE9BQU8sRUFDUCx3QkFBd0IsRUFDeEIsc0JBQXNCLENBQ3ZCLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVMsQ0FDdkIsT0FBYyxFQUNkLFFBQWUsRUFDZixTQUFvQixFQUNwQixhQUFnQztRQUVoQyxJQUFJLFNBQVMsSUFBSSxvQkFBUyxDQUFDLFdBQVcsRUFBRTtZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7U0FDMUU7UUFFRCxNQUFNLEVBQ0osY0FBYyxFQUNkLGNBQWMsRUFDZCxjQUFjLEVBQUUsd0JBQXdCLEdBQ3pDLEdBQUcsTUFB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
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
-
import { ChainId, Token, TradeType } from '@synthra-swap/sdk-core';
|
|
3
|
-
import { ITokenListProvider, ITokenProvider, ITokenValidatorProvider, IV2PoolProvider, IV2QuoteProvider, IV2SubgraphProvider } from '../../../providers';
|
|
4
|
-
import { CurrencyAmount } from '../../../util';
|
|
5
|
-
import { V2Route } from '../../router';
|
|
6
|
-
import { AlphaRouterConfig } from '../alpha-router';
|
|
7
|
-
import { V2RouteWithValidQuote } from '../entities';
|
|
8
|
-
import { CandidatePoolsBySelectionCriteria } from '../functions/get-candidate-pools';
|
|
9
|
-
import { IGasModel, IV2GasModelFactory } from '../gas-models';
|
|
10
|
-
import { BaseQuoter } from './base-quoter';
|
|
11
|
-
import { GetQuotesResult } from './model/results/get-quotes-result';
|
|
12
|
-
import { GetRoutesResult } from './model/results/get-routes-result';
|
|
13
|
-
export declare class V2Quoter extends BaseQuoter<V2Route> {
|
|
14
|
-
protected v2SubgraphProvider: IV2SubgraphProvider;
|
|
15
|
-
protected v2PoolProvider: IV2PoolProvider;
|
|
16
|
-
protected v2QuoteProvider: IV2QuoteProvider;
|
|
17
|
-
protected v2GasModelFactory: IV2GasModelFactory;
|
|
18
|
-
constructor(v2SubgraphProvider: IV2SubgraphProvider, v2PoolProvider: IV2PoolProvider, v2QuoteProvider: IV2QuoteProvider, v2GasModelFactory: IV2GasModelFactory, tokenProvider: ITokenProvider, chainId: ChainId, blockedTokenListProvider?: ITokenListProvider, tokenValidatorProvider?: ITokenValidatorProvider);
|
|
19
|
-
protected getRoutes(tokenIn: Token, tokenOut: Token, tradeType: TradeType, routingConfig: AlphaRouterConfig): Promise<GetRoutesResult<V2Route>>;
|
|
20
|
-
getQuotes(routes: V2Route[], amounts: CurrencyAmount[], percents: number[], quoteToken: Token, tradeType: TradeType, _routingConfig: AlphaRouterConfig, candidatePools?: CandidatePoolsBySelectionCriteria, _gasModel?: IGasModel<V2RouteWithValidQuote>, gasPriceWei?: BigNumber): Promise<GetQuotesResult>;
|
|
21
|
-
}
|
|
@@ -1,122 +0,0 @@
|
|
|
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.V2Quoter = void 0;
|
|
7
|
-
const sdk_core_1 = require("@synthra-swap/sdk-core");
|
|
8
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
-
const providers_1 = require("../../../providers");
|
|
10
|
-
const util_1 = require("../../../util");
|
|
11
|
-
const entities_1 = require("../entities");
|
|
12
|
-
const compute_all_routes_1 = require("../functions/compute-all-routes");
|
|
13
|
-
const get_candidate_pools_1 = require("../functions/get-candidate-pools");
|
|
14
|
-
const base_quoter_1 = require("./base-quoter");
|
|
15
|
-
class V2Quoter extends base_quoter_1.BaseQuoter {
|
|
16
|
-
constructor(v2SubgraphProvider, v2PoolProvider, v2QuoteProvider, v2GasModelFactory, tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider) {
|
|
17
|
-
super(tokenProvider, chainId, blockedTokenListProvider, tokenValidatorProvider);
|
|
18
|
-
this.v2SubgraphProvider = v2SubgraphProvider;
|
|
19
|
-
this.v2PoolProvider = v2PoolProvider;
|
|
20
|
-
this.v2QuoteProvider = v2QuoteProvider;
|
|
21
|
-
this.v2GasModelFactory = v2GasModelFactory;
|
|
22
|
-
}
|
|
23
|
-
async getRoutes(tokenIn, tokenOut, tradeType, routingConfig) {
|
|
24
|
-
// Fetch all the pools that we will consider routing via. There are thousands
|
|
25
|
-
// of pools, so we filter them to a set of candidate pools that we expect will
|
|
26
|
-
// result in good prices.
|
|
27
|
-
const { poolAccessor, candidatePools } = await (0, get_candidate_pools_1.getV2CandidatePools)({
|
|
28
|
-
tokenIn,
|
|
29
|
-
tokenOut,
|
|
30
|
-
tokenProvider: this.tokenProvider,
|
|
31
|
-
blockedTokenListProvider: this.blockedTokenListProvider,
|
|
32
|
-
poolProvider: this.v2PoolProvider,
|
|
33
|
-
routeType: tradeType,
|
|
34
|
-
subgraphProvider: this.v2SubgraphProvider,
|
|
35
|
-
routingConfig,
|
|
36
|
-
chainId: this.chainId,
|
|
37
|
-
});
|
|
38
|
-
const poolsRaw = poolAccessor.getAllPools();
|
|
39
|
-
// Drop any pools that contain tokens that can not be transferred according to the token validator.
|
|
40
|
-
const pools = await this.applyTokenValidatorToPools(poolsRaw, (token, tokenValidation) => {
|
|
41
|
-
// If there is no available validation result we assume the token is fine.
|
|
42
|
-
if (!tokenValidation) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
// Only filters out *intermediate* pools that involve tokens that we detect
|
|
46
|
-
// cant be transferred. This prevents us trying to route through tokens that may
|
|
47
|
-
// not be transferrable, but allows users to still swap those tokens if they
|
|
48
|
-
// specify.
|
|
49
|
-
if (tokenValidation == providers_1.TokenValidationResult.STF &&
|
|
50
|
-
(token.equals(tokenIn) || token.equals(tokenOut))) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
return tokenValidation == providers_1.TokenValidationResult.STF;
|
|
54
|
-
});
|
|
55
|
-
// Given all our candidate pools, compute all the possible ways to route from tokenIn to tokenOut.
|
|
56
|
-
const { maxSwapsPerPath } = routingConfig;
|
|
57
|
-
const routes = (0, compute_all_routes_1.computeAllV2Routes)(tokenIn, tokenOut, pools, maxSwapsPerPath);
|
|
58
|
-
return {
|
|
59
|
-
routes,
|
|
60
|
-
candidatePools,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
async getQuotes(routes, amounts, percents, quoteToken, tradeType, _routingConfig, candidatePools, _gasModel, gasPriceWei) {
|
|
64
|
-
util_1.log.info('Starting to get V2 quotes');
|
|
65
|
-
if (gasPriceWei === undefined) {
|
|
66
|
-
throw new Error('GasPriceWei for V2Routes is required to getQuotes');
|
|
67
|
-
}
|
|
68
|
-
if (routes.length == 0) {
|
|
69
|
-
return { routesWithValidQuotes: [], candidatePools };
|
|
70
|
-
}
|
|
71
|
-
// For all our routes, and all the fractional amounts, fetch quotes on-chain.
|
|
72
|
-
const quoteFn = tradeType == sdk_core_1.TradeType.EXACT_INPUT
|
|
73
|
-
? this.v2QuoteProvider.getQuotesManyExactIn.bind(this.v2QuoteProvider)
|
|
74
|
-
: this.v2QuoteProvider.getQuotesManyExactOut.bind(this.v2QuoteProvider);
|
|
75
|
-
const beforeQuotes = Date.now();
|
|
76
|
-
util_1.log.info(`Getting quotes for V2 for ${routes.length} routes with ${amounts.length} amounts per route.`);
|
|
77
|
-
const { routesWithQuotes } = await quoteFn(amounts, routes);
|
|
78
|
-
const v2GasModel = await this.v2GasModelFactory.buildGasModel({
|
|
79
|
-
chainId: this.chainId,
|
|
80
|
-
gasPriceWei,
|
|
81
|
-
poolProvider: this.v2PoolProvider,
|
|
82
|
-
token: quoteToken,
|
|
83
|
-
});
|
|
84
|
-
util_1.metric.putMetric('V2QuotesLoad', Date.now() - beforeQuotes, util_1.MetricLoggerUnit.Milliseconds);
|
|
85
|
-
util_1.metric.putMetric('V2QuotesFetched', (0, lodash_1.default)(routesWithQuotes)
|
|
86
|
-
.map(([, quotes]) => quotes.length)
|
|
87
|
-
.sum(), util_1.MetricLoggerUnit.Count);
|
|
88
|
-
const routesWithValidQuotes = [];
|
|
89
|
-
for (const routeWithQuote of routesWithQuotes) {
|
|
90
|
-
const [route, quotes] = routeWithQuote;
|
|
91
|
-
for (let i = 0; i < quotes.length; i++) {
|
|
92
|
-
const percent = percents[i];
|
|
93
|
-
const amountQuote = quotes[i];
|
|
94
|
-
const { quote, amount } = amountQuote;
|
|
95
|
-
if (!quote) {
|
|
96
|
-
util_1.log.debug({
|
|
97
|
-
route: (0, util_1.routeToString)(route),
|
|
98
|
-
amountQuote,
|
|
99
|
-
}, 'Dropping a null V2 quote for route.');
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
const routeWithValidQuote = new entities_1.V2RouteWithValidQuote({
|
|
103
|
-
route,
|
|
104
|
-
rawQuote: quote,
|
|
105
|
-
amount,
|
|
106
|
-
percent,
|
|
107
|
-
gasModel: v2GasModel,
|
|
108
|
-
quoteToken,
|
|
109
|
-
tradeType,
|
|
110
|
-
v2PoolProvider: this.v2PoolProvider,
|
|
111
|
-
});
|
|
112
|
-
routesWithValidQuotes.push(routeWithValidQuote);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return {
|
|
116
|
-
routesWithValidQuotes,
|
|
117
|
-
candidatePools,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
exports.V2Quoter = V2Quoter;
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjItcXVvdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL3F1b3RlcnMvdjItcXVvdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHFEQUE2RTtBQUM3RSxvREFBdUI7QUFFdkIsa0RBUTRCO0FBQzVCLHdDQU11QjtBQUd2QiwwQ0FBb0Q7QUFDcEQsd0VBQXFFO0FBQ3JFLDBFQUcwQztBQUcxQywrQ0FBMkM7QUFJM0MsTUFBYSxRQUFTLFNBQVEsd0JBQW1CO0lBTS9DLFlBQ0Usa0JBQXVDLEVBQ3ZDLGNBQStCLEVBQy9CLGVBQWlDLEVBQ2pDLGlCQUFxQyxFQUNyQyxhQUE2QixFQUM3QixPQUFnQixFQUNoQix3QkFBNkMsRUFDN0Msc0JBQWdEO1FBRWhELEtBQUssQ0FDSCxhQUFhLEVBQ2IsT0FBTyxFQUNQLHdCQUF3QixFQUN4QixzQkFBc0IsQ0FDdkIsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFDN0MsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTLENBQ3ZCLE9BQWMsRUFDZCxRQUFlLEVBQ2YsU0FBb0IsRUFDcEIsYUFBZ0M7UUFFaEMsNkVBQTZFO1FBQzdFLDhFQUE4RTtRQUM5RSx5QkFBeUI7UUFDekIsTUFBTSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUEseUNBQW1CLEVBQUM7WUFDakUsT0FBTztZQUNQLFFBQVE7WUFDUixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjtZQUN2RCxZQUFZLEVBQUUsSUFBSSxDQUFDLGNB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
|