UNPKG

@sky-mavis/smart-order-router

Version:
130 lines 11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.USDC_ON = exports.TokenProvider = void 0; const katana_core_1 = require("@sky-mavis/katana-core"); const abi_1 = require("@ethersproject/abi"); const strings_1 = require("@ethersproject/strings"); const sdk_core_1 = require("@uniswap/sdk-core"); const lodash_1 = __importDefault(require("lodash")); const IERC20Metadata__factory_1 = require("../types/v3/factories/IERC20Metadata__factory"); const util_1 = require("../util"); const gas_model_1 = require("../routers/alpha-router/gas-models/gas-model"); class TokenProvider { constructor(chainId, multicall2Provider) { this.chainId = chainId; this.multicall2Provider = multicall2Provider; } async getTokenSymbol(addresses, providerConfig) { let result; let isBytes32 = false; try { result = await this.multicall2Provider.callSameFunctionOnMultipleContracts({ addresses, contractInterface: IERC20Metadata__factory_1.IERC20Metadata__factory.createInterface(), functionName: 'symbol', providerConfig, }); } catch (error) { util_1.log.error({ addresses }, `TokenProvider.getTokenSymbol[string] failed with error ${error}. Trying with bytes32.`); const bytes32Interface = new abi_1.Interface([ { inputs: [], name: 'symbol', outputs: [ { internalType: 'bytes32', name: '', type: 'bytes32', }, ], stateMutability: 'view', type: 'function', }, ]); try { result = await this.multicall2Provider.callSameFunctionOnMultipleContracts({ addresses, contractInterface: bytes32Interface, functionName: 'symbol', providerConfig, }); isBytes32 = true; } catch (error) { util_1.log.fatal({ addresses }, `TokenProvider.getTokenSymbol[bytes32] failed with error ${error}.`); throw new Error('[TokenProvider.getTokenSymbol] Impossible to fetch token symbol.'); } } return { result, isBytes32 }; } async getTokenDecimals(addresses, providerConfig) { return this.multicall2Provider.callSameFunctionOnMultipleContracts({ addresses, contractInterface: IERC20Metadata__factory_1.IERC20Metadata__factory.createInterface(), functionName: 'decimals', providerConfig, }); } async getTokens(_addresses, providerConfig) { const addressToToken = {}; const symbolToToken = {}; const addresses = (0, lodash_1.default)(_addresses) .map(address => address.toLowerCase()) .uniq() .value(); if (addresses.length > 0) { const [symbolsResult, decimalsResult] = await Promise.all([ this.getTokenSymbol(addresses, providerConfig), this.getTokenDecimals(addresses, providerConfig), ]); const isBytes32 = symbolsResult.isBytes32; const { results: symbols } = symbolsResult.result; const { results: decimals } = decimalsResult; for (let i = 0; i < addresses.length; i++) { const address = addresses[i]; const symbolResult = symbols[i]; const decimalResult = decimals[i]; if (!(symbolResult === null || symbolResult === void 0 ? void 0 : symbolResult.success) || !(decimalResult === null || decimalResult === void 0 ? void 0 : decimalResult.success)) { util_1.log.info({ symbolResult, decimalResult, }, `Dropping token with address ${address} as symbol or decimal are invalid`); continue; } const symbol = isBytes32 ? (0, strings_1.parseBytes32String)(symbolResult.result[0]) : symbolResult.result[0]; const decimal = decimalResult.result[0]; addressToToken[address.toLowerCase()] = new sdk_core_1.Token(this.chainId, address, decimal, symbol); symbolToToken[symbol.toLowerCase()] = addressToToken[address.toLowerCase()]; } util_1.log.info(`Got token symbol and decimals for ${Object.values(addressToToken).length} out of ${addresses.length} tokens on-chain ${providerConfig ? `as of: ${providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber}` : ''}`); } return { getTokenByAddress: (address) => { return addressToToken[address.toLowerCase()]; }, getTokenBySymbol: (symbol) => { return symbolToToken[symbol.toLowerCase()]; }, getAllTokens: () => { return Object.values(addressToToken); }, }; } } exports.TokenProvider = TokenProvider; const USDC_ON = (chainId) => { switch (chainId) { case katana_core_1.ChainId.mainnet: return gas_model_1.USDC_RONIN_MAINNET; case katana_core_1.ChainId.testnet: return gas_model_1.USDC_RONIN_TESTNET; default: throw new Error(`Chain id: ${chainId} not supported`); } }; exports.USDC_ON = USDC_ON; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3Rva2VuLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdEQUFpRDtBQUNqRCw0Q0FBK0M7QUFFL0Msb0RBQTREO0FBQzVELGdEQUEwQztBQUMxQyxvREFBdUI7QUFFdkIsMkZBQXdGO0FBQ3hGLGtDQUE4QjtBQUc5Qiw0RUFBc0c7QUF5QnRHLE1BQWEsYUFBYTtJQUN4QixZQUNVLE9BQWdCLEVBQ2Qsa0JBQXNDO1FBRHhDLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDZCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQy9DLENBQUM7SUFFSSxLQUFLLENBQUMsY0FBYyxDQUMxQixTQUFtQixFQUNuQixjQUErQjtRQVEvQixJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV0QixJQUFJO1lBQ0YsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1DQUFtQyxDQUFzQjtnQkFDOUYsU0FBUztnQkFDVCxpQkFBaUIsRUFBRSxpREFBdUIsQ0FBQyxlQUFlLEVBQUU7Z0JBQzVELFlBQVksRUFBRSxRQUFRO2dCQUN0QixjQUFjO2FBQ2YsQ0FBQyxDQUFDO1NBQ0o7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLFVBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSwwREFBMEQsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDO1lBRWxILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxlQUFTLENBQUM7Z0JBQ3JDO29CQUNFLE1BQU0sRUFBRSxFQUFFO29CQUNWLElBQUksRUFBRSxRQUFRO29CQUNkLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxZQUFZLEVBQUUsU0FBUzs0QkFDdkIsSUFBSSxFQUFFLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLFNBQVM7eUJBQ2hCO3FCQUNGO29CQUNELGVBQWUsRUFBRSxNQUFNO29CQUN2QixJQUFJLEVBQUUsVUFBVTtpQkFDakI7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJO2dCQUNGLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQ0FBbUMsQ0FBc0I7b0JBQzlGLFNBQVM7b0JBQ1QsaUJBQWlCLEVBQUUsZ0JBQWdCO29CQUNuQyxZQUFZLEVBQUUsUUFBUTtvQkFDdEIsY0FBYztpQkFDZixDQUFDLENBQUM7Z0JBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQzthQUNsQjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLFVBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSwyREFBMkQsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFFOUYsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO2FBQ3JGO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBbUIsRUFBRSxjQUErQjtRQUNqRixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQ0FBbUMsQ0FBc0I7WUFDdEYsU0FBUztZQUNULGlCQUFpQixFQUFFLGlEQUF1QixDQUFDLGVBQWUsRUFBRTtZQUM1RCxZQUFZLEVBQUUsVUFBVTtZQUN4QixjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBb0IsRUFBRSxjQUErQjtRQUMxRSxNQUFNLGNBQWMsR0FBaUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFnQyxFQUFFLENBQUM7UUFFdEQsTUFBTSxTQUFTLEdBQUcsSUFBQSxnQkFBQyxFQUFDLFVBQVUsQ0FBQzthQUM1QixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDckMsSUFBSSxFQUFFO2FBQ04sS0FBSyxFQUFFLENBQUM7UUFFWCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDO2FBQ2pELENBQUMsQ0FBQztZQUVILE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7WUFDMUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ2xELE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsY0FBYyxDQUFDO1lBRTdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFFLENBQUM7Z0JBRTlCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVsQyxJQUFJLENBQUMsQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsT0FBTyxDQUFBLElBQUksQ0FBQyxDQUFBLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxPQUFPLENBQUEsRUFBRTtvQkFDckQsVUFBRyxDQUFDLElBQUksQ0FDTjt3QkFDRSxZQUFZO3dCQUNaLGFBQWE7cUJBQ2QsRUFDRCwrQkFBK0IsT0FBTyxtQ0FBbUMsQ0FDMUUsQ0FBQztvQkFDRixTQUFTO2lCQUNWO2dCQUVELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBQSw0QkFBa0IsRUFBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLENBQUM7Z0JBQ2pHLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLENBQUM7Z0JBRXpDLGNBQWMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxJQUFJLGdCQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMxRixhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBRSxDQUFDO2FBQzlFO1lBRUQsVUFBRyxDQUFDLElBQUksQ0FDTixxQ0FDRSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQ2hDLFdBQVcsU0FBUyxDQUFDLE1BQU0sb0JBQW9CLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUMvRyxDQUFDO1NBQ0g7UUFFRCxPQUFPO1lBQ0wsaUJBQWlCLEVBQUUsQ0FBQyxPQUFlLEVBQXFCLEVBQUU7Z0JBQ3hELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxnQkFBZ0IsRUFBRSxDQUFDLE1BQWMsRUFBcUIsRUFBRTtnQkFDdEQsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELFlBQVksRUFBRSxHQUFZLEVBQUU7Z0JBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN2QyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRJRCxzQ0FzSUM7QUFFTSxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQWdCLEVBQVMsRUFBRTtJQUNqRCxRQUFRLE9BQU8sRUFBRTtRQUNmLEtBQUsscUJBQU8sQ0FBQyxPQUFPO1lBQ2xCLE9BQU8sOEJBQWtCLENBQUM7UUFDNUIsS0FBSyxxQkFBTyxDQUFDLE9BQU87WUFDbEIsT0FBTyw4QkFBa0IsQ0FBQztRQUM1QjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxPQUFPLGdCQUFnQixDQUFDLENBQUM7S0FDekQ7QUFDSCxDQUFDLENBQUM7QUFUVyxRQUFBLE9BQU8sV0FTbEIifQ==