|
|
@@ -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) {
|