@xspswap/smart-order-router
Version:
XSwap Protocol V3 Smart Order Router
56 lines • 5.43 kB
JavaScript
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