UNPKG

@xspswap/smart-order-router

Version:
127 lines 16.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WNATIVE_ON = exports.USDC_ON = exports.DAI_ON = exports.TokenProvider = exports.EEG_XDC = exports.PWM3_XDC = exports.TIVO_XDC = exports.GLL_XDC = exports.ROXN_XDC = exports.AVR_XDC = exports.CHUPAV2_XDC = exports.CGO_XDC = exports.LBT_XDC = exports.BBB_XDC = exports.GAMA_XDC = exports.psXDC_XDC = exports.DOPU_XDC = exports.WXDC_XDC = exports.FXD_XDC = exports.USDC_XDC = exports.EURS_XDC = exports.stgUSDT_XDC = exports.USDT_XDC = exports.PLI_XDC = exports.SRX_XDC = exports.XSP_XDC = exports.WBTC_XDC_APOTHEM = exports.DAI_XDC_APOTHEM = exports.USDC_XDC_APOTHEM = exports.USDT_XDC_APOTHEM = void 0; const sdk_core_1 = require("@x-swap-protocol/sdk-core"); const lodash_1 = __importDefault(require("lodash")); const IERC20Metadata__factory_1 = require("../types/v3/factories/IERC20Metadata__factory"); const util_1 = require("../util"); // Some well known tokens on each chain for seeding cache / testing. exports.USDT_XDC_APOTHEM = new sdk_core_1.Token(sdk_core_1.ChainId.APOTHEM, '0xac4cdD44931d4A0Ff6B1Ea9206e02FeaC8EB9a50', 6, 'USDT', 'Tether Token'); exports.USDC_XDC_APOTHEM = new sdk_core_1.Token(sdk_core_1.ChainId.APOTHEM, '0xDF5038D080Ca5bd21c6c90F0b004306a26Af4bA8', 18, 'USDC', 'USDC'); exports.DAI_XDC_APOTHEM = new sdk_core_1.Token(sdk_core_1.ChainId.APOTHEM, '0xE46554Ad93a7046C85f2dA0C20EbD68e41f11b36', 18, 'DAI', 'DAI Stablecoin on XDC testnet'); exports.WBTC_XDC_APOTHEM = new sdk_core_1.Token(sdk_core_1.ChainId.APOTHEM, '0x885c04a08FbE1C6059f407E36c35B165704D1A03', 8, 'WBTC', 'Wrapped BTC'); exports.XSP_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x36726235dAdbdb4658D33E62a249dCA7c4B2bC68', 18, 'XSP', 'XSwap Protocol'); exports.SRX_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x5D5f074837f5d4618B3916ba74De1Bf9662a3fEd', 18, 'SRX', 'StoreX'); exports.PLI_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xff7412ea7c8445c46a8254dfb557ac1e48094391', 18, 'PLI', 'Plugin'); exports.USDT_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xd4b5f10d61916bd6e0860144a91ac658de8a1437', 6, 'xUSDT', 'USDT@xinfin'); exports.stgUSDT_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xcdA5b77E2E2268D9E09c874c1b9A4c3F07b37555', 6, 'USDT', 'Bridget stgUSDT'); exports.EURS_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x1eBb2C8a71A9ec59bF558886a8Adf8F4a565814F', 2, 'EURS', 'STASIS EURO'); exports.USDC_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xfA2958CB79b0491CC627c1557F441eF849Ca8eb1', 6, 'USDC', 'USDC'); exports.FXD_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x49d3f7543335cf38Fa10889CCFF10207e22110B5', 18, 'FXD', 'Fathom USD'); exports.WXDC_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x951857744785e80e2de051c32ee7b25f9c458c42', 18, 'WXDC', 'Wrapped XDC'); exports.DOPU_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x3fB46c4Db76d8E9f69F3F8388f43a7CA7E140807', 18, 'DOPU', 'Dog with a Purpose'); exports.psXDC_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x9B8e12b0BAC165B86967E771d98B520Ec3F665A6', 18, 'psXDC', 'PrimeStakedXDC'); exports.GAMA_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x3a170C7C987F55C84f28733Bfa27962D8CdD5D3B', 18, 'GAMA', 'Gama Token'); exports.BBB_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xFa4dDcFa8E3d0475f544d0de469277CF6e0A6Fd1', 18, 'BBB', 'Beny Bad Boy'); exports.LBT_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x05940B2dF33D6371201e7Ae099CeD4C363855dFE', 18, 'LBT', 'Law Block'); exports.CGO_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x8f9920283470F52128bF11B0c14E798bE704fD15', 18, 'CGO', 'Comtech Gold'); // Chupa v2 exports.CHUPAV2_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xCF071288cC70D737105c97485F9820668EAcCa51', 18, 'CHUPAV2', 'ChupaCabraV2'); exports.AVR_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x92bb5d72bd65E8BAD36405D7C3D1497015A41160', 18, 'AVR', 'Avatar'); exports.ROXN_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x2d1C02Cf9e7a1659b82185feF243078BfD237B23', 18, 'ROXN', 'Roxonn Token'); exports.GLL_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xc6126EBFa8B5fFD41561C086979c97416969CeBF', 18, 'GLL', 'Growlimitless'); exports.TIVO_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0x765087A2360F4D1F516De6552970256F9DB64827', 18, 'Tivo', 'Tivo Token'); exports.PWM3_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xB2b2aaB80f9fcD8f2bcA8A404Cbbf72A618897c0', 18, 'PWM3', 'Diamondium Private Currency'); exports.EEG_XDC = new sdk_core_1.Token(sdk_core_1.ChainId.XDC, '0xAec5Eaf63402BF842D8642d917685e5ad3BA14bb', 18, 'EEG', 'EquitEdge ERC20 Token'); class TokenProvider { constructor(chainId, multicall2Provider) { this.chainId = chainId; this.multicall2Provider = multicall2Provider; } 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.multicall2Provider.callSameFunctionOnMultipleContracts({ addresses, contractInterface: IERC20Metadata__factory_1.IERC20Metadata__factory.createInterface(), functionName: 'symbol', providerConfig, }), this.multicall2Provider.callSameFunctionOnMultipleContracts({ addresses, contractInterface: IERC20Metadata__factory_1.IERC20Metadata__factory.createInterface(), functionName: 'decimals', providerConfig, }), ]); const { results: symbols } = symbolsResult; 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 = 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 DAI_ON = (chainId) => { switch (chainId) { // case ChainId.XDC: // return USDT_BSC; case sdk_core_1.ChainId.APOTHEM: return exports.DAI_XDC_APOTHEM; default: throw new Error(`Chain id: ${chainId} not supported`); } }; exports.DAI_ON = DAI_ON; const USDC_ON = (chainId) => { switch (chainId) { case sdk_core_1.ChainId.XDC: return exports.USDC_XDC; case sdk_core_1.ChainId.APOTHEM: return exports.USDC_XDC_APOTHEM; default: throw new Error(`Chain id: ${chainId} not supported`); } }; exports.USDC_ON = USDC_ON; const WNATIVE_ON = (chainId) => { return sdk_core_1.WETH9[chainId]; }; exports.WNATIVE_ON = WNATIVE_ON; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3Rva2VuLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdEQUFrRTtBQUNsRSxvREFBdUI7QUFFdkIsMkZBQXdGO0FBQ3hGLGtDQUE4QjtBQStCOUIsb0VBQW9FO0FBQ3ZELFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBSyxDQUN2QyxrQkFBTyxDQUFDLE9BQU8sRUFDZiw0Q0FBNEMsRUFDNUMsQ0FBQyxFQUNELE1BQU0sRUFDTixjQUFjLENBQ2YsQ0FBQztBQUVXLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBSyxDQUN2QyxrQkFBTyxDQUFDLE9BQU8sRUFDZiw0Q0FBNEMsRUFDNUMsRUFBRSxFQUNGLE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztBQUVXLFFBQUEsZUFBZSxHQUFHLElBQUksZ0JBQUssQ0FDdEMsa0JBQU8sQ0FBQyxPQUFPLEVBQ2YsNENBQTRDLEVBQzVDLEVBQUUsRUFDRixLQUFLLEVBQ0wsK0JBQStCLENBQ2hDLENBQUM7QUFFVyxRQUFBLGdCQUFnQixHQUFHLElBQUksZ0JBQUssQ0FDdkMsa0JBQU8sQ0FBQyxPQUFPLEVBQ2YsNENBQTRDLEVBQzVDLENBQUMsRUFDRCxNQUFNLEVBQ04sYUFBYSxDQUNkLENBQUM7QUFFVyxRQUFBLE9BQU8sR0FBRyxJQUFJLGdCQUFLLENBQzlCLGtCQUFPLENBQUMsR0FBRyxFQUNYLDRDQUE0QyxFQUM1QyxFQUFFLEVBQ0YsS0FBSyxFQUNMLGdCQUFnQixDQUNqQixDQUFDO0FBRVcsUUFBQSxPQUFPLEdBQUcsSUFBSSxnQkFBSyxDQUM5QixrQkFBTyxDQUFDLEdBQUcsRUFDWCw0Q0FBNEMsRUFDNUMsRUFBRSxFQUNGLEtBQUssRUFDTCxRQUFRLENBQ1QsQ0FBQztBQUNXLFFBQUEsT0FBTyxHQUFHLElBQUksZ0JBQUssQ0FDOUIsa0JBQU8sQ0FB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