Эх сурвалжийг харах

第一个阶段完成,可以做基础逻辑测试

skyfffire 2 жил өмнө
parent
commit
b7b5fecfdc

+ 47 - 1
scripts/lib/lp-lib.js

@@ -222,8 +222,54 @@ module.exports = class LpLib {
     }
   }
 
-  putLpValue(lpList) {
+  getLpEthValue(lp, baseTokenConvertEthValueMap, maxValueLpMap) {
+    const token0 = lp.token0
+    const token1 = lp.token1
+
+    if (ethTokenAddressList.indexOf(token0) !== -1 || ethTokenAddressList.indexOf(token1) !== -1) {
+      return {
+        '0': ethTokenAddressList.indexOf(token0) !== -1 ? 1 : 0,
+        '1': ethTokenAddressList.indexOf(token1) !== -1 ? 1 : 0
+      }
+    }
+
+    // 1.两token之一能直接与ethw或wethw做直接池子的
+    // 2.两token之一能直接与baseToken做池子的
+    // 这两种情况直接带入baseTokenConvertEthValueMap计算
+    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]
+        } else {
+          priceMap['0'] = token0AndBaseTokenLp.in1Token1OutToken0 * baseTokenConvertEthValueMap[baseTokenAddress]
+        }
+        priceMap['1'] = 0
+
+        return priceMap
+      }
+
+      const token1AndBaseKey = this.getKey(token1, baseTokenAddress)
+      const token1AndBaseTokenLp = maxValueLpMap[token1AndBaseKey]
+      if (token1AndBaseTokenLp) {
+        const priceMap = {}
+        if (token1AndBaseTokenLp.token0 === token1) {
+          priceMap['1'] = token1AndBaseTokenLp.in1Token0OutToken1 * baseTokenConvertEthValueMap[baseTokenAddress]
+        } else {
+          priceMap['1'] = token1AndBaseTokenLp.in1Token1OutToken0 * baseTokenConvertEthValueMap[baseTokenAddress]
+        }
+        priceMap['0'] = 0
+
+        return priceMap
+      }
+    }
 
+    // 3.两token都不能与baseToken做池子的
+    // 这种情况则视为lp类型池子
+    return {'0': 0, '1': 0}
   }
 
   getMaxValueLpMap(lpList) {

+ 11 - 1
scripts/maintenance/index.js

@@ -29,7 +29,17 @@ class LpMaintenance {
     // 4. 获取基本币对baseToken的价值
     const baseTokenConvertEthValueMap = this.lpLib.getBaseTokenCovertEthValue(maxValueLpMap)
     // 5. 获取各池子价值
-    this.lpLib.putLpValue(lpList)
+    for (const lp of lpList) {
+      const value = this.lpLib.getLpEthValue(lp, baseTokenConvertEthValueMap, maxValueLpMap)
+      logger.info(value)
+    }
+    // 6. 更新池子到数据库
+    // for (const v2Lp of v2LpList) {
+    //   await this.lpLib.v2LpModel.appendOrUpdate(v2Lp)
+    // }
+    // for (const v3Lp of v3LpList) {
+    //   await this.lpLib.v3LpModel.appendOrUpdate(v3Lp)
+    // }
   }
 
   async run() {