const logger = require("../../utils/logger"); const {BigNumber} = require("ethers"); module.exports = class LpLib { async handleLp(position, pairsLength, routerObj, v2ToolBy410) { // 1. 获取lp let lp = undefined if (routerObj.type === 'univ2') { lp = await this.getV2PoolByPosition(routerObj, position, v2ToolBy410) } if (lp) { // 2. 保存Lp信息 await this.saveLp(lp, 'lp') // 3. 保存Lp的Token到Token表 await this.saveToken(lp, 'token') } if (lp) { logger.debug(`${position + 1} / ${pairsLength}, ${lp.name}-${lp.LP}-${routerObj.chain}`) } else { logger.debug(`lp get filed. ${position + 1} / ${pairsLength}, ${routerObj.name}-${routerObj.router}-${routerObj.chain}`) } } async saveLp(lp, type = '0') { // 本地lp实例存档 this.lpInstance[lp.LP.toLowerCase()] = lp await History.appendOrUpdate(type, lp.LP, lp) } async getV2PoolByPosition(routerObj, position, v2ToolBy410) { try { const info = await v2ToolBy410.methods.getPairIdInfo(routerObj.factory, position).call() const symbol0 = info['2'].replace(/[^A-Za-z0-9]+/g, '').substring(0, 10) const symbol1 = info['6'].replace(/[^A-Za-z0-9]+/g, '').substring(0, 10) const name = `${routerObj.name}_${symbol0}_${symbol1}` const sum2 = BigNumber.from(info['1']).add(BigNumber.from(info['5']))._hex.replace('0x0', '0x') return { LP: info['0'], decimals0: info['3'], decimals1: info['7'], factory: routerObj.factory, feei: routerObj.fee, id: position, name: name, r0: info['4'], r1: info['8'], router: routerObj.router, sum2: sum2, symbol0: symbol0, symbol1: symbol1, token0: info['1'], token1: info['5'] } } catch (e) { logger.info(e) } return undefined } }