| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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
- }
- }
|