UNPKG

@prism-hq/prism-ag

Version:

Prism Aggregator

196 lines (195 loc) 10.3 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadLiquidityInfos = exports.possibleRoutes = void 0; const types_1 = require("../../types/types"); const aldrin_1 = require("./aldrin"); const cropper_1 = require("./cropper"); // import { loadLifinity, _loadLifinity } from "./lifinity"; const orca_1 = require("./orca"); const raydium_1 = require("./raydium"); const saber_1 = require("./saber"); const sencha_1 = require("./sencha"); const symmetry_1 = require("./symmetry"); const saros_1 = require("./saros"); const step_1 = require("./step"); const penguin_1 = require("./penguin"); const mercurial_1 = require("./mercurial"); const cykura_1 = require("./cykura"); const stepn_1 = require("./stepn"); const marinade_1 = require("./marinade"); const gooseFx_1 = require("./gooseFx"); const getMultInfo_1 = require("../../utils/getMultInfo"); const openbook_1 = require("./openbook"); const balansol_1 = require("./balansol"); const whirlpools_1 = require("./whirlpools"); const raydiumClmm_1 = require("./raydiumClmm"); const marcopolo_1 = require("./marcopolo"); // import { loadPhoenix, _loadPhoenix } from "./phoenix"; // import { loadLifinityV2, _loadLifinityV2 } from "./lifinityV2"; function possibleRoutes(fromCoin, toCoin, LI, tokenMap, direct) { let directOptions = []; let allFromOptions = {}; let allToOptions = {}; if (LI[fromCoin.mintAddress]) for (let i = 0; i < LI[fromCoin.mintAddress].length; i++) { let other = LI[fromCoin.mintAddress][i].other; if (other == fromCoin.mintAddress) continue; // if (unKnownSerumMarket(fromCoin.mintAddress, other, knownPairs, LI[fromCoin.mintAddress][i])) // continue; if (other == toCoin.mintAddress) { directOptions.push(LI[fromCoin.mintAddress][i]); continue; } if (direct) continue; if (LI[fromCoin.mintAddress][i].provider == "serum" && !types_1.MIDDLE_COINS.find(object => object.mintAddress == other)) continue; (allFromOptions[other] || (allFromOptions[other] = [])) .push(LI[fromCoin.mintAddress][i]); } if (LI[toCoin.mintAddress]) for (let i = 0; i < LI[toCoin.mintAddress].length; i++) { let other = LI[toCoin.mintAddress][i].other; if (other == fromCoin.mintAddress || other == toCoin.mintAddress) continue; if (!allFromOptions[other]) continue; // if (unKnownSerumMarket(toCoin.mintAddress, other, knownPairs, LI[toCoin.mintAddress][i])) // continue; if (LI[toCoin.mintAddress][i].provider == "serum" && !types_1.MIDDLE_COINS.find(object => object.mintAddress == other)) continue; (allToOptions[other] || (allToOptions[other] = [])) .push(LI[toCoin.mintAddress][i]); } let toLoad = {}; let routes = {}; for (let [middleMint, options] of Object.entries(allToOptions)) { let midCoin = tokenMap[middleMint]; if (!midCoin) continue; if (!types_1.MIDDLE_TOKENS.find(symb => symb.toLocaleLowerCase() == midCoin.symbol.toLocaleLowerCase())) { continue; } // if (midCoin.decimals == 0)continue; if (!routes[middleMint]) routes[middleMint] = { from: [], to: [], coin: midCoin }; for (let i = 0; i < allFromOptions[middleMint].length; i++) { if (!toLoad[allFromOptions[middleMint][i].provider]) toLoad[allFromOptions[middleMint][i].provider] = []; toLoad[allFromOptions[middleMint][i].provider].push(Object.assign(Object.assign({}, allFromOptions[middleMint][i]), { middleCoin: middleMint, side: "from" })); routes[middleMint].from.push(allFromOptions[middleMint][i]); } //@ts-ignore for (let i = 0; i < options.length; i++) { //@ts-ignore if (!toLoad[options[i].provider]) toLoad[options[i].provider] = []; //@ts-ignore toLoad[options[i].provider].push(Object.assign(Object.assign({}, options[i]), { middleMint: middleMint, side: "to" })); //@ts-ignore routes[middleMint].to.push(options[i]); } } toLoad["whirlpools"] = []; routes.direct = { direct: [] }; for (let i = 0; i < directOptions.length; i++) { if (!toLoad[directOptions[i].provider]) toLoad[directOptions[i].provider] = []; toLoad[directOptions[i].provider].push(Object.assign(Object.assign({}, directOptions[i]), { middleMint: "direct", side: "direct" })); routes.direct.direct.push(directOptions[i]); } return { routes: routes, toLoad: toLoad, }; } exports.possibleRoutes = possibleRoutes; function loadLiquidityInfos(fromCoin, toCoin, LI, connection, tokenMap, direct, reverse) { return __awaiter(this, void 0, void 0, function* () { let time = Date.now(); let { routes, toLoad } = possibleRoutes(fromCoin, toCoin, LI, tokenMap, direct); if (reverse) { return routes; } let tim = Date.now(); let pubkeys = [ /* ..._loadCrema(toLoad.crema, connection), */ // ..._loadSerum(toLoad.serum), ...(0, raydium_1._loadRaydium)(toLoad.raydium), ...(0, saber_1._loadSaber)(toLoad.saber), ...(0, aldrin_1._loadAldrin)(toLoad.aldrin), ...(0, orca_1._loadOrca)(toLoad.orca), // ..._loadLifinity(toLoad.lifinity), // ..._loadLifinityV2(toLoad.lifinityV2), ...(0, symmetry_1._loadSymmetry)(toLoad.symmetry), ...(0, cropper_1._loadCropper)(toLoad.cropper), ...(0, sencha_1._loadSencha)(toLoad.sencha), ...(0, saros_1._loadSaros)(toLoad.saros), ...(0, step_1._loadStep)(toLoad.step), ...(0, penguin_1._loadPenguin)(toLoad.penguin), ...(0, mercurial_1._loadMercurial)(toLoad.mercurial), ...(0, stepn_1._loadStepn)(toLoad.stepn), ...(0, marinade_1._loadMarinade)(toLoad.marinade), ...(0, cykura_1._loadCykura)(toLoad.cykura), ...(0, gooseFx_1._loadGooseFx)(toLoad.gooseFX), ...(0, openbook_1._loadOpenbook)(toLoad.openbook), ...(0, balansol_1._loadBalansol)(toLoad.balansol), ...(0, raydiumClmm_1._loadRaydiumClmm)(toLoad.raydiumClmm), ...(0, marcopolo_1._loadMarcopolo)(toLoad.marcopolo), // ..._loadPhoenix(toLoad.phoenix), ]; let [parsed, whirlpoolsData, slot] = yield Promise.all([ (0, getMultInfo_1.customGetMultipleAccountInfos)(connection, pubkeys.map(x => x.account), "Fetch liquidity infos"), (0, whirlpools_1.loadWhirlpools)(toLoad.whirlpools, connection), connection.getSlot() ]); let parsedInfo = {}; for (let i = 0; i < parsed.length; i++) (parsedInfo[pubkeys[i].provider] || (parsedInfo[pubkeys[i].provider] = [])) .push(parsed[i]); let liquidityData = { /* cremaData: loadCrema(toLoad.crema, connection), */ // serumData: loadSerum(toLoad.serum, tokenMap, parsedInfo.serum), raydiumData: (0, raydium_1.loadRaydium)(toLoad.raydium, parsedInfo.raydium), saberData: (0, saber_1.loadSaber)(toLoad.saber, parsedInfo.saber), aldrinData: (0, aldrin_1.loadAldrin)(toLoad.aldrin, parsedInfo.aldrin), orcaData: (0, orca_1.loadOrca)(toLoad.orca, parsedInfo.orca), // lifinityData: loadLifinity(toLoad.lifinity, parsedInfo.lifinity, slot), // lifinityV2Data: loadLifinityV2(toLoad.lifinityV2, parsedInfo.lifinityV2, slot), symmetryData: (0, symmetry_1.loadSymmetry)(toLoad.symmetry, parsedInfo.symmetry), cropperData: (0, cropper_1.loadCropper)(toLoad.cropper, parsedInfo.cropper), senchaData: (0, sencha_1.loadSencha)(toLoad.sencha, parsedInfo.sencha), sarosData: (0, saros_1.loadSaros)(toLoad.saros, parsedInfo.saros), stepData: (0, step_1.loadStep)(toLoad.step, parsedInfo.step), penguinData: (0, penguin_1.loadPenguin)(toLoad.penguin, parsedInfo.penguin), mercurialData: (0, mercurial_1.loadMercurial)(toLoad.mercurial, parsedInfo.mercurial), stepnData: (0, stepn_1.loadStepn)(toLoad.stepn, parsedInfo.stepn), marinadeData: (0, marinade_1.loadMarinade)(toLoad.marinade, connection, parsedInfo.marinade), cykuraData: (0, cykura_1.loadCykura)(toLoad.cykura, connection, parsedInfo.cykura), gooseFxData: (0, gooseFx_1.loadGooseFx)(toLoad.gooseFX, parsedInfo.gooseFX), openbookData: (0, openbook_1.loadOpenbook)(toLoad.openbook, tokenMap, parsedInfo.openbook), balansolData: (0, balansol_1.loadBalansol)(toLoad.balansol, parsedInfo.balansol), whirlpoolsData: whirlpoolsData, raydiumClmm: (0, raydiumClmm_1.loadRaydiumClmm)(toLoad.raydiumClmm, parsedInfo.raydiumClmm), marcopolo: (0, marcopolo_1.loadMarcopolo)(toLoad.marcopolo, parsedInfo.marcopolo), // phoenix: loadPhoenix(toLoad.phoenix, parsedInfo.phoenix, slot), }; return { routes: routes, liquidityData: liquidityData, }; }); } exports.loadLiquidityInfos = loadLiquidityInfos;