import Web3 from 'web3'; import { DODO_SDK_DATA } from './data/constants'; import { sortsAddress } from './utils' import * as DODO_ZOO_ABI from './abi/dodoZoo.json'; let PAIR_ADDRESS_CACHE: { [tokenConcatAddress: string]: { pair: string, base: string } } = { ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48+0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2']: { pair: '0x75c23271661d9d143DCb617222BC4BEc783eff34', base: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' }, /*WETH-USDC*/ ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48+0xdAC17F958D2ee523a2206206994597C13D831ec7']: { pair: '0xC9f93163c99695c6526b799EbcA2207Fdf7D61aD', base: '0xdAC17F958D2ee523a2206206994597C13D831ec7' }, /*USDT-USDC*/ ['0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599+0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48']: { pair: '0x2109F78b46a789125598f5ad2b7f243751c2934d', base: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599' }, /*WBTC-USDC*/ ['0x514910771AF9Ca656af840dff83E8264EcF986CA+0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48']: { pair: '0x562c0b218cc9ba06D9EB42F3aEf54C54cC5a4650', base: '0x514910771AF9Ca656af840dff83E8264EcF986CA' }, /*LINK-USDC*/ ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48+0xc00e94Cb662C3520282E6f5717214004A7f26888']: { pair: '0x0D04146B2Fe5d267629a7eb341Fb4388DcdBD22f', base: '0xc00e94Cb662C3520282E6f5717214004A7f26888' }, /*COMP-USDC*/ ['0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e+0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48']: { pair: '0x1B7902a66f133d899130bF44d7D879dA89913b2e', base: '0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e' }, /*YFI-USDC*/ ['0x43Dfc4159D86F3A37A5A4B3D4580b888ad7d4DDd+0xdAC17F958D2ee523a2206206994597C13D831ec7']: { pair: '0x8876819535b48b551C9e97EBc07332C7482b4b2d', base: '0x43Dfc4159D86F3A37A5A4B3D4580b888ad7d4DDd' }, /*DODO-USDT*/ ['0xa0afAA285Ce85974c3C881256cB7F225e3A1178a+0xdAC17F958D2ee523a2206206994597C13D831ec7']: { pair: '0x85F9569B69083C3e6aefFd301BB2c65606b5D575', base: '0xa0afAA285Ce85974c3C881256cB7F225e3A1178a' }, /*wCRES-USDT*/ ['0x4691937a7508860F876c9c0a2a617E7d9E945D4B+0xdAC17F958D2ee523a2206206994597C13D831ec7']: { pair: '0x181D93EA28023bf40C8bB94796c55138719803B4', base: '0x4691937a7508860F876c9c0a2a617E7d9E945D4B' }, /*WOO-USDT*/ ['0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9+0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48']: { pair: '0x94512fd4Fb4FEb63a6C0F4bEDEcC4A00eE260528', base: '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9' }, /*AAVE-USDC*/ ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48+0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F']: { pair: '0xCa7b0632bd0E646B0f823927D3D2e61B00fE4D80', base: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F' }, /*SNX-USDC*/ ['0x054f76beED60AB6dBEb23502178C52d6C5dEbE40+0xdAC17F958D2ee523a2206206994597C13D831ec7']: { pair: '0x9D9793e1E18CDEe6cf63818315D55244f73EC006', base: '0x054f76beED60AB6dBEb23502178C52d6C5dEbE40' }, /*FIN-USDT*/ /*BSC*/ ['0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c+0xe6DF05CE8C8301223373CF5B969AFCb1498c5528']: { pair: '0x5BDCf4962FDED6B7156E710400F4C4c031f600dC', base: '0xe6DF05CE8C8301223373CF5B969AFCb1498c5528' }, /*KOGE-WBNB*/ ['0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c+0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56']: { pair: '0x327134dE48fcDD75320f4c32498D1980470249ae', base: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' }, /*WBNB-BUSD*/ } export class Pair { public ZERO_ADDRESS: string = '0x0000000000000000000000000000000000000000' public NETWORK_ID: number public WEB3_URL: string public DODO_ZOO: string public constructor( _NETWORK_ID: number, _WEB3_URL?: string ) { this.NETWORK_ID = _NETWORK_ID switch (_NETWORK_ID) { case 1: this.WEB3_URL = _WEB3_URL || DODO_SDK_DATA.WEB3_URL this.DODO_ZOO = DODO_SDK_DATA.DODO_ZOO break; case 42: this.WEB3_URL = _WEB3_URL || DODO_SDK_DATA.WEB3_URL_KOVAN this.DODO_ZOO = DODO_SDK_DATA.DODO_ZOO_KOVAN break; case 56: this.WEB3_URL = _WEB3_URL || DODO_SDK_DATA.WEB3_URL_BSC this.DODO_ZOO = DODO_SDK_DATA.DODO_ZOO_BSC } } public async getAddress( token0Address: string, token1Address: string, web3Provider: any = null ) { const tokens = sortsAddress(token0Address, token1Address) ? [token0Address, token1Address] : [token1Address, token0Address] if (PAIR_ADDRESS_CACHE?.[tokens[0] + "+" + tokens[1]] === undefined) { //TODO: hacked if (this.NETWORK_ID == 1 || this.NETWORK_ID == 56) return { pair: '', base: '' } let { pair, base } = await this.getPairAddress(token0Address, token1Address, web3Provider) PAIR_ADDRESS_CACHE = { ...PAIR_ADDRESS_CACHE, [tokens[0] + "+" + tokens[1]]: pair === this.ZERO_ADDRESS ? { pair: '', base: '' } : { pair, base } } } return PAIR_ADDRESS_CACHE[tokens[0] + "+" + tokens[1]] } public async getPairAddress( token0Address: string, token1Address: string, web3Provider: any = null ) { const web3 = new Web3(web3Provider || new Web3.providers.HttpProvider(this.WEB3_URL)); let dodoZoo = new web3.eth.Contract(DODO_ZOO_ABI['default'], this.DODO_ZOO) let pair = await dodoZoo.methods.getDODO(token0Address, token1Address).call() let base = token0Address; if (pair === this.ZERO_ADDRESS) { pair = await dodoZoo.methods.getDODO(token1Address, token0Address).call() base = token1Address; } return { pair, base } } }