index.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. const web3 = require('hardhat').web3
  2. const logger = require("../../utils/logger")
  3. const BigNumber = require('ethers').BigNumber
  4. const ierc20abi = require('../../abi/IERC20_ABI.json')
  5. const contracts = require('../../config/contracts')
  6. const Time = require("../../utils/time")
  7. const ChainLib = require("../lib/chain")
  8. class LpGenerate {
  9. tokenInstance = {}
  10. lpInstance = {}
  11. async handlePosition(routerObj) {
  12. const block = routerObj.type === 'univ2' ? 'UNIV2DEX' : 'UNIV3DEX'
  13. const hash = routerObj.type === 'univ2' ? routerObj.factory : routerObj.router + '_router'
  14. try {
  15. // 拉取当前pull状态信息
  16. const pullState = await History.findByHashOrBlockOrDataVague(block, hash, '', 0, 200)
  17. let nowPosition = 0
  18. // 没有状态信息的情况
  19. if (pullState.data.length === 0) {
  20. await History.appendOrUpdate(block, hash, {"next": 0})
  21. } else {
  22. nowPosition = pullState.data[0].dataObj.next
  23. }
  24. return nowPosition
  25. } catch (e) {
  26. logger.error(`Pull state error, router: ${routerObj.router}, factory: ${routerObj.factory}`)
  27. logger.error(e)
  28. }
  29. return 0
  30. }
  31. parseFactory(router, factoryAbi, factoryAddress) {
  32. if (router.factoryObj === null) {
  33. router.factoryObj = new web3.eth.Contract(factoryAbi, factoryAddress)
  34. }
  35. return router.factoryObj
  36. }
  37. async run() {
  38. logger.debug('Pull lp start.')
  39. // 1. 构造web3对象
  40. // 2. abi加载
  41. // 3. 开始处理
  42. // 3.1. 拉取指定链所有factory(记得新增链工具合约配置信息)
  43. // 3.2. 拉取指定链所有factory的拉取情况
  44. // 3.3. 从指定位置开始拉取lp
  45. // 3.3.1 更新或新增lp
  46. // 3.3.2 更新或新增token
  47. // 初始化410 v2工具箱
  48. const v2ToolBy410Abi = require('../../abi/410_V2_TOOLS.json')
  49. const v2ToolBy410 = new web3.eth.Contract(v2ToolBy410Abi, contracts.V2_TOOLS_BY_410)
  50. const v2FactoryAbi = require('../../abi/UNIV2_FACTORY_ABI.json')
  51. // while (true) {
  52. // for (const routerObj of routerList) {
  53. // try {
  54. // let pairsLength = 0
  55. //
  56. // const factoryAddress = routerObj.factory
  57. // // 获取当前pull状态
  58. // let position = await this.handlePosition(routerObj)
  59. // let v2Factory = undefined
  60. // // v2,v3分开处理
  61. // if (routerObj.type === 'univ2') {
  62. // // 获取工厂实例
  63. // v2Factory = this.parseFactory(routerObj, v2FactoryAbi, factoryAddress)
  64. // // 获取当前pairsLength
  65. // pairsLength = await v2Factory.methods.allPairsLength().call()
  66. // }
  67. // // 如果有未获取的池子
  68. // const haveNewLp = position < pairsLength
  69. //
  70. // // 打印信息
  71. // if (haveNewLp) {
  72. // logger.debug(`Router address: ${routerObj.router}`)
  73. // if (routerObj.type === 'univ2') {
  74. // logger.debug(`factory: ${factoryAddress}, ${position} / ${pairsLength}.`)
  75. // } else {
  76. // logger.debug(`position: ${routerObj.position}, ${position} / ${pairsLength}.`)
  77. // }
  78. // }
  79. //
  80. // // 挨个处理lp信息
  81. // for (; position < pairsLength; position++) {
  82. // await this.handleLp(position, pairsLength, routerObj, v2ToolBy410)
  83. // }
  84. //
  85. // if (haveNewLp) {
  86. // if (routerObj.type === 'univ2') {
  87. // await History.appendOrUpdate('UNIV2DEX', routerObj.factory, {"next": position})
  88. // }
  89. //
  90. // logger.debug('')
  91. // logger.debug('')
  92. // logger.debug('')
  93. // }
  94. // } catch (e) {
  95. // logger.debug(e)
  96. // }
  97. // }
  98. //
  99. // await Time.delay(12000)
  100. // }
  101. }
  102. }
  103. async function main() {
  104. logger.info(await ChainLib.getChainFromCommand())
  105. }
  106. main().catch((error) => {
  107. console.error(error);
  108. process.exitCode = 1;
  109. })