@maxosllc/smart-order-router
Version:
BlockDAG Smart Order Router
73 lines • 7.26 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PoolProvider = void 0;
const lodash_1 = __importDefault(require("lodash"));
const util_1 = require("../util");
class PoolProvider {
/**
* Creates an instance of V4PoolProvider.
* @param chainId The chain id to use.
* @param multicall2Provider The multicall provider to use to get the pools.
* @param retryOptions The retry options for each call to the multicall.
*/
constructor(chainId, multicall2Provider, retryOptions = {
retries: 2,
minTimeout: 50,
maxTimeout: 500,
}) {
this.chainId = chainId;
this.multicall2Provider = multicall2Provider;
this.retryOptions = retryOptions;
}
async getPoolsInternal(poolConstructs, providerConfig) {
const poolIdentifierSet = new Set();
const sortedCurrencyPairs = [];
const sortedPoolIdentifiers = [];
for (const poolConstruct of poolConstructs) {
const { poolIdentifier: poolIdentifier, currency0, currency1, } = this.getPoolIdentifier(poolConstruct);
if (poolIdentifierSet.has(poolIdentifier)) {
continue;
}
// It's the easiest way to change the pool construct in place, since we don't know the entire pool construct at compiling time.
poolConstruct[0] = currency0;
poolConstruct[1] = currency1;
poolIdentifierSet.add(poolIdentifier);
sortedCurrencyPairs.push(poolConstruct);
sortedPoolIdentifiers.push(poolIdentifier);
}
util_1.log.debug(`getPools called with ${poolConstructs.length} token pairs. Deduped down to ${poolIdentifierSet.size}`);
const [slot0Results, liquidityResults] = await Promise.all([
this.getPoolsData(sortedPoolIdentifiers, this.getSlot0FunctionName(), providerConfig),
this.getPoolsData(sortedPoolIdentifiers, this.getLiquidityFunctionName(), providerConfig),
]);
util_1.log.info(`Got liquidity and slot0s for ${poolIdentifierSet.size} pools ${(providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber)
? `as of block: ${providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber}.`
: ``}`);
const poolIdentifierToPool = {};
const invalidPools = [];
for (let i = 0; i < sortedPoolIdentifiers.length; i++) {
const slot0Result = slot0Results[i];
const liquidityResult = liquidityResults[i];
// These properties tell us if a pool is valid and initialized or not.
if (!(slot0Result === null || slot0Result === void 0 ? void 0 : slot0Result.success) ||
!(liquidityResult === null || liquidityResult === void 0 ? void 0 : liquidityResult.success) ||
slot0Result.result.sqrtPriceX96.eq(0)) {
invalidPools.push(sortedCurrencyPairs[i]);
continue;
}
const slot0 = slot0Result.result;
const liquidity = liquidityResult.result[0];
const pool = this.instantiatePool(sortedCurrencyPairs[i], slot0, liquidity);
const poolIdentifier = sortedPoolIdentifiers[i];
poolIdentifierToPool[poolIdentifier] = pool;
}
const poolStrs = lodash_1.default.map(Object.values(poolIdentifierToPool), util_1.poolToString);
util_1.log.debug({ poolStrs }, `Found ${poolStrs.length} valid pools`);
return this.instantiatePoolAccessor(poolIdentifierToPool);
}
}
exports.PoolProvider = PoolProvider;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcG9vbC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSxvREFBdUI7QUFFdkIsa0NBQTRDO0FBbUI1QyxNQUFzQixZQUFZO0lBT2hDOzs7OztPQUtHO0lBQ0gsWUFDWSxPQUFnQixFQUNoQixrQkFBc0MsRUFDdEMsZUFBNkI7UUFDckMsT0FBTyxFQUFFLENBQUM7UUFDVixVQUFVLEVBQUUsRUFBRTtRQUNkLFVBQVUsRUFBRSxHQUFHO0tBQ2hCO1FBTlMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUlyQjtJQUNDLENBQUM7SUFFSyxLQUFLLENBQUMsZ0JBQWdCLENBQzlCLGNBQWdDLEVBQ2hDLGNBQStCO1FBRS9CLE1BQU0saUJBQWlCLEdBQWdCLElBQUksR0FBRyxFQUFVLENBQUM7UUFDekQsTUFBTSxtQkFBbUIsR0FBMEIsRUFBRSxDQUFDO1FBQ3RELE1BQU0scUJBQXFCLEdBQWEsRUFBRSxDQUFDO1FBRTNDLEtBQUssTUFBTSxhQUFhLElBQUksY0FBYyxFQUFFO1lBQzFDLE1BQU0sRUFDSixjQUFjLEVBQUUsY0FBYyxFQUM5QixTQUFTLEVBQ1QsU0FBUyxHQUNWLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTFDLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUN6QyxTQUFTO2FBQ1Y7WUFFRCwrSEFBK0g7WUFDL0gsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUM3QixhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQzdCLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN0Qyxt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