const web3 = require('hardhat').web3 const logger = require("../../utils/logger") const BigNumber = require('ethers').BigNumber const ierc20abi = require('../../abi/IERC20_ABI.json') const contracts = require('../../config/contracts') const Time = require("../../utils/time") const ChainLib = require("../lib/chain") class LpGenerate { tokenInstance = {} lpInstance = {} async handlePosition(routerObj) { const block = routerObj.type === 'univ2' ? 'UNIV2DEX' : 'UNIV3DEX' const hash = routerObj.type === 'univ2' ? routerObj.factory : routerObj.router + '_router' try { // 拉取当前pull状态信息 const pullState = await History.findByHashOrBlockOrDataVague(block, hash, '', 0, 200) let nowPosition = 0 // 没有状态信息的情况 if (pullState.data.length === 0) { await History.appendOrUpdate(block, hash, {"next": 0}) } else { nowPosition = pullState.data[0].dataObj.next } return nowPosition } catch (e) { logger.error(`Pull state error, router: ${routerObj.router}, factory: ${routerObj.factory}`) logger.error(e) } return 0 } parseFactory(router, factoryAbi, factoryAddress) { if (router.factoryObj === null) { router.factoryObj = new web3.eth.Contract(factoryAbi, factoryAddress) } return router.factoryObj } async run() { logger.debug('Pull lp start.') // 初始化410 v2工具箱 const v2ToolBy410Abi = require('../../abi/410_V2_TOOLS.json') const v2ToolBy410 = new web3.eth.Contract(v2ToolBy410Abi, contracts.V2_TOOLS_BY_410) const v2FactoryAbi = require('../../abi/UNIV2_FACTORY_ABI.json') // router const routerList = require('../../config/router-list.json') // while (true) { // for (const routerObj of routerList) { // try { // let pairsLength = 0 // // const factoryAddress = routerObj.factory // // 获取当前pull状态 // let position = await this.handlePosition(routerObj) // let v2Factory = undefined // // v2,v3分开处理 // if (routerObj.type === 'univ2') { // // 获取工厂实例 // v2Factory = this.parseFactory(routerObj, v2FactoryAbi, factoryAddress) // // 获取当前pairsLength // pairsLength = await v2Factory.methods.allPairsLength().call() // } // // 如果有未获取的池子 // const haveNewLp = position < pairsLength // // // 打印信息 // if (haveNewLp) { // logger.debug(`Router address: ${routerObj.router}`) // if (routerObj.type === 'univ2') { // logger.debug(`factory: ${factoryAddress}, ${position} / ${pairsLength}.`) // } else { // logger.debug(`position: ${routerObj.position}, ${position} / ${pairsLength}.`) // } // } // // // 挨个处理lp信息 // for (; position < pairsLength; position++) { // await this.handleLp(position, pairsLength, routerObj, v2ToolBy410) // } // // if (haveNewLp) { // if (routerObj.type === 'univ2') { // await History.appendOrUpdate('UNIV2DEX', routerObj.factory, {"next": position}) // } // // logger.debug('') // logger.debug('') // logger.debug('') // } // } catch (e) { // logger.debug(e) // } // } // // await Time.delay(12000) // } } } async function main() { logger.info(await ChainLib.getChainFromCommand()) } main().catch((error) => { console.error(error); process.exitCode = 1; })