Преглед изворни кода

重构第一阶段完成。

龚成明 пре 3 година
родитељ
комит
22ce223c5b
5 измењених фајлова са 130 додато и 152 уклоњено
  1. 2 2
      config/contracts.ts
  2. 18 17
      config/router-list.json
  3. 108 131
      scripts/ready/pushv2.ts
  4. 1 1
      scripts/ready/pushv2FromHead.ts
  5. 1 1
      test/PullPoolTest.ts

+ 2 - 2
config/contracts.ts

@@ -9,6 +9,6 @@ export default {
   ZERO: '0x0000000000000000000000000000000000000000',
   CALC: '0x30c34b111121aCDb423eF2C0e39235Dc68a793A4',
   FLASH: '0x672746E54B6FB7Bf6748De46271b68B112B79a66',
-  TOOLS_410_V2: '0xDE93d2cd45b7E0056671A542FfB4343DFd67dA51',
-  TOOLS_V3: '0x5261aD5CB71fE1A37a3722c40E93a80e84f62613'
+  V2_TOOLS_BY_410: '0xDE93d2cd45b7E0056671A542FfB4343DFd67dA51',
+  V3_TOOLS: '0x5261aD5CB71fE1A37a3722c40E93a80e84f62613'
 }

+ 18 - 17
config/v2RouterInfo.json → config/router-list.json

@@ -1,19 +1,20 @@
 [
-  {"name": "AAA", "router": "0x0000000000000000000000000000000000000000","factory": "0xfA969454d450dFB86a2dCeFfEc48529F799F4a69","fee": "3000","type": "ETHW"},
-  {"name": "POWER", "router": "0x0000000000000000000000000000000000000000","factory": "0xD51CFEb0fa23101f67cF62EB02D0a82A4BaD52b7","fee": "3000","type": "ETHW"},
-  {"name":"SEA","router":"0xc0Fb1f3100e8Fb477e9E42F748e94884CEc03810","factory":"0x1Ee0fe7f80BeA6353b137B2E7DCA9e26F3c6F442","fee":"3000","type":""},
-  {"name":"CRO","router":"0xCeB90E4C17d626BE0fACd78b79c9c87d7ca181b3","factory":"0x9DEB29c9a4c7A88a3C0257393b7f3335338D9A9D","fee":"3000","type":""},
-  {"name":"SUSHI","router":"0xd9e1ce17f2641f24ae83637ab66a2cca9c378b9f","factory":"0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac","fee":"3000","type":""},
-  {"name":"EQ","router":"0xf6A86EAA9Ea0F38F66B3718114AE79acaf35e02F","factory":"0xF14421F0BCf9401d8930872C2d44d8e67e40529a","fee":"3000","type":""},
-  {"name":"SHIBA","router":"0x03f7724180aa6b939894b5ca4314783b0b36b329","factory":"0x115934131916C8b277DD010Ee02de363c09d037c","fee":"3000","type":""},
-  {"name":"DOOAR","router":"0x53e0e51b5ed9202110d7ecd637a4581db8b9879f","factory":"0x1e895bFe59E3A5103e8B7dA3897d1F2391476f3c","fee":"10000","type":""},
-  {"name":"SAITA","router":"0x0c17e776cd218252adfca8d4e761d3fe757e9778","factory":"0x35113a300ca0D7621374890ABFEAC30E88f214b1","fee":"2000","type":""},
-  {"name":"RADIO","router":"0x3e445e3280c5747a188db8d0ab7762838a50e4ff","factory":"0x91fAe1bc94A9793708fbc66aDcb59087C46dEe10","fee":"1000","type":""},
-  {"name":"UP","router":"0xe6e90bc9f3b95cdb69f48c7bfdd0ede1386b135a","factory":"0xbAcC776b231c571a7e6ab7Bc2C8a099e07153377","fee":"3000","type":""},
-  {"name":"EW","router":"0x0000000000000000000000000000000000000000","factory":"0x78376072F4945b2A5450B1A6B41a85ff20034527","fee":"3000","type":"ETHW"},
-  {"name":"UNIV2","router":"0x7a250d5630b4cf539739df2c5dacb4c659f2488d","factory":"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f","fee":"3000","type":""},
-  {"name":"LFG","router":"0x4f381d5fF61ad1D0eC355fEd2Ac4000eA1e67854","factory":"0xf66cef53c518659bfa0a9a4aa07445af08bf9b3a","fee":"3000","type":"ETHW"},
-  {"name":"UNIW","router":"0x633e494C22D163F798b25b0264b92Ac612645731","factory":"0xaBC4325bAD182076EAa5877c68437833d596D3Ee","fee":"1700","type":"ETHW"},
-  {"name":"POW","router":"0x6851e767Aaa9C4674Fe8cAE95AFCc819b7Fb0403","factory":"0x62009bD6349A3A1d7f1bcC7C69492Cd26F1FBF75","fee":"3000","type":"ETHW"},
-  {"name":"HIP","router":"0x8F2a57bbC2B3870Ed321541F091f9A3EbE008Ad4","factory":"0x8cF9A887e53be909C221A2708E72898546dAB7Cc","fee":"3000","type":"ETHW"}
+  {"name":"AAA","router":"0x0000000000000000000000000000000000000000","factory":"0xfA969454d450dFB86a2dCeFfEc48529F799F4a69","fee":"3000","type":"univ2","chain":"ethw"},
+  {"name":"POWER","router":"0x0000000000000000000000000000000000000000","factory":"0xD51CFEb0fa23101f67cF62EB02D0a82A4BaD52b7","fee":"3000","type":"univ2","chain":"ethw"},
+  {"name":"SEA","router":"0xc0Fb1f3100e8Fb477e9E42F748e94884CEc03810","factory":"0x1Ee0fe7f80BeA6353b137B2E7DCA9e26F3c6F442","fee":"3000","type":"univ2","chain":"eth"},
+  {"name":"CRO","router":"0xCeB90E4C17d626BE0fACd78b79c9c87d7ca181b3","factory":"0x9DEB29c9a4c7A88a3C0257393b7f3335338D9A9D","fee":"3000","type":"univ2","chain":"eth"},
+  {"name":"SUSHI","router":"0xd9e1ce17f2641f24ae83637ab66a2cca9c378b9f","factory":"0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac","fee":"3000","type":"univ2","chain":"eth"},
+  {"name":"EQ","router":"0xf6A86EAA9Ea0F38F66B3718114AE79acaf35e02F","factory":"0xF14421F0BCf9401d8930872C2d44d8e67e40529a","fee":"3000","type":"univ2","chain":"eth"},
+  {"name":"SHIBA","router":"0x03f7724180aa6b939894b5ca4314783b0b36b329","factory":"0x115934131916C8b277DD010Ee02de363c09d037c","fee":"3000","type":"univ2","chain":"eth"},
+  {"name":"DOOAR","router":"0x53e0e51b5ed9202110d7ecd637a4581db8b9879f","factory":"0x1e895bFe59E3A5103e8B7dA3897d1F2391476f3c","fee":"10000","type":"univ2","chain":"eth"},
+  {"name":"SAITA","router":"0x0c17e776cd218252adfca8d4e761d3fe757e9778","factory":"0x35113a300ca0D7621374890ABFEAC30E88f214b1","fee":"2000","type":"univ2","chain":"eth"},
+  {"name":"RADIO","router":"0x3e445e3280c5747a188db8d0ab7762838a50e4ff","factory":"0x91fAe1bc94A9793708fbc66aDcb59087C46dEe10","fee":"1000","type":"univ2","chain":"eth"},
+  {"name":"UP","router":"0xe6e90bc9f3b95cdb69f48c7bfdd0ede1386b135a","factory":"0xbAcC776b231c571a7e6ab7Bc2C8a099e07153377","fee":"3000","type":"univ2","chain":"eth"},
+  {"name":"EW","router":"0x0000000000000000000000000000000000000000","factory":"0x78376072F4945b2A5450B1A6B41a85ff20034527","fee":"3000","type":"univ2","chain":"ethw"},
+  {"name":"UNIV2","router":"0x7a250d5630b4cf539739df2c5dacb4c659f2488d","factory":"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f","fee":"3000","type":"univ2","chain":"eth"},
+  {"name":"LFG","router":"0x4f381d5fF61ad1D0eC355fEd2Ac4000eA1e67854","factory":"0xf66cef53c518659bfa0a9a4aa07445af08bf9b3a","fee":"3000","type":"univ2","chain":"ethw"},
+  {"name":"UNIW","router":"0x633e494C22D163F798b25b0264b92Ac612645731","factory":"0xaBC4325bAD182076EAa5877c68437833d596D3Ee","fee":"1700","type":"univ2","chain":"ethw"},
+  {"name":"POW","router":"0x6851e767Aaa9C4674Fe8cAE95AFCc819b7Fb0403","factory":"0x62009bD6349A3A1d7f1bcC7C69492Cd26F1FBF75","fee":"3000","type":"univ2","chain":"ethw"},
+  {"name":"HIP","router":"0x8F2a57bbC2B3870Ed321541F091f9A3EbE008Ad4","factory":"0x8cF9A887e53be909C221A2708E72898546dAB7Cc","fee":"3000","type":"univ2","chain":"ethw"},
+  {"name":"UNIV3","router":"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45","position":"0xC36442b4a4522E871399CD717aBDD847Ab11FE88","fee":"0","type":"univ3","chain":"eth"}
 ]

+ 108 - 131
scripts/ready/pushv2.ts

@@ -32,81 +32,55 @@ async function handlePosition(router: String, factory: String) {
   return 0
 }
 
-async function handleAFactory(routerObj: any, position: number, pairsLength: number, v2_410_tool: any, lpList: any) {
-  while (position < pairsLength) {
-    try {
-      const info = await v2_410_tool.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 = replaceAll(BigNumber.from(info['1']).add(BigNumber.from(info['5']))._hex, '0x0', '0x')
-
-      const Lp = {
-        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'],
-        isEthW: routerObj.type == 'ETHW'
-      }
-      lpList.push(Lp)
+async function getPoolByPosition(routerObj: any, position: number, v2ToolBy410: any) {
+  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 = replaceAll(BigNumber.from(info['1']).add(BigNumber.from(info['5']))._hex, '0x0', '0x')
+
+    const lp = {
+      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'],
+      isEthW: routerObj.type == 'ETHW'
+    }
 
-      // 更新一次position
-      await History.appendOrUpdate('UNIV2DEX', routerObj.factory, {"now": position})
-    } catch (e) {}
+    // 更新一次position
+    await History.appendOrUpdate('UNIV2DEX', routerObj.factory, {"now": position})
 
-    position++
-  }
-}
+    return lp
+  } catch (e) {}
 
-async function getAllLp(v2Router: any, fromZero: boolean, v2_410_tool: any, v2_factory_abi: any, lpList: any) {
-  try {
-    const v2_factory_address = v2Router.factory
-    // 获取工厂实例
-    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(v2Router.router, v2_factory_address)
-
-    if (position + 1 < pairsLength) {
-      logger.debug(`Router address: ${v2Router.router}`)
-      logger.debug(`factory: ${v2_factory_address}, ${position + 1} / ${pairsLength}.`)
-
-      await handleAFactory(v2Router, position, pairsLength, v2_410_tool, lpList)
-    }
-  } catch (e) {
-    logger.error(`New contract error, router: ${v2Router.router}`)
-    logger.error(e)
-  }
+  return undefined
 }
 
-async function saveLpToSwapPath(lpList: any) {
-  for (let lpIndex in lpList) {
-    const lp = lpList[lpIndex]
-    const lpSum2Query = await swapPath.findBySumValueAndLevel(lp.sum2, '2')
-    let lpSum2List = []
+async function saveLpToSwapPath(lp: any) {
+  const lpSum2Query = await swapPath.findBySumValueAndLevel(lp.sum2, '2')
+  let lpSum2List = []
 
-    if (lpSum2Query.state) {
-      lpSum2List = JSON.parse(lpSum2Query.data.data)
-    }
+  if (lpSum2Query.state) {
+    lpSum2List = JSON.parse(lpSum2Query.data.data)
+  }
 
-    lpSum2List.push(lp)
+  lpSum2List.push(lp)
 
-    const insertRst = await swapPath.appendOrUpdate(lp.sum2, '2', lpSum2List)
-    logger.debug(`save path: ${lp.name}: ${insertRst.msg}, ${parseInt(lpIndex) + 1}/${lpList.length}`)
-  }
+  const insertRst = await swapPath.appendOrUpdate(lp.sum2, '2', lpSum2List)
+  logger.debug(`save path: ${lp.name}: ${insertRst.msg}`)
 }
 
 async function handleToken(pool: any, zero: boolean) {
@@ -125,91 +99,97 @@ async function handleToken(pool: any, zero: boolean) {
   return token
 }
 
-async function saveToken(lpList: any, type='token') {
-  for (let lpIndex in lpList) {
-    const lp = lpList[lpIndex]
-
-    try {
-      const token = await handleToken(lp, true)
-
-      const saveRst = await history.appendOrUpdate(type, token.address, token)
-      logger.debug(`${token.name} ${saveRst.msg}`)
-    } catch (e) {}
+async function saveToken(lp: any, type='token') {
+  try {
+    const token = await handleToken(lp, true)
 
-    try {
-      const token = await handleToken(lp, false)
+    const saveRst = await history.appendOrUpdate(type, token.address, token)
+    logger.debug(`${token.name} ${saveRst.msg}`)
+  } catch (e) {}
 
-      const saveRst = await history.appendOrUpdate(type, token.address, token)
-      logger.debug(`${token.name} ${saveRst.msg}`)
-    } catch (e) {}
+  try {
+    const token = await handleToken(lp, false)
 
-    logger.debug(`insert token: ${parseInt(lpIndex) + 1} / ${lpList.length}`)
-  }
+    const saveRst = await history.appendOrUpdate(type, token.address, token)
+    logger.debug(`${token.name} ${saveRst.msg}`)
+  } catch (e) {}
 }
 
-async function saveLp(lpList: any, type='0') {
-  for (let lpIndex in lpList) {
-    const lp = lpList[lpIndex]
-    const insertRst = await History.appendOrUpdate(type, lp.LP, lp)
-    logger.debug(`insert lp:${insertRst.msg}, hash: ${lp.LP}, ${parseInt(lpIndex) + 1} / ${lpList.length}`)
-  }
+async function saveLp(lp: any, type='0') {
+  const insertRst = await History.appendOrUpdate(type, lp.LP, lp)
+  logger.debug(`insert lp:${insertRst.msg}, hash: ${lp.LP}.}`)
 }
 
-async function filterLp(lpList: any, filteredLpList: any) {
-  for (let lpIndex in lpList) {
-    const lp = lpList[lpIndex]
-
-    if (lp.token0.toLowerCase() === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2') {
-      if (parseInt(lp.r0) > 20 * 1e18) filteredLpList.push(lp)
-    } else if (lp.token1.toLowerCase() === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2') {
-      if (parseInt(lp.r1) > 20 * 1e18) filteredLpList.push(lp)
-    } else {
-      filteredLpList.push(lp)
-    }
+async function filterLp(lp: any) {
+  if (lp.token0.toLowerCase() === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2') {
+    return parseInt(lp.r0) > 20 * 1e18
+  } else if (lp.token1.toLowerCase() === '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2') {
+    return parseInt(lp.r1) > 20 * 1e18
   }
+
+  return true
 }
 
 async function main() {
   logger.debug('Pull v2 start.')
 
-  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)
-  const v2RouterInfo = require('../../config/v2RouterInfo.json')
+  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')
+
+
+  const routerList: Array<any> = require('../../config/router-list.json')
 
   let fromZero: boolean = false
-  const lpList: any = []
-  const filteredLpList: any = []
 
   while (true) {
-    for (let router_index = 0; router_index < v2RouterInfo.length; router_index++) {
-      lpList.length = 0
-      filteredLpList.length = 0
-
-      // 1. 获取Lp
-      await getAllLp(v2RouterInfo[router_index], fromZero, v2_410_tool, v2_factory_abi, lpList)
-      // 2. 保存Lp信息
-      await saveLp(lpList, '0')
-      // 3. 保存Lp的Token到Token表
-      await saveToken(lpList, 'token')
-      // 4. 过滤Lp
-      await filterLp(lpList, filteredLpList)
-      // 5. 将过滤后的Lp保存到二阶表
-      await saveLpToSwapPath(filteredLpList)
-      // 6. 保存筛选之后的的Token到TopToken表
-      await saveToken(filteredLpList, 'topToken')
-      // 7. 保存过滤后的Lp到TopLp
-      await saveLp(filteredLpList, 'topLp')
-
-      if (lpList.length > 0) {
+    for (const routerObj of routerList) {
+      const v2FactoryAddress = routerObj.factory
+      // 获取工厂实例
+      const v2Factory = new web3.eth.Contract(v2FactoryAbi, v2FactoryAddress)
+      // 获取当前pull状态
+      const position = fromZero ? 0 : await handlePosition(routerObj.router, v2FactoryAddress)
+      // 获取当前pairsLength
+      const pairsLength = await v2Factory.methods.allPairsLength().call()
+      // 如果有未获取的池子
+      const haveNewLp = position + 1 < pairsLength
+
+      // 打印信息
+      if (haveNewLp) {
+        logger.debug(`Router address: ${routerObj.router}`)
+        logger.debug(`factory: ${v2FactoryAddress}, ${position + 1} / ${pairsLength}.`)
+      }
+
+      // 挨个处理lp信息
+      while (position < pairsLength) {
+        logger.debug(`${position + 1} / ${pairsLength}`)
+        // 1. 获取lp
+        const lp = await getPoolByPosition(routerObj, position, v2ToolBy410)
+        // 2. 保存Lp信息
+        await saveLp(lp, '0')
+        // 3. 保存Lp的Token到Token表
+        await saveToken(lp, 'token')
+        // 4. 过滤Lp
+        if (!(await filterLp(lp))) continue
+        // 5. 将过滤后的Lp保存到二阶表
+        await saveLpToSwapPath(lp)
+        // 6. 保存筛选之后的的Token到TopToken表
+        await saveToken(lp, 'topToken')
+        // 7. 保存过滤后的Lp到TopLp
+        await saveLp(lp, 'topLp')
+      }
+
+      if (haveNewLp) {
         logger.debug('')
         logger.debug('')
         logger.debug('')
       }
     }
 
+    if (fromZero) fromZero = false;
+  }
+
     // 数据流、abstruct
     // v2RouterInfo.forEach(async (routerInfo) => {
     //   const lpList = await getAllLp(routerInfo);
@@ -220,9 +200,6 @@ async function main() {
     //   })
     // })
     //
-
-    if (fromZero) fromZero = false;
-  }
 }
 
 main().catch((error) => {

+ 1 - 1
scripts/ready/pushv2FromHead.ts

@@ -173,7 +173,7 @@ async function main() {
 
   // 初始化410 v2工具箱
   const v2_410_tool = new web3.eth.Contract(v2_tool_abi, contracts.TOOLS_410_V2)
-  const v2RouterInfo = require('../../config/v2RouterInfo.json')
+  const v2RouterInfo = require('../../config/router-list.json')
 
   let fromZero: boolean = true
   const lpList: any = []

+ 1 - 1
test/PullPoolTest.ts

@@ -28,7 +28,7 @@ describe('Pull pool test', () => {
 
   it ('pull v2', async () => {
     logger.debug('start pull v2')
-    const v2RouterList = require('../config/v2RouterInfo.json')
+    const v2RouterList = require('../config/router-list.json')
 
     const v2PoolList = []
     for (let v2RouterIndex in v2RouterList) {