|
|
@@ -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做池子的
|