@xspswap/smart-order-router
Version:
XSwap Protocol V3 Smart Order Router
169 lines • 14.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.StaticV2FathomSubgraphProvider = exports.FATHOM_V2_XDC_ADDITIONAL_BASES = void 0;
const sdk_core_1 = require("@x-swap-protocol/sdk-core");
const lodash_1 = __importDefault(require("lodash"));
const log_1 = require("../../util/log");
const token_provider_1 = require("../token-provider");
const utils_1 = require("./utils");
const BASES_TO_CHECK_TRADES_AGAINST = {
[sdk_core_1.ChainId.XDC]: [token_provider_1.WXDC_XDC, token_provider_1.FXD_XDC],
[sdk_core_1.ChainId.APOTHEM]: [],
};
const ADDITIONAL_BASES = {
[sdk_core_1.ChainId.XDC]: {
[token_provider_1.WXDC_XDC.address]: [token_provider_1.USDT_XDC, token_provider_1.FXD_XDC],
[token_provider_1.FXD_XDC.address]: [token_provider_1.WXDC_XDC, token_provider_1.USDT_XDC, token_provider_1.EURS_XDC],
[token_provider_1.USDT_XDC.address]: [token_provider_1.WXDC_XDC, token_provider_1.FXD_XDC],
[token_provider_1.EURS_XDC.address]: [token_provider_1.FXD_XDC],
[token_provider_1.PLI_XDC.address]: [token_provider_1.WXDC_XDC],
},
[sdk_core_1.ChainId.APOTHEM]: {},
};
exports.FATHOM_V2_XDC_ADDITIONAL_BASES = ADDITIONAL_BASES[sdk_core_1.ChainId.XDC];
let paths = [];
const recFinder = (path, used, lastToken, dest, hops) => {
const hop = path.length;
if (hop < hops) {
if (!lastToken) {
return;
}
const additional = exports.FATHOM_V2_XDC_ADDITIONAL_BASES[lastToken.address];
if (additional) {
for (const ad of additional) {
const adToken = ad;
const newPair = [lastToken, adToken];
const newPath = [...path, newPair];
if (adToken.address === dest.address) {
paths.push(newPath);
continue;
}
if (!used[adToken.address]) {
recFinder(newPath, Object.assign(Object.assign({}, used), { [adToken.address]: true }), adToken, dest, hops);
}
}
}
}
};
/**
* Provider that does not get data from an external source and instead returns
* a hardcoded list of Subgraph pools.
*
* Since the pools are hardcoded, the liquidity/price values are dummys and should not
* be depended on.
*
* Useful for instances where other data sources are unavailable. E.g. subgraph not available.
*
* @export
* @class StaticV2SubgraphProvider
*/
class StaticV2FathomSubgraphProvider {
constructor(chainId) {
this.chainId = chainId;
}
async getPools(tokenIn, tokenOut) {
paths = [];
log_1.log.info('In static subgraph provider for V2');
const bases = BASES_TO_CHECK_TRADES_AGAINST[this.chainId];
const basePairs = lodash_1.default.flatMap(bases, (base) => bases.map((otherBase) => [base, otherBase]));
let pairs = [];
if (tokenIn && tokenOut) {
const additionalIn = ADDITIONAL_BASES[this.chainId][tokenIn.address];
const additionalOut = ADDITIONAL_BASES[this.chainId][tokenOut.address];
if (!additionalIn || !additionalOut) {
basePairs.push([tokenIn, tokenOut]);
if (additionalIn) {
basePairs.push(...additionalIn.map((v) => [tokenIn, v]));
}
else {
basePairs.push(...bases.map((base) => [tokenIn, base]));
}
if (additionalOut) {
basePairs.push(...additionalOut.map((v) => [tokenOut, v]));
}
else {
basePairs.push(...bases.map((base) => [tokenOut, base]));
}
pairs = (0, lodash_1.default)(basePairs)
.filter((tokens) => Boolean(tokens[0] && tokens[1]))
.filter(([tokenA, tokenB]) => tokenA.address !== tokenB.address && !tokenA.equals(tokenB))
.flatMap(([tokenA, tokenB]) => {
const additionalA = ADDITIONAL_BASES[this.chainId][tokenA.address];
// const additionalB = ADDITIONAL_BASES[this.chainId][tokenB.address];
if (additionalA) {
const additionalPool = additionalA.filter((v) => v.address.toLowerCase() === tokenB.address.toLowerCase());
const res = additionalPool.map((v) => {
return [tokenA, v];
});
return res;
}
return [[tokenA, tokenB]];
})
.value();
}
else {
recFinder([], { [tokenIn.address]: true }, tokenIn, tokenOut, 5);
// console.log(
// paths.map((path) =>
// path
// .map(
// (p) => `(${p[0].symbol} - ${p[1].symbol} : ${p[2] / 10000}% )`
// )
// .join(' --> ')
// )
// );
const uniquePairs = {};
paths.forEach((path) => {
path.forEach((pool) => {
const id = `${pool[0].address}-${pool[1].address}`;
uniquePairs[id] = pool;
});
});
const direct = tokenIn && tokenOut ? [[tokenIn, tokenOut]] : [];
pairs = [...Object.values(uniquePairs), ...direct];
}
}
// pairs = _(basePairs)
// .filter((tokens): tokens is [Token, Token] =>
// Boolean(tokens[0] && tokens[1])
// )
// .filter(
// ([tokenA, tokenB]) =>
// tokenA.address !== tokenB.address && !tokenA.equals(tokenB)
// )
// .value();
const poolAddressSet = new Set();
const subgraphPools = (0, lodash_1.default)(pairs)
.map(([tokenA, tokenB]) => {
const poolAddress = (0, utils_1.getFathomPoolAddress)(tokenA, tokenB);
if (poolAddressSet.has(poolAddress)) {
return undefined;
}
poolAddressSet.add(poolAddress);
const [token0, token1] = tokenA.sortsBefore(tokenB)
? [tokenA, tokenB]
: [tokenB, tokenA];
return {
id: poolAddress,
liquidity: '100',
token0: {
id: token0.address,
},
token1: {
id: token1.address,
},
supply: 100,
reserve: 100,
reserveUSD: 100,
};
})
.compact()
.value();
return subgraphPools;
}
}
exports.StaticV2FathomSubgraphProvider = StaticV2FathomSubgraphProvider;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLXN1YmdyYXBoLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy92Mi1mYXRob20vc3RhdGljLXN1YmdyYXBoLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdEQUEyRDtBQUMzRCxvREFBdUI7QUFFdkIsd0NBQXFDO0FBQ3JDLHNEQU0yQjtBQUczQixtQ0FBK0M7QUFNL0MsTUFBTSw2QkFBNkIsR0FBbUI7SUFDcEQsQ0FBQyxrQkFBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMseUJBQVEsRUFBRSx3QkFBTyxDQUFDO0lBQ2xDLENBQUMsa0JBQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO0NBQ3RCLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUVsQjtJQUNGLENBQUMsa0JBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNiLENBQUMseUJBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLHlCQUFRLEVBQUUsd0JBQU8sQ0FBQztRQUN2QyxDQUFDLHdCQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyx5QkFBUSxFQUFFLHlCQUFRLEVBQUUseUJBQVEsQ0FBQztRQUNqRCxDQUFDLHlCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyx5QkFBUSxFQUFFLHdCQUFPLENBQUM7UUFDdkMsQ0FBQyx5QkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsd0JBQU8sQ0FBQztRQUM3QixDQUFDLHdCQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyx5QkFBUSxDQUFDO0tBQzlCO0lBQ0QsQ0FBQyxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Q0FDdEIsQ0FBQztBQUNXLFFBQUEsOEJBQThCLEdBQUcsZ0JBQWdCLENBQUMsa0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUU1RSxJQUFJLEtBQUssR0FBdUIsRUFBRSxDQUFDO0FBRW5D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