lp-lib.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. const logger = require("../../utils/logger");
  2. const {BigNumber} = require("ethers");
  3. module.exports = class LpLib {
  4. async handleLp(position, pairsLength, routerObj, v2ToolBy410) {
  5. // 1. 获取lp
  6. let lp = undefined
  7. if (routerObj.type === 'univ2') {
  8. lp = await this.getV2PoolByPosition(routerObj, position, v2ToolBy410)
  9. }
  10. if (lp) {
  11. // 2. 保存Lp信息
  12. await this.saveLp(lp, 'lp')
  13. // 3. 保存Lp的Token到Token表
  14. await this.saveToken(lp, 'token')
  15. }
  16. if (lp) {
  17. logger.debug(`${position + 1} / ${pairsLength}, ${lp.name}-${lp.LP}-${routerObj.chain}`)
  18. } else {
  19. logger.debug(`lp get filed. ${position + 1} / ${pairsLength}, ${routerObj.name}-${routerObj.router}-${routerObj.chain}`)
  20. }
  21. }
  22. async saveLp(lp, type = '0') {
  23. // 本地lp实例存档
  24. this.lpInstance[lp.LP.toLowerCase()] = lp
  25. await History.appendOrUpdate(type, lp.LP, lp)
  26. }
  27. async getV2PoolByPosition(routerObj, position, v2ToolBy410) {
  28. try {
  29. const info = await v2ToolBy410.methods.getPairIdInfo(routerObj.factory, position).call()
  30. const symbol0 = info['2'].replace(/[^A-Za-z0-9]+/g, '').substring(0, 10)
  31. const symbol1 = info['6'].replace(/[^A-Za-z0-9]+/g, '').substring(0, 10)
  32. const name = `${routerObj.name}_${symbol0}_${symbol1}`
  33. const sum2 = BigNumber.from(info['1']).add(BigNumber.from(info['5']))._hex.replace('0x0', '0x')
  34. return {
  35. LP: info['0'],
  36. decimals0: info['3'],
  37. decimals1: info['7'],
  38. factory: routerObj.factory,
  39. feei: routerObj.fee,
  40. id: position,
  41. name: name,
  42. r0: info['4'],
  43. r1: info['8'],
  44. router: routerObj.router,
  45. sum2: sum2,
  46. symbol0: symbol0,
  47. symbol1: symbol1,
  48. token0: info['1'],
  49. token1: info['5']
  50. }
  51. } catch (e) {
  52. logger.info(e)
  53. }
  54. return undefined
  55. }
  56. }