UNPKG

@xspswap/smart-order-router

Version:
56 lines 5.43 kB
import _ from 'lodash'; import { log, poolToString } from '../../../util'; /** * Interface for a Quoter. * Defines the base dependencies, helper methods and interface for how to fetch quotes. * * @abstract * @template Route */ export class BaseQuoter { constructor(tokenProvider, chainId, protocol, blockedTokenListProvider, tokenValidatorProvider) { this.tokenProvider = tokenProvider; this.chainId = chainId; this.protocol = protocol; this.blockedTokenListProvider = blockedTokenListProvider; this.tokenValidatorProvider = tokenValidatorProvider; } /** * Public method which would first get the routes and then get the quotes. * * @param tokenIn The token that the user wants to provide * @param tokenOut The token that the usaw wants to receive * @param amounts the list of amounts to query for EACH route. * @param percents the percentage of each amount. * @param quoteToken * @param tradeType * @param routingConfig * @param gasModel the gasModel to be used for estimating gas cost * @param gasPriceWei instead of passing gasModel, gasPriceWei is used to generate a gasModel */ getRoutesThenQuotes(tokenIn, tokenOut, amounts, percents, quoteToken, tradeType, routingConfig, gasModel, gasPriceWei) { return this.getRoutes(tokenIn, tokenOut, tradeType, routingConfig).then((routesResult) => { return this.getQuotes(routesResult.routes, amounts, percents, quoteToken, tradeType, routingConfig, routesResult.candidatePools, gasModel, gasPriceWei); }); } async applyTokenValidatorToPools(pools, isInvalidFn) { if (!this.tokenValidatorProvider) { return pools; } log.info(`Running token validator on ${pools.length} pools`); const tokens = _.flatMap(pools, (pool) => [pool.token0, pool.token1]); const tokenValidationResults = await this.tokenValidatorProvider.validateTokens(tokens); const poolsFiltered = _.filter(pools, (pool) => { const token0Validation = tokenValidationResults.getValidationByToken(pool.token0); const token1Validation = tokenValidationResults.getValidationByToken(pool.token1); const token0Invalid = isInvalidFn(pool.token0, token0Validation); const token1Invalid = isInvalidFn(pool.token1, token1Validation); if (token0Invalid || token1Invalid) { log.info(`Dropping pool ${poolToString(pool)} because token is invalid. ${pool.token0.symbol}: ${token0Validation}, ${pool.token1.symbol}: ${token1Validation}`); } return !token0Invalid && !token1Invalid; }); return poolsFiltered; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1xdW90ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcm91dGVycy9hbHBoYS1yb3V0ZXIvcXVvdGVycy9iYXNlLXF1b3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFRdkIsT0FBTyxFQUFrQixHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBU2xFOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBZ0IsVUFBVTtJQU85QixZQUNFLGFBQTZCLEVBQzdCLE9BQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLHdCQUE2QyxFQUM3QyxzQkFBZ0Q7UUFFaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO1FBQ3pELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztJQUN2RCxDQUFDO0lBOENEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLG1CQUFtQixDQUN4QixPQUFjLEVBQ2QsUUFBZSxFQUNmLE9BQXlCLEVBQ3pCLFFBQWtCLEVBQ2xCLFVBQWlCLEVBQ2pCLFNBQW9CLEVBQ3BCLGFBQWdDLEVBQ2hDLFFBQXlDLEVBQ3pDLFdBQXVCO1FBRXZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQ3JFLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQ25CLFlBQVksQ0FBQyxNQUFNLEVBQ25CLE9BQU8sRUFDUCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFNBQVMsRUFDVCxhQUFhLEVBQ2IsWUFBWSxDQUFDLGNBQWMsRUFDM0IsUUFBUSxFQUNSLFdBQVcsQ0FDWixDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRVMsS0FBSyxDQUFDLDBCQUEwQixDQUN4QyxLQUFVLEVBQ1YsV0FHWTtRQUVaLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsOEJBQThCLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO1FBRTdELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFdEUsTUFBTSxzQkFBc0IsR0FDMUIsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNELE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBTyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FDbEUsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FDbEUsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1lBRUYsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRWpFLElBQUksYUFBYSxJQUFJLGFBQWEsRUFBRTtnQkFDbEMsR0FBRyxDQUFDLElBQUksQ0FDTixpQkFBaUIsWUFBWSxDQUFDLElBQUksQ0FBQyw4QkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUNkLEtBQUssZ0JBQWdCLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLEVBQUUsQ0FDcEUsQ0FBQzthQUNIO1lBRUQsT0FBTyxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiJ9