浏览代码

计算流程更清晰

skyfffire 2 年之前
父节点
当前提交
62200cd393
共有 1 个文件被更改,包括 28 次插入18 次删除
  1. 28 18
      scripts/lib/lp-lib.js

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

@@ -192,8 +192,8 @@ module.exports = class LpLib {
       const r1RealAmount = parseInt(lp.r1) / Math.pow(10, parseInt(lp.decimals1))
 
       // 计算0换1的价格和1换0的价格
-      lp.in1Token0OutToken1 = r1RealAmount / r0RealAmount // 一个token0 = in1Token0OutToken1个token1
-      lp.in1Token1OutToken0 = r0RealAmount / r1RealAmount // 一个token1 = in1Token1OutToken0个token0
+      lp.token0ToToken1Price = r1RealAmount / r0RealAmount // 一个token0 = token0ToToken1Price个token1
+      lp.token1ToToken0Price = r0RealAmount / r1RealAmount // 一个token1 = token1ToToken0Price个token0
     }
   }
 
@@ -215,9 +215,9 @@ module.exports = class LpLib {
           const token1 = maxValueLp.token1
 
           if (baseTokenAddress === token0) {
-            baseTokenConvertEthValueMap[baseTokenAddress] = maxValueLp.in1Token0OutToken1
+            baseTokenConvertEthValueMap[baseTokenAddress] = maxValueLp.token0ToToken1Price
           } else if (baseTokenAddress === token1) {
-            baseTokenConvertEthValueMap[baseTokenAddress] = maxValueLp.in1Token1OutToken0
+            baseTokenConvertEthValueMap[baseTokenAddress] = maxValueLp.token1ToToken0Price
           }
         }
       }
@@ -236,39 +236,47 @@ module.exports = class LpLib {
   }
 
   getLpEthValue(lp, baseTokenConvertEthValueMap, maxValueLpMap) {
-    if (lp.r0 === 0 && lp.r1 === 0) {
-      return 0
-    }
-
+    const r0 = lp.r0
+    const r1 = lp.r1
     const token0 = lp.token0
     const token1 = lp.token1
+    const decimals0 = lp.decimals0
+    const decimals1 = lp.decimals1
+
+    if (r0 === 0 && r1 === 0) {
+      return 0
+    }
 
     // 1.两token之一能直接与ethw或wethw做直接池子的
     if (ethTokenAddressList.indexOf(token0) !== -1 || ethTokenAddressList.indexOf(token1) !== -1) {
       if (ethTokenAddressList.indexOf(token0) !== -1) {
         const ethToken = baseTokenMap[token0]
-        return 2 * lp.r0 / (10 ** ethToken.decimals)
+        return 2 * r0 / (10 ** ethToken.decimals)
       } else if (ethTokenAddressList.indexOf(token1) !== -1) {
         const ethToken = baseTokenMap[token1]
-        return 2 * lp.r1 / (10 ** ethToken.decimals)
+        return 2 * r1 / (10 ** ethToken.decimals)
       }
     }
 
     // 2.两token之一能直接与baseToken做池子的
     // 带入maxValueLpMap计算
     for (const baseTokenAddress of baseTokenAddressList) {
+      const baseTokenToEthPrice = baseTokenConvertEthValueMap[baseTokenAddress]
+      
       const token0AndBaseKey = this.getKey(token0, baseTokenAddress)
       const token0AndBaseTokenLp = maxValueLpMap[token0AndBaseKey]
 
       if (token0AndBaseTokenLp) {
         if (token0AndBaseTokenLp.token0 === token0) {
-          let price = token0AndBaseTokenLp.in1Token0OutToken1 * baseTokenConvertEthValueMap[baseTokenAddress]
+          const token0ToBaseTokenPrice = token0AndBaseTokenLp.token0ToToken1Price
+          const price = token0ToBaseTokenPrice * baseTokenToEthPrice
 
-          return 2 * lp.r0 * price / (10 ** lp.decimals0)
+          return 2 * r0 * price / (10 ** decimals0)
         } else {
-          let price = token0AndBaseTokenLp.in1Token1OutToken0 * baseTokenConvertEthValueMap[baseTokenAddress]
+          const token1ToBaseTokenPrice = token0AndBaseTokenLp.token1ToToken0Price
+          const price = token1ToBaseTokenPrice * baseTokenToEthPrice
 
-          return 2 * lp.r0 * price / (10 ** lp.decimals0)
+          return 2 * r1 * price / (10 ** decimals1)
         }
       }
 
@@ -276,13 +284,15 @@ module.exports = class LpLib {
       const token1AndBaseTokenLp = maxValueLpMap[token1AndBaseKey]
       if (token1AndBaseTokenLp) {
         if (token1AndBaseTokenLp.token0 === token1) {
-          let price = token1AndBaseTokenLp.in1Token0OutToken1 * baseTokenConvertEthValueMap[baseTokenAddress]
+          const token0ToBaseTokenPrice = token1AndBaseTokenLp.token0ToToken1Price
+          const price = token0ToBaseTokenPrice * baseTokenToEthPrice
 
-          return 2 * lp.r1 * price / (10 ** lp.decimals1)
+          return 2 * r0 * price / (10 ** decimals0)
         } else {
-          let price = token1AndBaseTokenLp.in1Token1OutToken0 * baseTokenConvertEthValueMap[baseTokenAddress]
+          const token1ToBaseTokenPrice = token1AndBaseTokenLp.token1ToToken0Price
+          const price = token1ToBaseTokenPrice * baseTokenToEthPrice
 
-          return 2 * lp.r1 * price / (10 ** lp.decimals1)
+          return 2 * r1 * price / (10 ** decimals1)
         }
       }
     }