فهرست منبع

使用新逻辑看会不会出bug

skyfffire 2 سال پیش
والد
کامیت
51a2302449
1فایلهای تغییر یافته به همراه25 افزوده شده و 30 حذف شده
  1. 25 30
      scripts/lib/lp-lib.js

+ 25 - 30
scripts/lib/lp-lib.js

@@ -258,43 +258,38 @@ module.exports = class LpLib {
       }
     }
 
-    // 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) {
-          const token0ToBaseTokenPrice = token0AndBaseTokenLp.token0ToToken1Price
-          const price = token0ToBaseTokenPrice * baseTokenToEthPrice
-
-          return 2 * r0 * price / (10 ** decimals0)
+    // 2.两token之一能直接与baseToken做池子的 带入maxValueLpMap计算
+    // 转换数量: token到base token
+    function valueConvertTokenToBaseToken(lpLib, reserve, tokenHash, decimals, baseTokenAddress) {
+      const tokenAndBaseKey = lpLib.getKey(tokenHash, baseTokenAddress)
+      const tokenAndBaseTokenLp = maxValueLpMap[tokenAndBaseKey]
+      const realAmount = reserve / Math.pow(10, decimals)
+
+      if (tokenAndBaseTokenLp) {
+        if (tokenAndBaseTokenLp.token0 === tokenHash) {
+          const token0ToBaseTokenPrice = tokenAndBaseTokenLp.token0ToToken1Price
+
+          return token0ToBaseTokenPrice * realAmount
         } else {
-          const token1ToBaseTokenPrice = token0AndBaseTokenLp.token1ToToken0Price
-          const price = token1ToBaseTokenPrice * baseTokenToEthPrice
+          const token1ToBaseTokenPrice = tokenAndBaseTokenLp.token1ToToken0Price
 
-          return 2 * r1 * price / (10 ** decimals1)
+          return token1ToBaseTokenPrice * realAmount
         }
       }
 
-      const token1AndBaseKey = this.getKey(token1, baseTokenAddress)
-      const token1AndBaseTokenLp = maxValueLpMap[token1AndBaseKey]
-      if (token1AndBaseTokenLp) {
-        if (token1AndBaseTokenLp.token0 === token1) {
-          const token0ToBaseTokenPrice = token1AndBaseTokenLp.token0ToToken1Price
-          const price = token0ToBaseTokenPrice * baseTokenToEthPrice
+      return 0
+    }
+
+    for (const baseTokenAddress of baseTokenAddressList) {
+      const baseTokenToEthPrice = baseTokenConvertEthValueMap[baseTokenAddress]
 
-          return 2 * r0 * price / (10 ** decimals0)
-        } else {
-          const token1ToBaseTokenPrice = token1AndBaseTokenLp.token1ToToken0Price
-          const price = token1ToBaseTokenPrice * baseTokenToEthPrice
+      // 如果token0跟baseToken能组成池子
+      const r0ConvertToBaseTokenRealAmount = valueConvertTokenToBaseToken(this, r0, token0, decimals0, baseTokenAddress)
+      if (r0ConvertToBaseTokenRealAmount !== 0) return r0ConvertToBaseTokenRealAmount * baseTokenToEthPrice
 
-          return 2 * r1 * price / (10 ** decimals1)
-        }
-      }
+      // 如果token1跟baseToken能组成池子
+      const r1ConvertToBaseTokenRealAmount = valueConvertTokenToBaseToken(this, r1, token1, decimals1, baseTokenAddress)
+      if (r1ConvertToBaseTokenRealAmount !== 0) return r1ConvertToBaseTokenRealAmount * baseTokenToEthPrice
     }
 
     // 3.两token都不能与baseToken做池子的