Browse Source

逻辑写完,上线测试

skyfffire 2 years ago
parent
commit
ea24df013b
2 changed files with 44 additions and 26 deletions
  1. 35 18
      scripts/lib/lp-lib.js
  2. 9 8
      scripts/maintenance/index.js

+ 35 - 18
scripts/lib/lp-lib.js

@@ -169,6 +169,16 @@ module.exports = class LpLib {
 
         lp.r1Str = r1s[relativeIndex]
         lp.r1 = parseInt(lp.r1Str)
+
+        if (lp.r0 === 404 && lp.r1 === 404) {
+          lp.r0Str = '0'
+          lp.r0 = 0
+
+          lp.r1Str = '0'
+          lp.r1 = 0
+
+          lp.level = LpLib.LEVEL.NOT
+        }
       }
     }
   }
@@ -223,53 +233,60 @@ module.exports = class LpLib {
   }
 
   getLpEthValue(lp, baseTokenConvertEthValueMap, maxValueLpMap) {
+    if (lp.r0 === 0 && lp.r1 === 0) {
+      return 0
+    }
+
     const token0 = lp.token0
     const token1 = lp.token1
 
+    // 1.两token之一能直接与ethw或wethw做直接池子的
     if (ethTokenAddressList.indexOf(token0) !== -1 || ethTokenAddressList.indexOf(token1) !== -1) {
-      return {
-        '0': ethTokenAddressList.indexOf(token0) !== -1 ? 1 : 0,
-        '1': ethTokenAddressList.indexOf(token1) !== -1 ? 1 : 0
+      if (ethTokenAddressList.indexOf(token0) !== -1) {
+        const ethToken = baseTokenMap[token0]
+        return 2 * lp.r0 / (10 ** ethToken.decimals)
+      } else if (ethTokenAddressList.indexOf(token1) !== -1) {
+        const ethToken = baseTokenMap[token1]
+        return 2 * lp.r1 / (10 ** ethToken.decimals)
       }
     }
 
-    // 1.两token之一能直接与ethw或wethw做直接池子的
     // 2.两token之一能直接与baseToken做池子的
-    // 这两种情况直接带入baseTokenConvertEthValueMap计算
+    // 带入maxValueLpMap计算
     for (const baseTokenAddress of baseTokenAddressList) {
       const token0AndBaseKey = this.getKey(token0, baseTokenAddress)
       const token0AndBaseTokenLp = maxValueLpMap[token0AndBaseKey]
 
       if (token0AndBaseTokenLp) {
-        const priceMap = {}
         if (token0AndBaseTokenLp.token0 === token0) {
-          priceMap['0'] = token0AndBaseTokenLp.in1Token0OutToken1 * baseTokenConvertEthValueMap[baseTokenAddress]
+          let price = token0AndBaseTokenLp.in1Token0OutToken1 * baseTokenConvertEthValueMap[baseTokenAddress]
+
+          return 2 * lp.r0 * price / (10 ** lp.decimals0)
         } else {
-          priceMap['0'] = token0AndBaseTokenLp.in1Token1OutToken0 * baseTokenConvertEthValueMap[baseTokenAddress]
-        }
-        priceMap['1'] = 0
+          let price = token0AndBaseTokenLp.in1Token1OutToken0 * baseTokenConvertEthValueMap[baseTokenAddress]
 
-        return priceMap
+          return 2 * lp.r1 * price / (10 ** lp.decimals1)
+        }
       }
 
       const token1AndBaseKey = this.getKey(token1, baseTokenAddress)
       const token1AndBaseTokenLp = maxValueLpMap[token1AndBaseKey]
       if (token1AndBaseTokenLp) {
-        const priceMap = {}
         if (token1AndBaseTokenLp.token0 === token1) {
-          priceMap['1'] = token1AndBaseTokenLp.in1Token0OutToken1 * baseTokenConvertEthValueMap[baseTokenAddress]
+          let price = token1AndBaseTokenLp.in1Token0OutToken1 * baseTokenConvertEthValueMap[baseTokenAddress]
+
+          return 2 * lp.r0 * price / (10 ** lp.decimals0)
         } else {
-          priceMap['1'] = token1AndBaseTokenLp.in1Token1OutToken0 * baseTokenConvertEthValueMap[baseTokenAddress]
-        }
-        priceMap['0'] = 0
+          let price = token1AndBaseTokenLp.in1Token1OutToken0 * baseTokenConvertEthValueMap[baseTokenAddress]
 
-        return priceMap
+          return 2 * lp.r1 * price / (10 ** lp.decimals1)
+        }
       }
     }
 
     // 3.两token都不能与baseToken做池子的
     // 这种情况则视为lp类型池子
-    return {'0': 0, '1': 0}
+    return 0
   }
 
   getMaxValueLpMap(lpList) {

+ 9 - 8
scripts/maintenance/index.js

@@ -30,16 +30,17 @@ class LpMaintenance {
     const baseTokenConvertEthValueMap = this.lpLib.getBaseTokenCovertEthValue(maxValueLpMap)
     // 5. 获取各池子价值
     for (const lp of lpList) {
-      const value = this.lpLib.getLpEthValue(lp, baseTokenConvertEthValueMap, maxValueLpMap)
-      logger.info(value)
+      lp.valueStr = this.lpLib.getLpEthValue(lp, baseTokenConvertEthValueMap, maxValueLpMap)
+
+      if (lp.valueStr > 0) logger.info(`lp: ${lp.hash}, value: ${lp.valueStr}.`)
     }
     // 6. 更新池子到数据库
-    // for (const v2Lp of v2LpList) {
-    //   await this.lpLib.v2LpModel.appendOrUpdate(v2Lp)
-    // }
-    // for (const v3Lp of v3LpList) {
-    //   await this.lpLib.v3LpModel.appendOrUpdate(v3Lp)
-    // }
+    for (const v2Lp of v2LpList) {
+      await this.lpLib.v2LpModel.appendOrUpdate(v2Lp)
+    }
+    for (const v3Lp of v3LpList) {
+      await this.lpLib.v3LpModel.appendOrUpdate(v3Lp)
+    }
   }
 
   async run() {