@xspswap/smart-order-router 1.1.4 → 1.1.6
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/build/main/providers/caching/route/model/cached-routes.d.ts +2 -3
- package/build/main/providers/caching/route/model/cached-routes.js +4 -4
- package/build/main/providers/caching/route/route-caching-provider.d.ts +1 -2
- package/build/main/providers/caching/route/route-caching-provider.js +11 -6
- package/build/main/providers/caching-gas-provider.d.ts +1 -1
- package/build/main/providers/caching-gas-provider.js +1 -1
- package/build/main/providers/caching-token-list-provider.d.ts +1 -2
- package/build/main/providers/caching-token-list-provider.js +1 -2
- package/build/main/providers/caching-token-provider.d.ts +1 -2
- package/build/main/providers/caching-token-provider.js +7 -6
- package/build/main/providers/eth-estimate-gas-provider.d.ts +1 -1
- package/build/main/providers/eth-estimate-gas-provider.js +1 -1
- package/build/main/providers/multicall-uniswap-provider.d.ts +1 -1
- package/build/main/providers/multicall-uniswap-provider.js +3 -3
- package/build/main/providers/on-chain-gas-price-provider.d.ts +1 -1
- package/build/main/providers/on-chain-quote-provider.d.ts +1 -1
- package/build/main/providers/on-chain-quote-provider.js +24 -13
- package/build/main/providers/simulation-provider.d.ts +2 -2
- package/build/main/providers/simulation-provider.js +6 -6
- package/build/main/providers/swap-router-provider.d.ts +1 -2
- package/build/main/providers/swap-router-provider.js +3 -2
- package/build/main/providers/tenderly-simulation-provider.d.ts +1 -1
- package/build/main/providers/tenderly-simulation-provider.js +8 -7
- package/build/main/providers/token-provider.d.ts +9 -14
- package/build/main/providers/token-provider.js +32 -46
- package/build/main/providers/token-validator-provider.d.ts +1 -2
- package/build/main/providers/token-validator-provider.js +3 -2
- package/build/main/providers/uri-subgraph-provider.d.ts +1 -1
- package/build/main/providers/uri-subgraph-provider.js +1 -1
- package/build/main/providers/v2/caching-pool-provider.d.ts +5 -3
- package/build/main/providers/v2/caching-pool-provider.js +5 -3
- package/build/main/providers/v2/caching-subgraph-provider.d.ts +1 -1
- package/build/main/providers/v2/pool-provider.d.ts +13 -4
- package/build/main/providers/v2/pool-provider.js +12 -10
- package/build/main/providers/v2/quote-provider.js +2 -2
- package/build/main/providers/v2/static-subgraph-provider.d.ts +1 -2
- package/build/main/providers/v2/static-subgraph-provider.js +9 -21
- package/build/main/providers/v2/subgraph-provider.d.ts +1 -2
- package/build/main/providers/v2/subgraph-provider.js +1 -1
- package/build/main/providers/v2-fathom/constants.d.ts +2 -0
- package/build/main/providers/v2-fathom/constants.js +6 -0
- package/build/main/providers/v2-fathom/static-subgraph-provider.d.ts +22 -0
- package/build/main/providers/v2-fathom/static-subgraph-provider.js +169 -0
- package/build/main/providers/v2-fathom/subgraph-provider.d.ts +34 -0
- package/build/main/providers/v2-fathom/subgraph-provider.js +130 -0
- package/build/main/providers/v2-fathom/utils.d.ts +2 -0
- package/build/main/providers/v2-fathom/utils.js +14 -0
- package/build/main/providers/v3/caching-pool-provider.d.ts +5 -3
- package/build/main/providers/v3/caching-pool-provider.js +5 -3
- package/build/main/providers/v3/caching-subgraph-provider.d.ts +1 -1
- package/build/main/providers/v3/pool-provider.d.ts +5 -3
- package/build/main/providers/v3/pool-provider.js +14 -8
- package/build/main/providers/v3/static-subgraph-provider-v3-uni.d.ts +29 -0
- package/build/main/providers/v3/static-subgraph-provider-v3-uni.js +209 -0
- package/build/main/providers/v3/static-subgraph-provider.d.ts +1 -2
- package/build/main/providers/v3/static-subgraph-provider.js +43 -91
- package/build/main/providers/v3/subgraph-provider.d.ts +1 -2
- package/build/main/providers/v3/subgraph-provider.js +2 -2
- package/build/main/routers/alpha-router/alpha-router.d.ts +25 -6
- package/build/main/routers/alpha-router/alpha-router.js +100 -38
- package/build/main/routers/alpha-router/config.d.ts +1 -1
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +9 -7
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +8 -8
- package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +1 -2
- package/build/main/routers/alpha-router/functions/best-swap-route.js +1 -1
- package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +4 -3
- package/build/main/routers/alpha-router/functions/compute-all-routes.js +6 -6
- package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +7 -5
- package/build/main/routers/alpha-router/functions/get-candidate-pools.js +19 -17
- package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +1 -2
- package/build/main/routers/alpha-router/gas-models/gas-model.js +4 -4
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +4 -4
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +13 -12
- 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 +11 -11
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +4 -5
- package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +5 -3
- package/build/main/routers/alpha-router/quoters/base-quoter.js +3 -2
- package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +4 -3
- package/build/main/routers/alpha-router/quoters/mixed-quoter.js +80 -14
- package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +4 -3
- package/build/main/routers/alpha-router/quoters/v2-quoter.js +9 -4
- package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +5 -4
- package/build/main/routers/alpha-router/quoters/v3-quoter.js +9 -10
- package/build/main/routers/legacy-router/bases.d.ts +1 -2
- package/build/main/routers/legacy-router/bases.js +7 -6
- package/build/main/routers/legacy-router/legacy-router.d.ts +1 -2
- package/build/main/routers/legacy-router/legacy-router.js +5 -5
- package/build/main/routers/router.d.ts +7 -4
- package/build/main/routers/router.js +8 -8
- package/build/main/tsconfig.tsbuildinfo +1 -1
- package/build/main/util/addresses.d.ts +0 -21
- package/build/main/util/addresses.js +6 -59
- package/build/main/util/chains.d.ts +2 -11
- package/build/main/util/chains.js +18 -37
- package/build/main/util/gas-factory-helpers.d.ts +2 -3
- package/build/main/util/gas-factory-helpers.js +10 -6
- package/build/main/util/methodParameters.d.ts +2 -2
- package/build/main/util/methodParameters.js +5 -5
- package/build/main/util/protocols.d.ts +2 -0
- package/build/main/util/protocols.js +14 -2
- package/build/main/util/routes.js +19 -10
- package/build/module/providers/caching/route/model/cached-routes.d.ts +2 -3
- package/build/module/providers/caching/route/model/cached-routes.js +4 -4
- package/build/module/providers/caching/route/route-caching-provider.d.ts +1 -2
- package/build/module/providers/caching/route/route-caching-provider.js +12 -7
- package/build/module/providers/caching-gas-provider.d.ts +1 -1
- package/build/module/providers/caching-gas-provider.js +1 -1
- package/build/module/providers/caching-token-list-provider.d.ts +1 -2
- package/build/module/providers/caching-token-list-provider.js +1 -2
- package/build/module/providers/caching-token-provider.d.ts +1 -2
- package/build/module/providers/caching-token-provider.js +8 -7
- package/build/module/providers/eth-estimate-gas-provider.d.ts +1 -1
- package/build/module/providers/eth-estimate-gas-provider.js +1 -1
- package/build/module/providers/multicall-uniswap-provider.d.ts +1 -1
- package/build/module/providers/multicall-uniswap-provider.js +3 -3
- package/build/module/providers/on-chain-gas-price-provider.d.ts +1 -1
- package/build/module/providers/on-chain-quote-provider.d.ts +1 -1
- package/build/module/providers/on-chain-quote-provider.js +27 -16
- package/build/module/providers/simulation-provider.d.ts +2 -2
- package/build/module/providers/simulation-provider.js +6 -6
- package/build/module/providers/swap-router-provider.d.ts +1 -2
- package/build/module/providers/swap-router-provider.js +3 -2
- package/build/module/providers/tenderly-simulation-provider.d.ts +1 -1
- package/build/module/providers/tenderly-simulation-provider.js +8 -7
- package/build/module/providers/token-provider.d.ts +9 -14
- package/build/module/providers/token-provider.js +20 -33
- package/build/module/providers/token-validator-provider.d.ts +1 -2
- package/build/module/providers/token-validator-provider.js +4 -3
- package/build/module/providers/uri-subgraph-provider.d.ts +1 -1
- package/build/module/providers/uri-subgraph-provider.js +1 -1
- package/build/module/providers/v2/caching-pool-provider.d.ts +5 -3
- package/build/module/providers/v2/caching-pool-provider.js +5 -3
- package/build/module/providers/v2/caching-subgraph-provider.d.ts +1 -1
- package/build/module/providers/v2/pool-provider.d.ts +13 -4
- package/build/module/providers/v2/pool-provider.js +12 -10
- package/build/module/providers/v2/quote-provider.js +2 -2
- package/build/module/providers/v2/static-subgraph-provider.d.ts +1 -2
- package/build/module/providers/v2/static-subgraph-provider.js +8 -20
- package/build/module/providers/v2/subgraph-provider.d.ts +1 -2
- package/build/module/providers/v2/subgraph-provider.js +1 -1
- package/build/module/providers/v2-fathom/constants.d.ts +2 -0
- package/build/module/providers/v2-fathom/constants.js +3 -0
- package/build/module/providers/v2-fathom/static-subgraph-provider.d.ts +22 -0
- package/build/module/providers/v2-fathom/static-subgraph-provider.js +162 -0
- package/build/module/providers/v2-fathom/subgraph-provider.d.ts +34 -0
- package/build/module/providers/v2-fathom/subgraph-provider.js +131 -0
- package/build/module/providers/v2-fathom/utils.d.ts +2 -0
- package/build/module/providers/v2-fathom/utils.js +10 -0
- package/build/module/providers/v3/caching-pool-provider.d.ts +5 -3
- package/build/module/providers/v3/caching-pool-provider.js +5 -3
- package/build/module/providers/v3/caching-subgraph-provider.d.ts +1 -1
- package/build/module/providers/v3/pool-provider.d.ts +5 -3
- package/build/module/providers/v3/pool-provider.js +14 -8
- package/build/module/providers/v3/static-subgraph-provider-v3-uni.d.ts +29 -0
- package/build/module/providers/v3/static-subgraph-provider-v3-uni.js +202 -0
- package/build/module/providers/v3/static-subgraph-provider.d.ts +1 -2
- package/build/module/providers/v3/static-subgraph-provider.js +42 -90
- package/build/module/providers/v3/subgraph-provider.d.ts +1 -2
- package/build/module/providers/v3/subgraph-provider.js +2 -2
- package/build/module/routers/alpha-router/alpha-router.d.ts +25 -6
- package/build/module/routers/alpha-router/alpha-router.js +102 -40
- package/build/module/routers/alpha-router/config.d.ts +1 -1
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +9 -7
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +8 -8
- package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +1 -2
- package/build/module/routers/alpha-router/functions/best-swap-route.js +1 -1
- package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +4 -3
- package/build/module/routers/alpha-router/functions/compute-all-routes.js +6 -6
- package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +7 -5
- package/build/module/routers/alpha-router/functions/get-candidate-pools.js +21 -19
- package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +1 -2
- package/build/module/routers/alpha-router/gas-models/gas-model.js +3 -3
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +4 -4
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +14 -13
- 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 -8
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +5 -6
- package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +5 -3
- package/build/module/routers/alpha-router/quoters/base-quoter.js +3 -2
- package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +4 -3
- package/build/module/routers/alpha-router/quoters/mixed-quoter.js +81 -15
- package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +4 -3
- package/build/module/routers/alpha-router/quoters/v2-quoter.js +9 -4
- package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +5 -4
- package/build/module/routers/alpha-router/quoters/v3-quoter.js +9 -10
- package/build/module/routers/legacy-router/bases.d.ts +1 -2
- package/build/module/routers/legacy-router/bases.js +8 -7
- package/build/module/routers/legacy-router/legacy-router.d.ts +1 -2
- package/build/module/routers/legacy-router/legacy-router.js +6 -6
- package/build/module/routers/router.d.ts +7 -4
- package/build/module/routers/router.js +8 -8
- package/build/module/tsconfig.module.tsbuildinfo +1 -1
- package/build/module/util/addresses.d.ts +0 -21
- package/build/module/util/addresses.js +3 -66
- package/build/module/util/chains.d.ts +2 -11
- package/build/module/util/chains.js +13 -32
- package/build/module/util/gas-factory-helpers.d.ts +2 -3
- package/build/module/util/gas-factory-helpers.js +12 -8
- package/build/module/util/methodParameters.d.ts +2 -2
- package/build/module/util/methodParameters.js +7 -7
- package/build/module/util/protocols.d.ts +2 -0
- package/build/module/util/protocols.js +11 -1
- package/build/module/util/routes.js +20 -11
- package/package.json +1 -1
|
@@ -0,0 +1,130 @@
|
|
|
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.V2SubgraphProvider = void 0;
|
|
7
|
+
const async_retry_1 = __importDefault(require("async-retry"));
|
|
8
|
+
const await_timeout_1 = __importDefault(require("await-timeout"));
|
|
9
|
+
const graphql_request_1 = require("graphql-request");
|
|
10
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
11
|
+
const log_1 = require("../../util/log");
|
|
12
|
+
const threshold = 0.025;
|
|
13
|
+
const PAGE_SIZE = 1000; // 1k is max possible query size from subgraph.
|
|
14
|
+
class V2SubgraphProvider {
|
|
15
|
+
constructor(chainId, subgraphUrl, retries = 2, timeout = 360000, rollback = true, pageSize = PAGE_SIZE) {
|
|
16
|
+
this.chainId = chainId;
|
|
17
|
+
this.subgraphUrl = subgraphUrl;
|
|
18
|
+
this.retries = retries;
|
|
19
|
+
this.timeout = timeout;
|
|
20
|
+
this.rollback = rollback;
|
|
21
|
+
this.pageSize = pageSize;
|
|
22
|
+
if (!subgraphUrl) {
|
|
23
|
+
throw new Error(`No subgraph url for chain id: ${this.chainId}`);
|
|
24
|
+
}
|
|
25
|
+
this.client = new graphql_request_1.GraphQLClient(this.subgraphUrl);
|
|
26
|
+
}
|
|
27
|
+
async getPools(_tokenIn, _tokenOut, providerConfig) {
|
|
28
|
+
let blockNumber = (providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber)
|
|
29
|
+
? await providerConfig.blockNumber
|
|
30
|
+
: undefined;
|
|
31
|
+
// Due to limitations with the Subgraph API this is the only way to parameterize the query.
|
|
32
|
+
const query2 = (0, graphql_request_1.gql) `
|
|
33
|
+
query getPools($pageSize: Int!, $id: String) {
|
|
34
|
+
pairs(
|
|
35
|
+
first: $pageSize
|
|
36
|
+
${blockNumber ? `block: { number: ${blockNumber} }` : ``}
|
|
37
|
+
where: { id_gt: $id }
|
|
38
|
+
) {
|
|
39
|
+
id
|
|
40
|
+
token0 { id, symbol }
|
|
41
|
+
token1 { id, symbol }
|
|
42
|
+
totalSupply
|
|
43
|
+
trackedReserveETH
|
|
44
|
+
reserveUSD
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
`;
|
|
48
|
+
let pools = [];
|
|
49
|
+
log_1.log.info(`Getting V2 pools from the subgraph with page size ${this.pageSize}${(providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber)
|
|
50
|
+
? ` as of block ${providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber}`
|
|
51
|
+
: ''}.`);
|
|
52
|
+
await (0, async_retry_1.default)(async () => {
|
|
53
|
+
const timeout = new await_timeout_1.default();
|
|
54
|
+
const getPools = async () => {
|
|
55
|
+
let lastId = '';
|
|
56
|
+
let pairs = [];
|
|
57
|
+
let pairsPage = [];
|
|
58
|
+
do {
|
|
59
|
+
await (0, async_retry_1.default)(async () => {
|
|
60
|
+
const poolsResult = await this.client.request(query2, {
|
|
61
|
+
pageSize: this.pageSize,
|
|
62
|
+
id: lastId,
|
|
63
|
+
});
|
|
64
|
+
pairsPage = poolsResult.pairs;
|
|
65
|
+
pairs = pairs.concat(pairsPage);
|
|
66
|
+
lastId = pairs[pairs.length - 1].id;
|
|
67
|
+
}, {
|
|
68
|
+
retries: this.retries,
|
|
69
|
+
onRetry: (err, retry) => {
|
|
70
|
+
pools = [];
|
|
71
|
+
log_1.log.info({ err }, `Failed request for page of pools from subgraph. Retry attempt: ${retry}`);
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
} while (pairsPage.length > 0);
|
|
75
|
+
return pairs;
|
|
76
|
+
};
|
|
77
|
+
/* eslint-disable no-useless-catch */
|
|
78
|
+
try {
|
|
79
|
+
const getPoolsPromise = getPools();
|
|
80
|
+
const timerPromise = timeout.set(this.timeout).then(() => {
|
|
81
|
+
throw new Error(`Timed out getting pools from subgraph: ${this.timeout}`);
|
|
82
|
+
});
|
|
83
|
+
pools = await Promise.race([getPoolsPromise, timerPromise]);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
timeout.clear();
|
|
91
|
+
}
|
|
92
|
+
/* eslint-enable no-useless-catch */
|
|
93
|
+
}, {
|
|
94
|
+
retries: this.retries,
|
|
95
|
+
onRetry: (err, retry) => {
|
|
96
|
+
if (this.rollback &&
|
|
97
|
+
blockNumber &&
|
|
98
|
+
lodash_1.default.includes(err.message, 'indexed up to')) {
|
|
99
|
+
blockNumber = blockNumber - 10;
|
|
100
|
+
log_1.log.info(`Detected subgraph indexing error. Rolled back block number to: ${blockNumber}`);
|
|
101
|
+
}
|
|
102
|
+
pools = [];
|
|
103
|
+
log_1.log.info({ err }, `Failed to get pools from subgraph. Retry attempt: ${retry}`);
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
// Filter pools that have tracked reserve ETH less than threshold.
|
|
107
|
+
// trackedReserveETH filters pools that do not involve a pool from this allowlist:
|
|
108
|
+
// https://github.com/Uniswap/v2-subgraph/blob/7c82235cad7aee4cfce8ea82f0030af3d224833e/src/mappings/pricing.ts#L43
|
|
109
|
+
// Which helps filter pools with manipulated prices/liquidity.
|
|
110
|
+
// TODO: Remove. Temporary fix to ensure tokens without trackedReserveETH are in the list.
|
|
111
|
+
const FEI = '0x956f47f50a910163d8bf957cf5846d573e7f87ca';
|
|
112
|
+
const poolsSanitized = pools
|
|
113
|
+
.filter((pool) => {
|
|
114
|
+
return (pool.token0.id == FEI ||
|
|
115
|
+
pool.token1.id == FEI ||
|
|
116
|
+
parseFloat(pool.trackedReserveETH) > threshold);
|
|
117
|
+
})
|
|
118
|
+
.map((pool) => {
|
|
119
|
+
return Object.assign(Object.assign({}, pool), { id: pool.id.toLowerCase(), token0: {
|
|
120
|
+
id: pool.token0.id.toLowerCase(),
|
|
121
|
+
}, token1: {
|
|
122
|
+
id: pool.token1.id.toLowerCase(),
|
|
123
|
+
}, supply: parseFloat(pool.totalSupply), reserve: parseFloat(pool.trackedReserveETH), reserveUSD: parseFloat(pool.reserveUSD) });
|
|
124
|
+
});
|
|
125
|
+
log_1.log.info(`Got ${pools.length} V2 pools from the subgraph. ${poolsSanitized.length} after filtering`);
|
|
126
|
+
return poolsSanitized;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.V2SubgraphProvider = V2SubgraphProvider;
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViZ3JhcGgtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3YyLWZhdGhvbS9zdWJncmFwaC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw4REFBZ0M7QUFDaEMsa0VBQW9DO0FBQ3BDLHFEQUFxRDtBQUNyRCxvREFBdUI7QUFFdkIsd0NBQXFDO0FBK0JyQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFFeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsK0NBQStDO0FBZ0J2RSxNQUFhLGtCQUFrQjtJQUc3QixZQUNVLE9BQWdCLEVBQ2hCLFdBQW1CLEVBQ25CLFVBQVUsQ0FBQyxFQUNYLFVBQVUsTUFBTSxFQUNoQixXQUFXLElBQUksRUFDZixXQUFXLFNBQVM7UUFMcEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFJO1FBQ1gsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFPO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUU1QixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLCtCQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUNuQixRQUFnQixFQUNoQixTQUFpQixFQUNqQixjQUErQjtRQUUvQixJQUFJLFdBQVcsR0FBRyxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxXQUFXO1lBQzNDLENBQUMsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxXQUFXO1lBQ2xDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCwyRkFBMkY7UUFDM0YsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBRyxFQUFBOzs7O1lBSVYsV0FBVyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7Ozs7Ozs7O0tBVzdELENBQUM7UUFFRixJQUFJLEtBQUssR0FBd0IsRUFBRSxDQUFDO1FBRXBDLFNBQUcsQ0FBQyxJQUFJLENBQ04scURBQXFELElBQUksQ0FBQyxRQUFRLEdBQ2hFLENBQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFdBQVc7WUFDekIsQ0FBQyxDQUFDLGdCQUFnQixjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsV0FBVyxFQUFFO1lBQy9DLENBQUMsQ0FBQyxFQUNOLEdBQUcsQ0FDSixDQUFDO1FBRUYsTUFBTSxJQUFBLHFCQUFLLEVBQ1QsS0FBSyxJQUFJLEVBQUU7WUFDVCxNQUFNLE9BQU8sR0FBRyxJQUFJLHVCQUFPLEVBQUUsQ0FBQztZQUU5QixNQUFNLFFBQVEsR0FBRyxLQUFLLElBQWtDLEVBQUU7Z0JBQ3hELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxLQUFLLEdBQXdCLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxTQUFTLEdBQXdCLEVBQUUsQ0FBQztnQkFFeEMsR0FBRztvQkFDRCxNQUFNLElBQUEscUJBQUssRUFDVCxLQUFLLElBQUksRUFBRTt3QkFDVCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUUxQyxNQUFNLEVBQUU7NEJBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFROzRCQUN2QixFQUFFLEVBQUUsTUFBTTt5QkFDWCxDQUFDLENBQUM7d0JBRUgsU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7d0JBRTlCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNoQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDO29CQUN2QyxDQUFDLEVBQ0Q7d0JBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO3dCQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7NEJBQ3RCLEtBQUssR0FBRyxFQUFFLENBQUM7NEJBQ1gsU0FBRyxDQUFDLElBQUksQ0FDTixFQUFFLEdBQUcsRUFBRSxFQUNQLGtFQUFrRSxLQUFLLEVBQUUsQ0FDMUUsQ0FBQzt3QkFDSixDQUFDO3FCQUNGLENBQ0YsQ0FBQztpQkFDSCxRQUFRLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUUvQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQztZQUVGLHFDQUFxQztZQUNyQyxJQUFJO2dCQUNGLE1BQU0sZUFBZSxHQUFHLFFBQVEsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUN2RCxNQUFNLElBQUksS0FBSyxDQUNiLDBDQUEwQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQ3pELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPO2FBQ1I7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixNQUFNLEdBQUcsQ0FBQzthQUNYO29CQUFTO2dCQUNSLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNqQjtZQUNELG9DQUFvQztRQUN0QyxDQUFDLEVBQ0Q7WUFDRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN0QixJQUNFLElBQUksQ0FBQyxRQUFRO29CQUNiLFdBQVc7b0JBQ1gsZ0JBQUMsQ0FBQyxRQUFRLENBQUUsR0FBc0IsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEVBQzVEO29CQUNBLFdBQVcsR0FBRyxXQUFXLEdBQUcsRUFBRSxDQUFDO29CQUMvQixTQUFHLENBQUMsSUFBSSxDQUNOLGtFQUFrRSxXQUFXLEVBQUUsQ0FDaEYsQ0FBQztpQkFDSDtnQkFDRCxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNYLFNBQUcsQ0FBQyxJQUFJLENBQ04sRUFBRSxHQUFHLEVBQUUsRUFDUCxxREFBcUQsS0FBSyxFQUFFLENBQzdELENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FDRixDQUFDO1FBRUYsa0VBQWtFO1FBQ2xFLGtGQUFrRjtRQUNsRixtSEFBbUg7UUFDbkgsOERBQThEO1FBRTlELDBGQUEwRjtRQUMxRixNQUFNLEdBQUcsR0FBRyw0Q0FBNEMsQ0FBQztRQUV6RCxNQUFNLGNBQWMsR0FBcUIsS0FBSzthQUMzQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNmLE9BQU8sQ0FDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxHQUFHO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxHQUFHO2dCQUNyQixVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsU0FBUyxDQUMvQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDWix1Q0FDSyxJQUFJLEtBQ1AsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQ3pCLE1BQU0sRUFBRTtvQkFDTixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUNqQyxFQUNELE1BQU0sRUFBRTtvQkFDTixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUNqQyxFQUNELE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUNwQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUMzQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFDdkM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVMLFNBQUcsQ0FBQyxJQUFJLENBQ04sT0FBTyxLQUFLLENBQUMsTUFBTSxnQ0FBZ0MsY0FBYyxDQUFDLE1BQU0sa0JBQWtCLENBQzNGLENBQUM7UUFFRixPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUExS0QsZ0RBMEtDIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getFathomPoolAddress = void 0;
|
|
4
|
+
const address_1 = require("@ethersproject/address");
|
|
5
|
+
const solidity_1 = require("@ethersproject/solidity");
|
|
6
|
+
const constants_1 = require("./constants");
|
|
7
|
+
const getFathomPoolAddress = (tokenA, tokenB) => {
|
|
8
|
+
const [token0, token1] = tokenA.sortsBefore(tokenB)
|
|
9
|
+
? [tokenA, tokenB]
|
|
10
|
+
: [tokenB, tokenA];
|
|
11
|
+
return (0, address_1.getCreate2Address)(constants_1.FATHOM_FACTORY_ADDRESS, (0, solidity_1.keccak256)(['bytes'], [(0, solidity_1.pack)(['address', 'address'], [token0.address, token1.address])]), constants_1.FATHOM_INIT_CODE_HASH);
|
|
12
|
+
};
|
|
13
|
+
exports.getFathomPoolAddress = getFathomPoolAddress;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3YyLWZhdGhvbS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFBMkQ7QUFDM0Qsc0RBQTBEO0FBRzFELDJDQUE0RTtBQUVyRSxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBYSxFQUFFLE1BQWEsRUFBRSxFQUFFO0lBQ25FLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFckIsT0FBTyxJQUFBLDJCQUFpQixFQUN0QixrQ0FBc0IsRUFDdEIsSUFBQSxvQkFBUyxFQUNQLENBQUMsT0FBTyxDQUFDLEVBQ1QsQ0FBQyxJQUFBLGVBQUksRUFBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDakUsRUFDRCxpQ0FBcUIsQ0FDdEIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQWJXLFFBQUEsb0JBQW9CLHdCQWEvQiJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Protocol } from '@x-swap-protocol/router-sdk';
|
|
2
|
+
import { ChainId, Token } from '@x-swap-protocol/sdk-core';
|
|
2
3
|
import { FeeAmount, Pool } from '@x-swap-protocol/v3-sdk';
|
|
3
|
-
import { ChainId } from '../../util/chains';
|
|
4
4
|
import { ICache } from './../cache';
|
|
5
5
|
import { ProviderConfig } from './../provider';
|
|
6
6
|
import { IV3PoolProvider, V3PoolAccessor } from './pool-provider';
|
|
@@ -13,17 +13,19 @@ import { IV3PoolProvider, V3PoolAccessor } from './pool-provider';
|
|
|
13
13
|
* @class CachingV3PoolProvider
|
|
14
14
|
*/
|
|
15
15
|
export declare class CachingV3PoolProvider implements IV3PoolProvider {
|
|
16
|
+
protected protocol: Protocol;
|
|
16
17
|
protected chainId: ChainId;
|
|
17
18
|
protected poolProvider: IV3PoolProvider;
|
|
18
19
|
private cache;
|
|
19
20
|
private POOL_KEY;
|
|
20
21
|
/**
|
|
21
22
|
* Creates an instance of CachingV3PoolProvider.
|
|
23
|
+
* @param protocol Protocol V3 or UNI_V3
|
|
22
24
|
* @param chainId The chain id to use.
|
|
23
25
|
* @param poolProvider The provider to use to get the pools when not in the cache.
|
|
24
26
|
* @param cache Cache instance to hold cached pools.
|
|
25
27
|
*/
|
|
26
|
-
constructor(chainId: ChainId, poolProvider: IV3PoolProvider, cache: ICache<Pool>);
|
|
28
|
+
constructor(protocol: Protocol, chainId: ChainId, poolProvider: IV3PoolProvider, cache: ICache<Pool>);
|
|
27
29
|
getPools(tokenPairs: [Token, Token, FeeAmount][], providerConfig?: ProviderConfig): Promise<V3PoolAccessor>;
|
|
28
30
|
getPoolAddress(tokenA: Token, tokenB: Token, feeAmount: FeeAmount): {
|
|
29
31
|
poolAddress: string;
|
|
@@ -17,15 +17,17 @@ const log_1 = require("../../util/log");
|
|
|
17
17
|
class CachingV3PoolProvider {
|
|
18
18
|
/**
|
|
19
19
|
* Creates an instance of CachingV3PoolProvider.
|
|
20
|
+
* @param protocol Protocol V3 or UNI_V3
|
|
20
21
|
* @param chainId The chain id to use.
|
|
21
22
|
* @param poolProvider The provider to use to get the pools when not in the cache.
|
|
22
23
|
* @param cache Cache instance to hold cached pools.
|
|
23
24
|
*/
|
|
24
|
-
constructor(chainId, poolProvider, cache) {
|
|
25
|
+
constructor(protocol, chainId, poolProvider, cache) {
|
|
26
|
+
this.protocol = protocol;
|
|
25
27
|
this.chainId = chainId;
|
|
26
28
|
this.poolProvider = poolProvider;
|
|
27
29
|
this.cache = cache;
|
|
28
|
-
this.POOL_KEY = (chainId, address) => `pool-${chainId}-${address}`;
|
|
30
|
+
this.POOL_KEY = (chainId, address) => `pool-${this.protocol}-${chainId}-${address}`;
|
|
29
31
|
}
|
|
30
32
|
async getPools(tokenPairs, providerConfig) {
|
|
31
33
|
const poolAddressSet = new Set();
|
|
@@ -74,4 +76,4 @@ class CachingV3PoolProvider {
|
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
exports.CachingV3PoolProvider = CachingV3PoolProvider;
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGluZy1wb29sLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy92My9jYWNoaW5nLXBvb2wtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0Esb0RBQXVCO0FBRXZCLHdDQUFxQztBQU1yQzs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxxQkFBcUI7SUFJaEM7Ozs7OztPQU1HO0lBQ0gsWUFDWSxRQUFrQixFQUNsQixPQUFnQixFQUNoQixZQUE2QixFQUMvQixLQUFtQjtRQUhqQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQy9CLFVBQUssR0FBTCxLQUFLLENBQWM7UUFkckIsYUFBUSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxPQUFlLEVBQUUsRUFBRSxDQUN2RCxRQUFRLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBYzdDLENBQUM7SUFFRyxLQUFLLENBQUMsUUFBUSxDQUNuQixVQUF1QyxFQUN2QyxjQUErQjtRQUUvQixNQUFNLGNBQWMsR0FBZ0IsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN0RCxNQUFNLG9CQUFvQixHQUFxQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxtQkFBbUIsR0FBYSxFQUFFLENBQUM7UUFDekMsTUFBTSxpQkFBaUIsR0FBb0MsRUFBRSxDQUFDO1FBRTlELEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksVUFBVSxFQUFFO1lBQ3BELE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQ3pELE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxDQUNWLENBQUM7WUFFRixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FB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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Token } from '@x-swap-protocol/sdk-core';
|
|
1
|
+
import { FactoryConfig, Token } from '@x-swap-protocol/sdk-core';
|
|
2
|
+
import { ChainId } from '@x-swap-protocol/sdk-core';
|
|
2
3
|
import { FeeAmount, Pool } from '@x-swap-protocol/v3-sdk';
|
|
3
4
|
import { Options as RetryOptions } from 'async-retry';
|
|
4
|
-
import { ChainId } from '../../util';
|
|
5
5
|
import { IMulticallProvider } from '../multicall-provider';
|
|
6
6
|
import { ProviderConfig } from '../provider';
|
|
7
7
|
/**
|
|
@@ -42,15 +42,17 @@ export type V3PoolRetryOptions = RetryOptions;
|
|
|
42
42
|
export declare class V3PoolProvider implements IV3PoolProvider {
|
|
43
43
|
protected chainId: ChainId;
|
|
44
44
|
protected multicall2Provider: IMulticallProvider;
|
|
45
|
+
protected factory?: FactoryConfig | undefined;
|
|
45
46
|
protected retryOptions: V3PoolRetryOptions;
|
|
46
47
|
private POOL_ADDRESS_CACHE;
|
|
47
48
|
/**
|
|
48
49
|
* Creates an instance of V3PoolProvider.
|
|
49
50
|
* @param chainId The chain id to use.
|
|
50
51
|
* @param multicall2Provider The multicall provider to use to get the pools.
|
|
52
|
+
* @param {FactoryConfig} [factory] specific factory.
|
|
51
53
|
* @param retryOptions The retry options for each call to the multicall.
|
|
52
54
|
*/
|
|
53
|
-
constructor(chainId: ChainId, multicall2Provider: IMulticallProvider, retryOptions?: V3PoolRetryOptions);
|
|
55
|
+
constructor(chainId: ChainId, multicall2Provider: IMulticallProvider, factory?: FactoryConfig | undefined, retryOptions?: V3PoolRetryOptions);
|
|
54
56
|
getPools(tokenPairs: [Token, Token, FeeAmount][], providerConfig?: ProviderConfig): Promise<V3PoolAccessor>;
|
|
55
57
|
getPoolAddress(tokenA: Token, tokenB: Token, feeAmount: FeeAmount): {
|
|
56
58
|
poolAddress: string;
|
|
@@ -4,28 +4,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.V3PoolProvider = void 0;
|
|
7
|
+
const sdk_core_1 = require("@x-swap-protocol/sdk-core");
|
|
7
8
|
const v3_sdk_1 = require("@x-swap-protocol/v3-sdk");
|
|
9
|
+
const v3_sdk_2 = require("@x-swap-protocol/v3-sdk");
|
|
8
10
|
const async_retry_1 = __importDefault(require("async-retry"));
|
|
9
11
|
const lodash_1 = __importDefault(require("lodash"));
|
|
10
12
|
const IUniswapV3PoolState__factory_1 = require("../../types/v3/factories/IUniswapV3PoolState__factory");
|
|
11
|
-
const addresses_1 = require("../../util/addresses");
|
|
12
13
|
const log_1 = require("../../util/log");
|
|
13
14
|
const routes_1 = require("../../util/routes");
|
|
14
|
-
const addresses_2 = require("../../util/addresses");
|
|
15
15
|
class V3PoolProvider {
|
|
16
16
|
/**
|
|
17
17
|
* Creates an instance of V3PoolProvider.
|
|
18
18
|
* @param chainId The chain id to use.
|
|
19
19
|
* @param multicall2Provider The multicall provider to use to get the pools.
|
|
20
|
+
* @param {FactoryConfig} [factory] specific factory.
|
|
20
21
|
* @param retryOptions The retry options for each call to the multicall.
|
|
21
22
|
*/
|
|
22
|
-
constructor(chainId, multicall2Provider, retryOptions = {
|
|
23
|
+
constructor(chainId, multicall2Provider, factory, retryOptions = {
|
|
23
24
|
retries: 2,
|
|
24
25
|
minTimeout: 50,
|
|
25
26
|
maxTimeout: 500,
|
|
26
27
|
}) {
|
|
27
28
|
this.chainId = chainId;
|
|
28
29
|
this.multicall2Provider = multicall2Provider;
|
|
30
|
+
this.factory = factory;
|
|
29
31
|
this.retryOptions = retryOptions;
|
|
30
32
|
// Computing pool addresses is slow as it requires hashing, encoding etc.
|
|
31
33
|
// Addresses never change so can always be cached.
|
|
@@ -69,7 +71,7 @@ class V3PoolProvider {
|
|
|
69
71
|
const [token0, token1, fee] = sortedTokenPairs[i];
|
|
70
72
|
const slot0 = slot0Result.result;
|
|
71
73
|
const liquidity = liquidityResult.result[0];
|
|
72
|
-
const pool = new v3_sdk_1.Pool(token0, token1, fee, slot0.sqrtPriceX96.toString(), liquidity.toString(), slot0.tick);
|
|
74
|
+
const pool = new v3_sdk_1.Pool(token0, token1, fee, slot0.sqrtPriceX96.toString(), liquidity.toString(), slot0.tick, undefined, this.factory);
|
|
73
75
|
const poolAddress = sortedPoolAddresses[i];
|
|
74
76
|
poolAddressToPool[poolAddress] = pool;
|
|
75
77
|
}
|
|
@@ -93,17 +95,21 @@ class V3PoolProvider {
|
|
|
93
95
|
const [token0, token1] = tokenA.sortsBefore(tokenB)
|
|
94
96
|
? [tokenA, tokenB]
|
|
95
97
|
: [tokenB, tokenA];
|
|
96
|
-
const cacheKey = `${this.chainId}/${token0.address}/${token1.address}/${feeAmount}`;
|
|
98
|
+
const cacheKey = `${this.chainId}/${this.factory ? 'UniV3' : 'XSwap'}/${token0.address}/${token1.address}/${feeAmount}`;
|
|
97
99
|
const cachedAddress = this.POOL_ADDRESS_CACHE[cacheKey];
|
|
98
100
|
if (cachedAddress) {
|
|
99
101
|
return { poolAddress: cachedAddress, token0, token1 };
|
|
100
102
|
}
|
|
101
103
|
const poolAddress = (0, v3_sdk_1.computePoolAddress)({
|
|
102
|
-
factoryAddress:
|
|
104
|
+
factoryAddress: this.factory
|
|
105
|
+
? this.factory.address
|
|
106
|
+
: sdk_core_1.V3_CORE_FACTORY_ADDRESSES[this.chainId],
|
|
103
107
|
tokenA: token0,
|
|
104
108
|
tokenB: token1,
|
|
105
109
|
fee: feeAmount,
|
|
106
|
-
initCodeHashManualOverride:
|
|
110
|
+
initCodeHashManualOverride: this.factory
|
|
111
|
+
? this.factory.initCode
|
|
112
|
+
: v3_sdk_2.POOL_INIT_CODE_HASH,
|
|
107
113
|
});
|
|
108
114
|
this.POOL_ADDRESS_CACHE[cacheKey] = poolAddress;
|
|
109
115
|
return { poolAddress, token0, token1 };
|
|
@@ -122,4 +128,4 @@ class V3PoolProvider {
|
|
|
122
128
|
}
|
|
123
129
|
}
|
|
124
130
|
exports.V3PoolProvider = V3PoolProvider;
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvdjMvcG9vbC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSx3REFBK0U7QUFDL0Usb0RBQThFO0FBQzlFLG9EQUE4RDtBQUM5RCw4REFBNkQ7QUFDN0Qsb0RBQXVCO0FBRXZCLHdHQUFxRztBQUNyRyx3Q0FBcUM7QUFDckMsOENBQWlEO0FBOERqRCxNQUFhLGNBQWM7SUFLekI7Ozs7OztPQU1HO0lBQ0gsWUFDWSxPQUFnQixFQUNoQixrQkFBc0MsRUFDdEMsT0FBdUIsRUFDdkIsZUFBbUM7UUFDM0MsT0FBTyxFQUFFLENBQUM7UUFDVixVQUFVLEVBQUUsRUFBRTtRQUNkLFVBQVUsRUFBRSxHQUFHO0tBQ2hCO1FBUFMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLGlCQUFZLEdBQVosWUFBWSxDQUlyQjtRQW5CSCx5RUFBeUU7UUFDekUsa0RBQWtEO1FBQzFDLHVCQUFrQixHQUE4QixFQUFFLENBQUM7SUFrQnhELENBQUM7SUFFRyxLQUFLLENBQUMsUUFBUSxDQUNuQixVQUF1QyxFQUN2QyxjQUErQjtRQUUvQixNQUFNLGNBQWMsR0FBZ0IsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN0RCxNQUFNLGdCQUFnQixHQUFxQyxFQUFFLENBQUM7UUFDOUQsTUFBTSxtQkFBbUIsR0FBYSxFQUFFLENBQUM7UUFFekMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7WUFDbEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBRTlDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQ3pELE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxDQUNWLENBQUM7WUFFRixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ25DLFNBQVM7YUFDVjtZQUVELGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ25ELG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN2QztRQUVELFNBQUcsQ0FBQyxLQUFLLENBQ1Asd0JBQXdCLFVBQVUsQ0FBQyxNQUFNLGlDQUFpQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQ2hHLENBQUM7UUFFRixNQUFNLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3pELElBQUksQ0FBQyxZQUFZLENBQVMsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQztZQUN2RSxJQUFJLENBQUMsWUFBWSxDQUNmLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsY0FBYyxDQUNmO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsU0FBRyxDQUFDLElBQUksQ0FDTixnQ0FBZ0MsY0FBYyxDQUFDLElBQUksVUFDakQsQ0FBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsV0FBVztZQUN6QixDQUFDLENBQUMsZ0JBQWdCLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxXQUFXLEdBQUc7WUFDaEQsQ0FBQyxDQUFDLEVBQ04sRUFBRSxDQUNILENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFvQyxFQUFFLENBQUM7UUFFOUQsTUFBTSxZQUFZLEdBQWdDLEVBQUUsQ0FBQztRQUVyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU1QyxzRUFBc0U7WUFDdEUsSUFDRSxDQUFDLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sQ0FBQTtnQkFDckIsQ0FBQyxDQUFBLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxPQUFPLENBQUE7Z0JBQ3pCLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDckM7Z0JBQ0EsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFFLENBQUM7Z0JBQ25ELFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRXpDLFNBQVM7YUFDVjtZQUVELE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBRSxDQUFDO1lBQ25ELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU1QyxNQUFNLElBQUksR0FBRyxJQUFJLGFBQUksQ0FDbkIsTUFBTSxFQUNOLE1BQU0sRUFDTixHQUFHLEVBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFDN0IsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUNwQixLQUFLLENBQUMsSUFBSSxFQUNWLFNBQVMsRUFDVCxJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7WUFFRixNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUUsQ0FBQztZQUU1QyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDdkM7UUFFRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLFNBQUcsQ0FBQyxJQUFJLENBQ047Z0JBQ0UsWUFBWSxFQUFFLGdCQUFDLENBQUMsR0FBRyxDQUNqQixZQUFZLEVBQ1osQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUN4QixHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQ3REO2FBQ0YsRUFDRCxHQUFHLFlBQVksQ0FBQyxNQUFNLDRFQUE0RSxDQUNuRyxDQUFDO1NBQ0g7UUFFRCxNQUFNLFFBQVEsR0FBRyxnQkFBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUscUJBQVksQ0FBQyxDQUFDO1FBRXZFLFNBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLFFBQVEsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO1FBRWhFLE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FDUCxNQUFhLEVBQ2IsTUFBYSxFQUNiLFNBQW9CLEVBQ0YsRUFBRTtnQkFDcEIsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdkUsT0FBTyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFlLEVBQW9CLEVBQUUsQ0FDdEQsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1lBQzVCLFdBQVcsRUFBRSxHQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1NBQzVELENBQUM7SUFDSixDQUFDO0lBRU0sY0FBYyxDQUNuQixNQUFhLEVBQ2IsTUFBYSxFQUNiLFNBQW9CO1FBRXBCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFckIsTUFBTSxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUNsRSxNQUFNLENBQUMsT0FDVCxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7UUFFbEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhELElBQUksYUFBYSxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztTQUN2RDtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsMkJBQWtCLEVBQUM7WUFDckMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2dCQUN0QixDQUFDLENBQUMsb0NBQXlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRTtZQUM1QyxNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxNQUFNO1lBQ2QsR0FBRyxFQUFFLFNBQVM7WUFDZCwwQkFBMEIsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFDdkIsQ0FBQyxDQUFDLDRCQUFtQjtTQUN4QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUN4QixhQUF1QixFQUN2QixZQUFvQixFQUNwQixjQUErQjtRQUUvQixNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sSUFBQSxxQkFBSyxFQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3RELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1DQUFtQyxDQUdoRTtnQkFDQSxTQUFTLEVBQUUsYUFBYTtnQkFDeEIsaUJBQWlCLEVBQUUsMkRBQTRCLENBQUMsZUFBZSxFQUFFO2dCQUNqRSxZQUFZLEVBQUUsWUFBWTtnQkFDMUIsY0FBYzthQUNmLENBQUMsQ0FBQztRQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEIsU0FBRyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUUxRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUF2TUQsd0NBdU1DIn0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ChainId, Token } from '@x-swap-protocol/sdk-core';
|
|
2
|
+
import { FeeAmount } from '@x-swap-protocol/v3-sdk';
|
|
3
|
+
import { IV3PoolProvider } from './pool-provider';
|
|
4
|
+
import { IV3SubgraphProvider, V3SubgraphPool } from './subgraph-provider';
|
|
5
|
+
export declare const ADDITIONAL_BASES: {
|
|
6
|
+
[chainId in ChainId]: {
|
|
7
|
+
[tokenAddress: string]: [Token, FeeAmount][];
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export declare const Uni_V3_XDC_ADDITIONAL_BASES: {
|
|
11
|
+
[tokenAddress: string]: [Token, FeeAmount][];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Provider that uses a hardcoded list of V3 pools to generate a list of subgraph pools.
|
|
15
|
+
*
|
|
16
|
+
* Since the pools are hardcoded and the data does not come from the Subgraph, the TVL values
|
|
17
|
+
* are dummys and should not be depended on.
|
|
18
|
+
*
|
|
19
|
+
* Useful for instances where other data sources are unavailable. E.g. Subgraph not available.
|
|
20
|
+
*
|
|
21
|
+
* @export
|
|
22
|
+
* @class StaticV3SubgraphProvider
|
|
23
|
+
*/
|
|
24
|
+
export declare class StaticV3UniSubgraphProvider implements IV3SubgraphProvider {
|
|
25
|
+
private chainId;
|
|
26
|
+
private poolProvider;
|
|
27
|
+
constructor(chainId: ChainId, poolProvider: IV3PoolProvider);
|
|
28
|
+
getPools(tokenIn?: Token, tokenOut?: Token): Promise<V3SubgraphPool[]>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
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.StaticV3UniSubgraphProvider = exports.Uni_V3_XDC_ADDITIONAL_BASES = exports.ADDITIONAL_BASES = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
8
|
+
const sdk_core_1 = require("@x-swap-protocol/sdk-core");
|
|
9
|
+
const v3_sdk_1 = require("@x-swap-protocol/v3-sdk");
|
|
10
|
+
const jsbi_1 = __importDefault(require("jsbi"));
|
|
11
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
12
|
+
const amounts_1 = require("../../util/amounts");
|
|
13
|
+
const log_1 = require("../../util/log");
|
|
14
|
+
const token_provider_1 = require("../token-provider");
|
|
15
|
+
const BASES_TO_CHECK_TRADES_AGAINST = {
|
|
16
|
+
[sdk_core_1.ChainId.XDC]: [sdk_core_1.WETH9[sdk_core_1.ChainId.XDC], token_provider_1.USDC_XDC],
|
|
17
|
+
[sdk_core_1.ChainId.APOTHEM]: [sdk_core_1.WETH9[sdk_core_1.ChainId.APOTHEM]],
|
|
18
|
+
};
|
|
19
|
+
exports.ADDITIONAL_BASES = {
|
|
20
|
+
[sdk_core_1.ChainId.XDC]: {
|
|
21
|
+
[sdk_core_1.WETH9[sdk_core_1.ChainId.XDC].address]: [
|
|
22
|
+
[token_provider_1.USDC_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
23
|
+
[token_provider_1.GAMA_XDC, v3_sdk_1.FeeAmount.LOWEST],
|
|
24
|
+
[token_provider_1.stgUSDT_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
25
|
+
[token_provider_1.SRX_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
26
|
+
[token_provider_1.CGO_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
27
|
+
[token_provider_1.BBB_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
28
|
+
[token_provider_1.SRX_XDC, v3_sdk_1.FeeAmount.HIGH],
|
|
29
|
+
],
|
|
30
|
+
[token_provider_1.USDC_XDC.address]: [
|
|
31
|
+
[token_provider_1.CGO_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
32
|
+
[token_provider_1.WXDC_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
33
|
+
[token_provider_1.SRX_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
34
|
+
[token_provider_1.stgUSDT_XDC, v3_sdk_1.FeeAmount.LOW],
|
|
35
|
+
],
|
|
36
|
+
[token_provider_1.GAMA_XDC.address]: [
|
|
37
|
+
[token_provider_1.WXDC_XDC, v3_sdk_1.FeeAmount.LOWEST],
|
|
38
|
+
[token_provider_1.USDC_XDC, v3_sdk_1.FeeAmount.LOWEST],
|
|
39
|
+
],
|
|
40
|
+
[token_provider_1.stgUSDT_XDC.address]: [
|
|
41
|
+
[token_provider_1.WXDC_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
42
|
+
[token_provider_1.USDC_XDC, v3_sdk_1.FeeAmount.LOW],
|
|
43
|
+
],
|
|
44
|
+
[token_provider_1.CGO_XDC.address]: [
|
|
45
|
+
[token_provider_1.WXDC_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
46
|
+
[token_provider_1.USDC_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
47
|
+
],
|
|
48
|
+
[token_provider_1.BBB_XDC.address]: [[token_provider_1.WXDC_XDC, v3_sdk_1.FeeAmount.MEDIUM]],
|
|
49
|
+
[token_provider_1.SRX_XDC.address]: [
|
|
50
|
+
[token_provider_1.WXDC_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
51
|
+
[token_provider_1.USDC_XDC, v3_sdk_1.FeeAmount.MEDIUM],
|
|
52
|
+
[token_provider_1.WXDC_XDC, v3_sdk_1.FeeAmount.HIGH],
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
[sdk_core_1.ChainId.APOTHEM]: {},
|
|
56
|
+
};
|
|
57
|
+
exports.Uni_V3_XDC_ADDITIONAL_BASES = exports.ADDITIONAL_BASES[sdk_core_1.ChainId.XDC];
|
|
58
|
+
let paths = [];
|
|
59
|
+
const recFinder = (path, used, lastToken, dest, hops) => {
|
|
60
|
+
const hop = path.length;
|
|
61
|
+
// if (hop > 0) {
|
|
62
|
+
// lastToken = path[hop - 1]![1];
|
|
63
|
+
// }
|
|
64
|
+
if (hop < hops) {
|
|
65
|
+
if (!lastToken) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const additional = exports.Uni_V3_XDC_ADDITIONAL_BASES[lastToken.address];
|
|
69
|
+
if (additional) {
|
|
70
|
+
for (const ad of additional) {
|
|
71
|
+
const adToken = ad;
|
|
72
|
+
const newPair = [lastToken, ...adToken];
|
|
73
|
+
const newPath = [...path, newPair];
|
|
74
|
+
if (adToken[0].address === dest.address) {
|
|
75
|
+
paths.push(newPath);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (!used[adToken[0].address]) {
|
|
79
|
+
recFinder(newPath, Object.assign(Object.assign({}, used), { [adToken[0].address]: true }), adToken[0], dest, hops);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Provider that uses a hardcoded list of V3 pools to generate a list of subgraph pools.
|
|
87
|
+
*
|
|
88
|
+
* Since the pools are hardcoded and the data does not come from the Subgraph, the TVL values
|
|
89
|
+
* are dummys and should not be depended on.
|
|
90
|
+
*
|
|
91
|
+
* Useful for instances where other data sources are unavailable. E.g. Subgraph not available.
|
|
92
|
+
*
|
|
93
|
+
* @export
|
|
94
|
+
* @class StaticV3SubgraphProvider
|
|
95
|
+
*/
|
|
96
|
+
class StaticV3UniSubgraphProvider {
|
|
97
|
+
constructor(chainId, poolProvider) {
|
|
98
|
+
this.chainId = chainId;
|
|
99
|
+
this.poolProvider = poolProvider;
|
|
100
|
+
}
|
|
101
|
+
async getPools(tokenIn, tokenOut) {
|
|
102
|
+
paths = [];
|
|
103
|
+
log_1.log.info('In static subgraph provider for V3');
|
|
104
|
+
const bases = BASES_TO_CHECK_TRADES_AGAINST[this.chainId];
|
|
105
|
+
const basePairs = lodash_1.default.flatMap(bases, (base) => bases.map((otherBase) => [base, otherBase]));
|
|
106
|
+
let pairs = [];
|
|
107
|
+
if (tokenIn && tokenOut) {
|
|
108
|
+
const additionalIn = exports.ADDITIONAL_BASES[this.chainId][tokenIn.address];
|
|
109
|
+
const additionalOut = exports.ADDITIONAL_BASES[this.chainId][tokenOut.address];
|
|
110
|
+
if (!additionalIn || !additionalOut) {
|
|
111
|
+
basePairs.push([tokenIn, tokenOut]);
|
|
112
|
+
if (additionalIn) {
|
|
113
|
+
basePairs.push(...additionalIn.map((v) => [tokenIn, v[0]]));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
basePairs.push(...bases.map((base) => [tokenIn, base]));
|
|
117
|
+
}
|
|
118
|
+
if (additionalOut) {
|
|
119
|
+
basePairs.push(...additionalOut.map((v) => [tokenOut, v[0]]));
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
basePairs.push(...bases.map((base) => [tokenOut, base]));
|
|
123
|
+
}
|
|
124
|
+
pairs = (0, lodash_1.default)(basePairs)
|
|
125
|
+
.filter((tokens) => Boolean(tokens[0] && tokens[1]))
|
|
126
|
+
.filter(([tokenA, tokenB]) => tokenA.address !== tokenB.address && !tokenA.equals(tokenB))
|
|
127
|
+
.flatMap(([tokenA, tokenB]) => {
|
|
128
|
+
const additionalA = exports.ADDITIONAL_BASES[this.chainId][tokenA.address];
|
|
129
|
+
// const additionalB = ADDITIONAL_BASES[this.chainId][tokenB.address];
|
|
130
|
+
if (additionalA) {
|
|
131
|
+
const additionalPool = additionalA.filter((v) => v[0].address.toLowerCase() === tokenB.address.toLowerCase());
|
|
132
|
+
const res = additionalPool.map((v) => {
|
|
133
|
+
return [tokenA, v[0], v[1]];
|
|
134
|
+
});
|
|
135
|
+
return res;
|
|
136
|
+
}
|
|
137
|
+
return [
|
|
138
|
+
[tokenA, tokenB, v3_sdk_1.FeeAmount.LOWEST],
|
|
139
|
+
[tokenA, tokenB, v3_sdk_1.FeeAmount.LOW],
|
|
140
|
+
[tokenA, tokenB, v3_sdk_1.FeeAmount.MEDIUM],
|
|
141
|
+
[tokenA, tokenB, v3_sdk_1.FeeAmount.HIGH],
|
|
142
|
+
];
|
|
143
|
+
})
|
|
144
|
+
.value();
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
recFinder([], { [tokenIn.address]: true }, tokenIn, tokenOut, 5);
|
|
148
|
+
// console.log(
|
|
149
|
+
// paths.map((path) =>
|
|
150
|
+
// path
|
|
151
|
+
// .map(
|
|
152
|
+
// (p) => `(${p[0].symbol} - ${p[1].symbol} : ${p[2] / 10000}% )`
|
|
153
|
+
// )
|
|
154
|
+
// .join(' --> ')
|
|
155
|
+
// )
|
|
156
|
+
// );
|
|
157
|
+
const uniquePairs = {};
|
|
158
|
+
paths.forEach((path) => {
|
|
159
|
+
path.forEach((pool) => {
|
|
160
|
+
const id = `${pool[0].address}-${pool[1].address}-${pool[2]}`;
|
|
161
|
+
uniquePairs[id] = pool;
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
const direct = tokenIn && tokenOut
|
|
165
|
+
? [
|
|
166
|
+
[tokenIn, tokenOut, v3_sdk_1.FeeAmount.LOWEST],
|
|
167
|
+
[tokenIn, tokenOut, v3_sdk_1.FeeAmount.LOW],
|
|
168
|
+
[tokenIn, tokenOut, v3_sdk_1.FeeAmount.MEDIUM],
|
|
169
|
+
[tokenIn, tokenOut, v3_sdk_1.FeeAmount.HIGH],
|
|
170
|
+
]
|
|
171
|
+
: [];
|
|
172
|
+
pairs = [...Object.values(uniquePairs), ...direct];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
log_1.log.info(`V3-UNI Static subgraph provider about to get ${pairs.length} pools on-chain`);
|
|
176
|
+
const poolAccessor = await this.poolProvider.getPools(pairs);
|
|
177
|
+
const pools = poolAccessor.getAllPools();
|
|
178
|
+
const poolAddressSet = new Set();
|
|
179
|
+
const subgraphPools = (0, lodash_1.default)(pools)
|
|
180
|
+
.map((pool) => {
|
|
181
|
+
const { token0, token1, fee, liquidity } = pool;
|
|
182
|
+
const poolAddress = v3_sdk_1.Pool.getAddress(pool.token0, pool.token1, pool.fee, v3_sdk_1.UniV3Factory);
|
|
183
|
+
if (poolAddressSet.has(poolAddress)) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
poolAddressSet.add(poolAddress);
|
|
187
|
+
const liquidityNumber = jsbi_1.default.toNumber(liquidity);
|
|
188
|
+
return {
|
|
189
|
+
id: poolAddress,
|
|
190
|
+
feeTier: (0, amounts_1.unparseFeeAmount)(fee),
|
|
191
|
+
liquidity: liquidity.toString(),
|
|
192
|
+
token0: {
|
|
193
|
+
id: token0.address,
|
|
194
|
+
},
|
|
195
|
+
token1: {
|
|
196
|
+
id: token1.address,
|
|
197
|
+
},
|
|
198
|
+
// As a very rough proxy we just use liquidity for TVL.
|
|
199
|
+
tvlETH: liquidityNumber,
|
|
200
|
+
tvlUSD: liquidityNumber,
|
|
201
|
+
};
|
|
202
|
+
})
|
|
203
|
+
.compact()
|
|
204
|
+
.value();
|
|
205
|
+
return subgraphPools;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.StaticV3UniSubgraphProvider = StaticV3UniSubgraphProvider;
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLXN1YmdyYXBoLXByb3ZpZGVyLXYzLXVuaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvdjMvc3RhdGljLXN1YmdyYXBoLXByb3ZpZGVyLXYzLXVuaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2REFBNkQ7QUFDN0Qsd0RBQWtFO0FBQ2xFLG9EQUF3RTtBQUN4RSxnREFBd0I7QUFDeEIsb0RBQXVCO0FBRXZCLGdEQUFzRDtBQUN0RCx3Q0FBcUM7QUFDckMsc0RBUTJCO0FBUzNCLE1BQU0sNkJBQTZCLEdBQW1CO0lBQ3BELENBQUMsa0JBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGdCQUFLLENBQUMsa0JBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSx5QkFBUSxDQUFDO0lBQzdDLENBQUMsa0JBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFLLENBQUMsa0JBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUM1QyxDQUFDO0FBRVcsUUFBQSxnQkFBZ0IsR0FFekI7SUFDRixDQUFDLGtCQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDYixDQUFDLGdCQUFLLENBQUMsa0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixDQUFDLHlCQUFRLEVBQUUsa0JBQVMsQ0FBQyxNQUFNLENBQUM7WUFDNUIsQ0FBQyx5QkFBUSxFQUFFLGtCQUFTLENBQUMsTUFBTSxDQUFDO1lBQzVCLENBQUMsNEJBQVcsRUFBRSxrQkFBUyxDQUFDLE1BQU0sQ0FBQztZQUMvQixDQUFDLHdCQUFPLEVBQUUsa0JBQVMsQ0FBQyxNQUFNLENBQUM7WUFDM0IsQ0FBQyx3QkFBTyxFQUFFLGtCQUFTLENBQUMsTUFBTSxDQUFDO1lBQzNCLENBQUMsd0JBQU8sRUFBRSxrQkFBUyxDQUFDLE1BQU0sQ0FBQztZQUMzQixDQUFDLHdCQUFPLEVBQUUsa0JBQVMsQ0FBQyxJ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
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Token } from '@x-swap-protocol/sdk-core';
|
|
1
|
+
import { ChainId, Token } from '@x-swap-protocol/sdk-core';
|
|
2
2
|
import { FeeAmount } from '@x-swap-protocol/v3-sdk';
|
|
3
|
-
import { ChainId } from '../../util/chains';
|
|
4
3
|
import { IV3PoolProvider } from './pool-provider';
|
|
5
4
|
import { IV3SubgraphProvider, V3SubgraphPool } from './subgraph-provider';
|
|
6
5
|
export declare const ADDITIONAL_BASES: {
|