| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import { web3 } from "hardhat";
- import History from "./interface/history";
- import contracts from "../config/contracts";
- import logger from "../utils/logger";
- import v2_routers from "../config/v2_routers";
- import {BigNumber} from "ethers";
- import {replaceAll} from "hardhat/internal/util/strings";
- async function handlePosition(router: String, factory: String) {
- try {
- // 拉取当前pull状态信息
- const pullState = await History.findByHashOrBlockOrDataVague('UNIV2DEX', factory, '', 0, 200)
- let nowPosition = 0
- // 没有状态信息的情况
- if (pullState.data.length == 0) {
- const appendRst = await History.appendOrUpdate('UNIV2DEX', factory, {"now": nowPosition})
- logger.debug(appendRst)
- } else {
- nowPosition = pullState.data[0].dataObj.now
- }
- return nowPosition
- } catch (e) {
- logger.error(`Pull state error, router: ${router}, factory: ${factory}`)
- logger.error(e)
- }
- return 0
- }
- async function handleAFactory(router: String, factory: String, position: number, pairsLength: number, v2_410_tool: any) {
- let errorCount = 0
- while (position <= pairsLength) {
- try {
- const info = await v2_410_tool.methods.getPairIdInfo(factory, position).call()
- // return (
- // 0 pairInfo.lp,
- // 1 pairInfo.token0,
- // 2 pairInfo.symbol0,
- // 3 pairInfo.decimals0,
- // 4 pairInfo.r0,
- // 5 pairInfo.token1,
- // 6 pairInfo.symbol1,
- // 7 pairInfo.decimals1,
- // 8 pairInfo.r1
- // );
- 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 = `${router.slice(2, 4) + router.slice(-2)}_${symbol0}_${symbol1}`
- const sum2 = replaceAll(BigNumber.from(info['1']).add(BigNumber.from(info['5']))._hex, '0x0', '0x')
- const data = {
- LP: info['0'],
- decimals0: info['3'],
- decimals1: info['7'],
- factory: factory,
- feei: 30,
- id: position,
- name: name,
- r0: info['4'],
- r1: info['8'],
- router: router,
- sum2: sum2,
- symbol0: symbol0,
- symbol1: symbol1,
- token0: info['1'],
- token1: info['5']
- }
- const insertRst = await History.appendOrUpdate('0', info['0'], data)
- logger.debug(insertRst.msg, `, hash: ${info['0']}, ${position} / ${pairsLength}`)
- // 每十次更新一次position
- if (position % 50 == 0) {
- await History.appendOrUpdate('UNIV2DEX', factory, {"now": position})
- logger.debug(`Position updated: ${position}`)
- }
- errorCount = 0
- } catch (e) {
- logger.error(JSON.stringify(e))
- errorCount++
- }
- position++
- if (errorCount >= 5) {
- position = position - 5
- break;
- }
- }
- }
- async function main() {
- const fromZero: boolean = true
- logger.debug('Pull v2 start.')
- const v2_router_abi = require('../abi/UNIV2_ROUTER_ABI.json')
- const v2_factory_abi = require('../abi/UNIV2_FACTORY_ABI.json')
- const v2_tool_abi = require('../abi/410_V2_TOOLS.json')
- // 初始化410 v2工具箱
- const v2_410_tool = new web3.eth.Contract(v2_tool_abi, contracts.TOOLS_410_V2)
- for (let router_index = 0; router_index < v2_routers.length; router_index++) {
- const v2_router_address = v2_routers[router_index]
- try {
- logger.debug(`Router address: ${v2_router_address}`)
- // 获取工厂地址
- const v2_router = new web3.eth.Contract(v2_router_abi, v2_router_address)
- const v2_factory_address = await v2_router.methods.factory().call()
- // 获取工厂实例
- const v2_factory = new web3.eth.Contract(v2_factory_abi, v2_factory_address)
- // 获取当前pairsLength
- const pairsLength = await v2_factory.methods.allPairsLength().call()
- // 获取当前pull状态
- const position = fromZero ? 0 : await handlePosition(v2_router_address, v2_factory_address)
- logger.debug(`factory: ${v2_factory_address}, ${position} / ${pairsLength}.`)
- await handleAFactory(v2_router_address, v2_factory_address, position, pairsLength, v2_410_tool)
- } catch (e) {
- logger.error(`New contract error, router: ${v2_router_address}`)
- logger.error(e)
- }
- }
- }
- main().catch((error) => {
- console.error(error);
- process.exitCode = 1;
- })
|