@alphafi/alphafi-sdk 0.0.35 → 0.0.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/cjs/common/coins.d.ts +1 -1
- package/dist/cjs/common/coins.d.ts.map +1 -1
- package/dist/cjs/common/coins.js +15 -11
- package/dist/cjs/common/coins.js.map +1 -1
- package/dist/cjs/common/constants.d.ts +436 -32
- package/dist/cjs/common/constants.d.ts.map +1 -1
- package/dist/cjs/common/constants.js +488 -56
- package/dist/cjs/common/constants.js.map +1 -1
- package/dist/cjs/common/maps.d.ts +46 -28
- package/dist/cjs/common/maps.d.ts.map +1 -1
- package/dist/cjs/common/maps.js +358 -227
- package/dist/cjs/common/maps.js.map +1 -1
- package/dist/cjs/common/types.d.ts +59 -47
- package/dist/cjs/common/types.d.ts.map +1 -1
- package/dist/cjs/common/types.js.map +1 -1
- package/dist/cjs/getAllVaults.d.ts.map +1 -1
- package/dist/cjs/getAllVaults.js +5 -2
- package/dist/cjs/getAllVaults.js.map +1 -1
- package/dist/cjs/getVaultBalances.d.ts +2 -1
- package/dist/cjs/getVaultBalances.d.ts.map +1 -1
- package/dist/cjs/getVaultBalances.js +15 -1
- package/dist/cjs/getVaultBalances.js.map +1 -1
- package/dist/cjs/graphql/getMultiReceipts.d.ts.map +1 -1
- package/dist/cjs/graphql/getMultiReceipts.js +4 -0
- package/dist/cjs/graphql/getMultiReceipts.js.map +1 -1
- package/dist/cjs/index.d.ts +7 -4
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +20 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchAfterTransactionEvents.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchAfterTransactionEvents.js +2 -2
- package/dist/cjs/sui-sdk/events/fetchAfterTransactionEvents.js.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js +2 -2
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchRebalanceEvents.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchRebalanceEvents.js +5 -7
- package/dist/cjs/sui-sdk/events/fetchRebalanceEvents.js.map +1 -1
- package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.d.ts +1 -1
- package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.js +11 -20
- package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.js.map +1 -1
- package/dist/cjs/sui-sdk/functions/fetchUserVaults.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/functions/fetchUserVaults.js +12 -9
- package/dist/cjs/sui-sdk/functions/fetchUserVaults.js.map +1 -1
- package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.d.ts +8 -23
- package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.js +157 -141
- package/dist/cjs/sui-sdk/functions/getPortfolioAmounts.js.map +1 -1
- package/dist/cjs/sui-sdk/functions/getReceipts.d.ts +15 -10
- package/dist/cjs/sui-sdk/functions/getReceipts.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/functions/getReceipts.js +274 -190
- package/dist/cjs/sui-sdk/functions/getReceipts.js.map +1 -1
- package/dist/cjs/transactions/alpha.d.ts +4 -0
- package/dist/cjs/transactions/alpha.d.ts.map +1 -0
- package/dist/cjs/transactions/alpha.js +104 -0
- package/dist/cjs/transactions/alpha.js.map +1 -0
- package/dist/cjs/transactions/bluefin.d.ts +15 -0
- package/dist/cjs/transactions/bluefin.d.ts.map +1 -0
- package/dist/cjs/transactions/bluefin.js +457 -0
- package/dist/cjs/transactions/bluefin.js.map +1 -0
- package/dist/cjs/transactions/bucket.d.ts +8 -0
- package/dist/cjs/transactions/bucket.d.ts.map +1 -0
- package/dist/cjs/transactions/bucket.js +131 -0
- package/dist/cjs/transactions/bucket.js.map +1 -0
- package/dist/cjs/transactions/cetus.d.ts +24 -0
- package/dist/cjs/transactions/cetus.d.ts.map +1 -0
- package/dist/cjs/transactions/cetus.js +554 -0
- package/dist/cjs/transactions/cetus.js.map +1 -0
- package/dist/cjs/transactions/collect_rewards.d.ts +3 -0
- package/dist/cjs/transactions/collect_rewards.d.ts.map +1 -0
- package/dist/cjs/transactions/collect_rewards.js +332 -0
- package/dist/cjs/transactions/collect_rewards.js.map +1 -0
- package/dist/cjs/transactions/deposit.d.ts +5 -0
- package/dist/cjs/transactions/deposit.d.ts.map +1 -0
- package/dist/cjs/transactions/deposit.js +57 -0
- package/dist/cjs/transactions/deposit.js.map +1 -0
- package/dist/cjs/transactions/navi.d.ts +9 -0
- package/dist/cjs/transactions/navi.d.ts.map +1 -0
- package/dist/cjs/transactions/navi.js +618 -0
- package/dist/cjs/transactions/navi.js.map +1 -0
- package/dist/cjs/transactions/withdraw.d.ts +5 -0
- package/dist/cjs/transactions/withdraw.d.ts.map +1 -0
- package/dist/cjs/transactions/withdraw.js +52 -0
- package/dist/cjs/transactions/withdraw.js.map +1 -0
- package/dist/cjs/transactions/zapDeposit.d.ts +1 -0
- package/dist/cjs/transactions/zapDeposit.d.ts.map +1 -0
- package/dist/cjs/transactions/zapDeposit.js +730 -0
- package/dist/cjs/transactions/zapDeposit.js.map +1 -0
- package/dist/cjs/utils/clmm/prices.js +9 -9
- package/dist/cjs/utils/clmm/prices.js.map +1 -1
- package/dist/cjs/utils/getHoldersFromTransactionsUtils.d.ts.map +1 -1
- package/dist/cjs/utils/getHoldersFromTransactionsUtils.js +7 -7
- package/dist/cjs/utils/getHoldersFromTransactionsUtils.js.map +1 -1
- package/dist/cjs/utils/hop.js +3 -3
- package/dist/cjs/utils/hop.js.map +1 -1
- package/dist/cjs/utils/prices.d.ts +2 -0
- package/dist/cjs/utils/prices.d.ts.map +1 -1
- package/dist/cjs/utils/prices.js +39 -0
- package/dist/cjs/utils/prices.js.map +1 -1
- package/dist/cjs/utils/userHoldings.d.ts.map +1 -1
- package/dist/cjs/utils/userHoldings.js +18 -18
- package/dist/cjs/utils/userHoldings.js.map +1 -1
- package/dist/esm/common/coins.d.ts +1 -1
- package/dist/esm/common/coins.d.ts.map +1 -1
- package/dist/esm/common/coins.js +14 -10
- package/dist/esm/common/coins.js.map +1 -1
- package/dist/esm/common/constants.d.ts +436 -32
- package/dist/esm/common/constants.d.ts.map +1 -1
- package/dist/esm/common/constants.js +488 -56
- package/dist/esm/common/constants.js.map +1 -1
- package/dist/esm/common/maps.d.ts +46 -28
- package/dist/esm/common/maps.d.ts.map +1 -1
- package/dist/esm/common/maps.js +355 -226
- package/dist/esm/common/maps.js.map +1 -1
- package/dist/esm/common/types.d.ts +59 -47
- package/dist/esm/common/types.d.ts.map +1 -1
- package/dist/esm/common/types.js.map +1 -1
- package/dist/esm/getAllVaults.d.ts.map +1 -1
- package/dist/esm/getAllVaults.js +5 -2
- package/dist/esm/getAllVaults.js.map +1 -1
- package/dist/esm/getVaultBalances.d.ts +2 -1
- package/dist/esm/getVaultBalances.d.ts.map +1 -1
- package/dist/esm/getVaultBalances.js +14 -1
- package/dist/esm/getVaultBalances.js.map +1 -1
- package/dist/esm/graphql/getMultiReceipts.d.ts.map +1 -1
- package/dist/esm/graphql/getMultiReceipts.js +4 -0
- package/dist/esm/graphql/getMultiReceipts.js.map +1 -1
- package/dist/esm/index.d.ts +7 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/sui-sdk/events/fetchAfterTransactionEvents.d.ts.map +1 -1
- package/dist/esm/sui-sdk/events/fetchAfterTransactionEvents.js +4 -4
- package/dist/esm/sui-sdk/events/fetchAfterTransactionEvents.js.map +1 -1
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js +4 -4
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
- package/dist/esm/sui-sdk/events/fetchRebalanceEvents.d.ts.map +1 -1
- package/dist/esm/sui-sdk/events/fetchRebalanceEvents.js +7 -9
- package/dist/esm/sui-sdk/events/fetchRebalanceEvents.js.map +1 -1
- package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.d.ts +1 -1
- package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.d.ts.map +1 -1
- package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.js +11 -20
- package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.js.map +1 -1
- package/dist/esm/sui-sdk/functions/fetchUserVaults.d.ts.map +1 -1
- package/dist/esm/sui-sdk/functions/fetchUserVaults.js +13 -10
- package/dist/esm/sui-sdk/functions/fetchUserVaults.js.map +1 -1
- package/dist/esm/sui-sdk/functions/getPortfolioAmounts.d.ts +8 -23
- package/dist/esm/sui-sdk/functions/getPortfolioAmounts.d.ts.map +1 -1
- package/dist/esm/sui-sdk/functions/getPortfolioAmounts.js +158 -144
- package/dist/esm/sui-sdk/functions/getPortfolioAmounts.js.map +1 -1
- package/dist/esm/sui-sdk/functions/getReceipts.d.ts +15 -10
- package/dist/esm/sui-sdk/functions/getReceipts.d.ts.map +1 -1
- package/dist/esm/sui-sdk/functions/getReceipts.js +266 -186
- package/dist/esm/sui-sdk/functions/getReceipts.js.map +1 -1
- package/dist/esm/transactions/alpha.d.ts +4 -0
- package/dist/esm/transactions/alpha.d.ts.map +1 -0
- package/dist/esm/transactions/alpha.js +99 -0
- package/dist/esm/transactions/alpha.js.map +1 -0
- package/dist/esm/transactions/bluefin.d.ts +15 -0
- package/dist/esm/transactions/bluefin.d.ts.map +1 -0
- package/dist/esm/transactions/bluefin.js +450 -0
- package/dist/esm/transactions/bluefin.js.map +1 -0
- package/dist/esm/transactions/bucket.d.ts +8 -0
- package/dist/esm/transactions/bucket.d.ts.map +1 -0
- package/dist/esm/transactions/bucket.js +127 -0
- package/dist/esm/transactions/bucket.js.map +1 -0
- package/dist/esm/transactions/cetus.d.ts +24 -0
- package/dist/esm/transactions/cetus.d.ts.map +1 -0
- package/dist/esm/transactions/cetus.js +541 -0
- package/dist/esm/transactions/cetus.js.map +1 -0
- package/dist/esm/transactions/collect_rewards.d.ts +3 -0
- package/dist/esm/transactions/collect_rewards.d.ts.map +1 -0
- package/dist/esm/transactions/collect_rewards.js +329 -0
- package/dist/esm/transactions/collect_rewards.js.map +1 -0
- package/dist/esm/transactions/deposit.d.ts +5 -0
- package/dist/esm/transactions/deposit.d.ts.map +1 -0
- package/dist/esm/transactions/deposit.js +53 -0
- package/dist/esm/transactions/deposit.js.map +1 -0
- package/dist/esm/transactions/navi.d.ts +9 -0
- package/dist/esm/transactions/navi.d.ts.map +1 -0
- package/dist/esm/transactions/navi.js +614 -0
- package/dist/esm/transactions/navi.js.map +1 -0
- package/dist/esm/transactions/withdraw.d.ts +5 -0
- package/dist/esm/transactions/withdraw.d.ts.map +1 -0
- package/dist/esm/transactions/withdraw.js +49 -0
- package/dist/esm/transactions/withdraw.js.map +1 -0
- package/dist/esm/transactions/zapDeposit.d.ts +2 -0
- package/dist/esm/transactions/zapDeposit.d.ts.map +1 -0
- package/dist/esm/transactions/zapDeposit.js +730 -0
- package/dist/esm/transactions/zapDeposit.js.map +1 -0
- package/dist/esm/utils/clmm/prices.js +10 -10
- package/dist/esm/utils/clmm/prices.js.map +1 -1
- package/dist/esm/utils/getHoldersFromTransactionsUtils.d.ts.map +1 -1
- package/dist/esm/utils/getHoldersFromTransactionsUtils.js +9 -9
- package/dist/esm/utils/getHoldersFromTransactionsUtils.js.map +1 -1
- package/dist/esm/utils/hop.js +4 -4
- package/dist/esm/utils/hop.js.map +1 -1
- package/dist/esm/utils/prices.d.ts +2 -0
- package/dist/esm/utils/prices.d.ts.map +1 -1
- package/dist/esm/utils/prices.js +37 -0
- package/dist/esm/utils/prices.js.map +1 -1
- package/dist/esm/utils/userHoldings.d.ts.map +1 -1
- package/dist/esm/utils/userHoldings.js +20 -20
- package/dist/esm/utils/userHoldings.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { Decimal } from "decimal.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { poolInfo, loopingPoolCoinMap, getSuiClient, cetusPoolMap, getParentPool, } from "../../index.js";
|
|
3
|
+
import { getCoinAmountsFromLiquidity, getPool, getPoolExchangeRate, getReceipts, fetchVoloExchangeRate, getInvestor, } from "./getReceipts.js";
|
|
4
|
+
import { coinsList } from "../../common/coins.js";
|
|
5
|
+
import { singleAssetPoolCoinMap, doubleAssetPoolCoinMap, } from "../../common/maps.js";
|
|
6
6
|
import { getAlphaPrice } from "../../utils/clmm/prices.js";
|
|
7
7
|
import { getLatestPrices } from "../../utils/prices.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
import { TickMath } from "@cetusprotocol/cetus-sui-clmm-sdk";
|
|
9
|
+
import BN from "bn.js";
|
|
10
|
+
export async function getAlphaPortfolioAmount(poolName, options, ignoreCache) {
|
|
11
|
+
const receipts = await getReceipts(poolName, options.address, ignoreCache);
|
|
12
|
+
const pool = await getPool(poolName, ignoreCache);
|
|
11
13
|
if (!pool) {
|
|
12
14
|
throw new Error("Pool not found");
|
|
13
15
|
}
|
|
14
|
-
const exchangeRate = await getPoolExchangeRate(poolName);
|
|
16
|
+
const exchangeRate = await getPoolExchangeRate(poolName, ignoreCache);
|
|
15
17
|
let totalXTokens = new Decimal(0);
|
|
16
18
|
if (!exchangeRate) {
|
|
17
19
|
return "0"; // if pool has 0 xtokens
|
|
@@ -38,7 +40,7 @@ export async function getAlphaPortfolioAmount(poolName, options) {
|
|
|
38
40
|
});
|
|
39
41
|
}
|
|
40
42
|
if (totalXTokens.gt(0)) {
|
|
41
|
-
const poolExchangeRate = await getPoolExchangeRate(poolName);
|
|
43
|
+
const poolExchangeRate = await getPoolExchangeRate(poolName, ignoreCache);
|
|
42
44
|
if (poolExchangeRate) {
|
|
43
45
|
const tokens = totalXTokens.div(1e9).mul(poolExchangeRate);
|
|
44
46
|
return `${tokens}`;
|
|
@@ -51,8 +53,8 @@ export async function getAlphaPortfolioAmount(poolName, options) {
|
|
|
51
53
|
return "0";
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
|
-
export async function getAlphaPortfolioAmountInUSD(poolName, options) {
|
|
55
|
-
const tokens = await getAlphaPortfolioAmount(poolName, options);
|
|
56
|
+
export async function getAlphaPortfolioAmountInUSD(poolName, options, ignoreCache) {
|
|
57
|
+
const tokens = await getAlphaPortfolioAmount(poolName, options, ignoreCache);
|
|
56
58
|
const priceOfAlpha = await getAlphaPrice();
|
|
57
59
|
if (priceOfAlpha && tokens) {
|
|
58
60
|
let amount = new Decimal(tokens);
|
|
@@ -60,71 +62,43 @@ export async function getAlphaPortfolioAmountInUSD(poolName, options) {
|
|
|
60
62
|
return amount.toString();
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
const cachedResponse = portfolioAmountCache.get(portfolioAmountCacheKey);
|
|
73
|
-
if (cachedResponse) {
|
|
74
|
-
return cachedResponse;
|
|
75
|
-
}
|
|
76
|
-
let cachedPromise = portfolioAmountPromiseCache.get(portfolioAmountCacheKey);
|
|
77
|
-
if (!cachedPromise) {
|
|
78
|
-
cachedPromise = (async () => {
|
|
79
|
-
const receipts = await getReceipts(poolName, options.address);
|
|
80
|
-
let totalXTokens = new Decimal(0);
|
|
81
|
-
if (receipts) {
|
|
82
|
-
receipts.forEach((receipt) => {
|
|
83
|
-
const xTokens = receipt.content.fields.xTokenBalance;
|
|
84
|
-
totalXTokens = totalXTokens.add(xTokens);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
if (totalXTokens.gt(0)) {
|
|
88
|
-
const poolExchangeRate = await getPoolExchangeRate(poolName);
|
|
89
|
-
if (poolExchangeRate) {
|
|
90
|
-
const tokens = totalXTokens.mul(poolExchangeRate);
|
|
91
|
-
const poolTokenAmounts = await getCoinAmountsFromLiquidity(poolName, tokens.toNumber());
|
|
92
|
-
portfolioAmount = poolTokenAmounts;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
portfolioAmount = [0, 0];
|
|
100
|
-
}
|
|
101
|
-
portfolioAmountCache.set(portfolioAmountCacheKey, portfolioAmount);
|
|
102
|
-
portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache
|
|
103
|
-
return portfolioAmount;
|
|
104
|
-
})().catch((error) => {
|
|
105
|
-
portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache
|
|
106
|
-
throw error;
|
|
65
|
+
export async function getPortfolioAmount(poolName, address, ignoreCache) {
|
|
66
|
+
let portfolioAmount = ["0", "0"];
|
|
67
|
+
const receipts = await getReceipts(poolName, address, ignoreCache);
|
|
68
|
+
let totalXTokens = new Decimal(0);
|
|
69
|
+
if (receipts) {
|
|
70
|
+
receipts.forEach((receipt) => {
|
|
71
|
+
const xTokens = receipt.content.fields.xTokenBalance;
|
|
72
|
+
totalXTokens = totalXTokens.add(xTokens);
|
|
107
73
|
});
|
|
108
|
-
portfolioAmountPromiseCache.set(portfolioAmountCacheKey, cachedPromise);
|
|
109
74
|
}
|
|
110
|
-
|
|
75
|
+
if (totalXTokens.gt(0)) {
|
|
76
|
+
const poolExchangeRate = await getPoolExchangeRate(poolName, ignoreCache);
|
|
77
|
+
if (poolExchangeRate) {
|
|
78
|
+
const tokens = totalXTokens.mul(poolExchangeRate);
|
|
79
|
+
const poolTokenAmounts = await getCoinAmountsFromLiquidity(poolName, tokens.toString(), ignoreCache);
|
|
80
|
+
portfolioAmount = poolTokenAmounts;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return portfolioAmount;
|
|
111
87
|
}
|
|
112
|
-
export async function getDoubleAssetPortfolioAmountInUSD(poolName,
|
|
88
|
+
export async function getDoubleAssetPortfolioAmountInUSD(poolName, address, ignoreCache) {
|
|
113
89
|
if (poolName !== undefined) {
|
|
114
|
-
const amounts = await getPortfolioAmount(poolName,
|
|
90
|
+
const amounts = await getPortfolioAmount(poolName, address, ignoreCache);
|
|
115
91
|
if (amounts !== undefined) {
|
|
116
92
|
const ten = new Decimal(10);
|
|
117
|
-
const pool1 =
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
const amount0 = new Decimal(amounts[0]).div(ten.pow(coins[pool1].expo));
|
|
122
|
-
const amount1 = new Decimal(amounts[1]).div(ten.pow(coins[pool2].expo));
|
|
93
|
+
const pool1 = doubleAssetPoolCoinMap[poolName].coin1;
|
|
94
|
+
const pool2 = doubleAssetPoolCoinMap[poolName].coin2;
|
|
95
|
+
const amount0 = new Decimal(amounts[0]).div(ten.pow(coinsList[pool1].expo));
|
|
96
|
+
const amount1 = new Decimal(amounts[1]).div(ten.pow(coinsList[pool2].expo));
|
|
123
97
|
const tokens = poolName.split("-");
|
|
124
98
|
const [priceOfCoin0, priceOfCoin1] = await getLatestPrices([
|
|
125
99
|
`${tokens[0]}/USD`,
|
|
126
100
|
`${tokens[1]}/USD`,
|
|
127
|
-
],
|
|
101
|
+
], ignoreCache);
|
|
128
102
|
if (priceOfCoin0 && priceOfCoin1) {
|
|
129
103
|
const amount = amount0.mul(priceOfCoin0).add(amount1.mul(priceOfCoin1));
|
|
130
104
|
return amount.toString();
|
|
@@ -136,106 +110,146 @@ export async function getDoubleAssetPortfolioAmountInUSD(poolName, options, igno
|
|
|
136
110
|
return "0";
|
|
137
111
|
}
|
|
138
112
|
}
|
|
139
|
-
|
|
140
|
-
const
|
|
141
|
-
|
|
113
|
+
export async function getNaviLoopingPoolDebt(poolName) {
|
|
114
|
+
const debt = (await getSuiClient().getDynamicFieldObject({
|
|
115
|
+
parentId: poolInfo[poolName].investorId,
|
|
116
|
+
name: {
|
|
117
|
+
type: "vector<u8>",
|
|
118
|
+
value: "debt".split("").map((char) => char.charCodeAt(0)),
|
|
119
|
+
},
|
|
120
|
+
})).data.content.fields.value.toString();
|
|
121
|
+
return debt;
|
|
122
|
+
}
|
|
123
|
+
export async function getSingleAssetPortfolioAmount(poolName, address, ignoreCache) {
|
|
142
124
|
let portfolioAmount = 0;
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
return cachedResponse;
|
|
125
|
+
const receipts = await getReceipts(poolName, address, ignoreCache);
|
|
126
|
+
let totalXTokens = new Decimal(0);
|
|
127
|
+
if (receipts) {
|
|
128
|
+
receipts.forEach((receipt) => {
|
|
129
|
+
const xTokens = receipt.content.fields.xTokenBalance;
|
|
130
|
+
totalXTokens = totalXTokens.add(xTokens);
|
|
131
|
+
});
|
|
151
132
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const tokens = userTokens.div(Math.pow(10, 9 - coins[poolCoinMap[poolName]].expo));
|
|
177
|
-
if (poolName == "NAVI-LOOP-SUI-VSUI") {
|
|
178
|
-
// const { SevenKGateway } = await import("../");
|
|
179
|
-
// const sevenKInstance = new SevenKGateway();
|
|
180
|
-
// const numberOfTokensInSui = (await sevenKInstance.getQuote({
|
|
181
|
-
// slippage: 1,
|
|
182
|
-
// senderAddress: options.address,
|
|
183
|
-
// pair: { coinA: coins["VSUI"], coinB: coins["SUI"] },
|
|
184
|
-
// inAmount: new BN(tokens.toNumber()),
|
|
185
|
-
// })) as QuoteResponse;
|
|
186
|
-
const voloExchRate = await fetchVoloExchangeRate();
|
|
187
|
-
portfolioAmount = Number(tokens.mul(parseFloat(voloExchRate.data.exchangeRate)));
|
|
188
|
-
}
|
|
189
|
-
// TODO: Whenever NAVI-LOOP-USDT-WUSDC is released, change this else implementation
|
|
190
|
-
else {
|
|
191
|
-
portfolioAmount = Number(tokens);
|
|
192
|
-
}
|
|
133
|
+
if (totalXTokens.gt(0)) {
|
|
134
|
+
let pool;
|
|
135
|
+
let investor;
|
|
136
|
+
if (poolInfo[poolName].parentProtocolName == "NAVI") {
|
|
137
|
+
pool = await getPool(poolName, ignoreCache);
|
|
138
|
+
investor = (await getInvestor(poolName, ignoreCache));
|
|
139
|
+
}
|
|
140
|
+
if (poolName == "NAVI-LOOP-USDC-USDT" ||
|
|
141
|
+
poolName == "NAVI-LOOP-USDT-USDC") {
|
|
142
|
+
const supplyCoin = loopingPoolCoinMap[poolName].supplyCoin;
|
|
143
|
+
const borrowCoin = loopingPoolCoinMap[poolName].borrowCoin;
|
|
144
|
+
if (pool && investor) {
|
|
145
|
+
let tokensInvested = new Decimal(0);
|
|
146
|
+
const currentDebt = await getNaviLoopingPoolDebt(poolName);
|
|
147
|
+
const currentSupply = investor.content.fields.tokensDeposited.toString();
|
|
148
|
+
if (cetusPoolMap[supplyCoin + "-" + borrowCoin] &&
|
|
149
|
+
currentDebt &&
|
|
150
|
+
currentSupply) {
|
|
151
|
+
const cetusPool = await getParentPool(supplyCoin + "-" + borrowCoin, ignoreCache);
|
|
152
|
+
if (cetusPool) {
|
|
153
|
+
const sqrtPrice = cetusPool?.content.fields.current_sqrt_price;
|
|
154
|
+
const price = TickMath.sqrtPriceX64ToPrice(new BN(sqrtPrice), coinsList[supplyCoin].expo, coinsList[borrowCoin].expo);
|
|
155
|
+
const currentDebtInSupplyCoin = new Decimal(currentDebt).div(price);
|
|
156
|
+
tokensInvested = new Decimal(currentSupply).minus(currentDebtInSupplyCoin);
|
|
193
157
|
}
|
|
194
158
|
else {
|
|
195
|
-
console.error(`
|
|
159
|
+
console.error(`couldnt fetch cetus pool`);
|
|
196
160
|
}
|
|
197
161
|
}
|
|
198
|
-
else
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
162
|
+
else if (cetusPoolMap[borrowCoin + "-" + supplyCoin] &&
|
|
163
|
+
currentDebt !== undefined &&
|
|
164
|
+
currentSupply !== undefined) {
|
|
165
|
+
const cetusPool = await getParentPool(borrowCoin + "-" + supplyCoin, ignoreCache);
|
|
166
|
+
if (cetusPool) {
|
|
167
|
+
const sqrtPrice = cetusPool?.content.fields.current_sqrt_price;
|
|
168
|
+
const price = TickMath.sqrtPriceX64ToPrice(new BN(sqrtPrice), coinsList[borrowCoin].expo, coinsList[supplyCoin].expo);
|
|
169
|
+
const currentDebtInSupplyCoin = new Decimal(currentDebt).mul(price);
|
|
170
|
+
tokensInvested = new Decimal(currentSupply).minus(currentDebtInSupplyCoin);
|
|
205
171
|
}
|
|
206
172
|
else {
|
|
207
|
-
console.error(`
|
|
173
|
+
console.error(`couldnt fetch cetus pool`);
|
|
208
174
|
}
|
|
209
175
|
}
|
|
176
|
+
else {
|
|
177
|
+
console.error(`one or more of these are possibly undefined: currentDebt:${currentDebt}, currentSupply: ${currentSupply}, cetusPoolMap[supplyCoin+'-'+borrowCoin]:${cetusPoolMap[supplyCoin + "-" + borrowCoin]}, cetusPoolMap[borrowCoin+'-'+supplyCoin]: ${cetusPoolMap[borrowCoin + "-" + supplyCoin]}`);
|
|
178
|
+
}
|
|
179
|
+
const xTokenSupplyInPool = new Decimal(pool.content.fields.xTokenSupply);
|
|
180
|
+
const userTokens = totalXTokens
|
|
181
|
+
.mul(tokensInvested)
|
|
182
|
+
.div(xTokenSupplyInPool);
|
|
183
|
+
const tokens = userTokens.div(Math.pow(10, 9 - coinsList[singleAssetPoolCoinMap[poolName].coin].expo));
|
|
184
|
+
portfolioAmount = Number(tokens);
|
|
210
185
|
}
|
|
211
186
|
else {
|
|
212
|
-
|
|
187
|
+
console.error(`Could not get object for poolName: ${poolName}`);
|
|
213
188
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
189
|
+
}
|
|
190
|
+
else if (poolName == "NAVI-LOOP-HASUI-SUI" ||
|
|
191
|
+
poolName == "NAVI-LOOP-SUI-VSUI") {
|
|
192
|
+
if (pool && investor) {
|
|
193
|
+
const liquidity = new Decimal(investor.content.fields.tokensDeposited);
|
|
194
|
+
const debtToSupplyRatio = new Decimal(investor.content.fields.current_debt_to_supply_ratio);
|
|
195
|
+
const tokensInvested = liquidity.mul(new Decimal(1).minus(new Decimal(debtToSupplyRatio).div(1e20)));
|
|
196
|
+
const xTokenSupplyInPool = new Decimal(pool.content.fields.xTokenSupply);
|
|
197
|
+
const userTokens = totalXTokens
|
|
198
|
+
.mul(tokensInvested)
|
|
199
|
+
.div(xTokenSupplyInPool);
|
|
200
|
+
const tokens = userTokens.div(Math.pow(10, 9 - coinsList[singleAssetPoolCoinMap[poolName].coin].expo));
|
|
201
|
+
if (poolName == "NAVI-LOOP-SUI-VSUI") {
|
|
202
|
+
// const { SevenKGateway } = await import("../");
|
|
203
|
+
// const sevenKInstance = new SevenKGateway();
|
|
204
|
+
// const numberOfTokensInSui = (await sevenKInstance.getQuote({
|
|
205
|
+
// slippage: 1,
|
|
206
|
+
// senderAddress: options.address,
|
|
207
|
+
// pair: { coinA: coins["VSUI"], coinB: coins["SUI"] },
|
|
208
|
+
// inAmount: new BN(tokens.toNumber()),
|
|
209
|
+
// })) as QuoteResponse;
|
|
210
|
+
const voloExchRate = await fetchVoloExchangeRate();
|
|
211
|
+
portfolioAmount = Number(tokens.mul(parseFloat(voloExchRate.data.exchangeRate)));
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
portfolioAmount = Number(tokens);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
console.error(`Could not get object for poolName: ${poolName}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const poolExchangeRate = await getPoolExchangeRate(poolName, ignoreCache);
|
|
223
|
+
if (poolExchangeRate) {
|
|
224
|
+
let tokens = totalXTokens.mul(poolExchangeRate);
|
|
225
|
+
if (poolInfo[poolName].parentProtocolName == "NAVI") {
|
|
226
|
+
tokens = tokens.div(Math.pow(10, 9 - coinsList[singleAssetPoolCoinMap[poolName].coin].expo));
|
|
227
|
+
}
|
|
228
|
+
portfolioAmount = tokens.toNumber();
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
222
234
|
}
|
|
223
|
-
return
|
|
235
|
+
return portfolioAmount;
|
|
224
236
|
}
|
|
225
|
-
export async function getSingleAssetPortfolioAmountInUSD(poolName,
|
|
226
|
-
const amounts = await getSingleAssetPortfolioAmount(poolName,
|
|
237
|
+
export async function getSingleAssetPortfolioAmountInUSD(poolName, address, ignoreCache) {
|
|
238
|
+
const amounts = await getSingleAssetPortfolioAmount(poolName, address, ignoreCache);
|
|
227
239
|
if (amounts !== undefined) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
240
|
+
let coinName = singleAssetPoolCoinMap[poolName].coin;
|
|
241
|
+
if (poolName == "NAVI-LOOP-SUI-VSUI") {
|
|
242
|
+
coinName = "SUI";
|
|
243
|
+
}
|
|
244
|
+
const amount = new Decimal(amounts).div(new Decimal(Math.pow(10, coinsList[coinName].expo)));
|
|
245
|
+
const [priceOfCoin] = await getLatestPrices([`${coinName}/USD`], ignoreCache);
|
|
232
246
|
if (priceOfCoin) {
|
|
233
247
|
const amountInUSD = amount.mul(priceOfCoin);
|
|
234
248
|
return amountInUSD.toString();
|
|
235
249
|
}
|
|
236
250
|
}
|
|
237
251
|
else {
|
|
238
|
-
console.error(`
|
|
252
|
+
console.error(`getSingleAssetPortfolioAmountInUSD is not implemented for poolName: ${poolName}`);
|
|
239
253
|
}
|
|
240
254
|
return "0";
|
|
241
255
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPortfolioAmounts.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getPortfolioAmounts.ts"],"names":[],"mappings":"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","sourcesContent":["import { SuiClient } from \"@mysten/sui/client\";\nimport { Decimal } from \"decimal.js\";\nimport {\n CoinName,\n PoolName,\n DoubleAssetPoolNames,\n NaviInvestor,\n CommonInvestorFields,\n SingleAssetPoolNames,\n} from \"../../index.js\";\nimport {\n getCoinAmountsFromLiquidity,\n getPool,\n getPoolExchangeRate,\n getReceipts,\n getNaviInvestor,\n fetchVoloExchangeRate,\n} from \"./getReceipts.js\";\nimport { SimpleCache } from \"../../utils/simpleCache.js\";\nimport { coins } from \"../../common/coins.js\";\nimport { poolCoinMap, poolCoinPairMap } from \"../../common/maps.js\";\nimport { PythPriceIdPair } from \"../../common/pyth.js\";\nimport { getAlphaPrice } from \"../../utils/clmm/prices.js\";\nimport { getLatestPrices } from \"../../utils/prices.js\";\n\nexport async function getAlphaPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const receipts = await getReceipts(poolName, options.address);\n const pool = await getPool(poolName);\n if (!pool) {\n throw new Error(\"Pool not found\");\n }\n\n const exchangeRate = await getPoolExchangeRate(poolName);\n let totalXTokens = new Decimal(0);\n if (!exchangeRate) {\n return \"0\"; // if pool has 0 xtokens\n }\n if (options.isLocked === true) {\n receipts.forEach(async (receipt) => {\n const xTokens = new Decimal(receipt.content.fields.xTokenBalance);\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(xTokens.sub(bal));\n });\n } else if (options.isLocked === false) {\n receipts.forEach((receipt) => {\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(bal);\n });\n } else {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.div(1e9).mul(poolExchangeRate);\n return `${tokens}`;\n } else {\n console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);\n }\n } else {\n return \"0\";\n }\n}\n\nexport async function getAlphaPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n) {\n const tokens = await getAlphaPortfolioAmount(poolName, options);\n const priceOfAlpha = await getAlphaPrice();\n if (priceOfAlpha && tokens) {\n let amount = new Decimal(tokens);\n amount = amount.mul(priceOfAlpha);\n return amount.toString();\n }\n}\n\nconst portfolioAmountCache = new SimpleCache<[number, number]>();\nconst portfolioAmountPromiseCache = new SimpleCache<\n Promise<[number, number]>\n>();\nexport async function getPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<[number, number] | undefined> {\n let portfolioAmount: [number, number] = [0, 0];\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n portfolioAmountCache.delete(portfolioAmountCacheKey);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = portfolioAmountCache.get(portfolioAmountCacheKey);\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = portfolioAmountPromiseCache.get(portfolioAmountCacheKey);\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(poolName, options.address);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName);\n if (poolExchangeRate) {\n const tokens = totalXTokens.mul(poolExchangeRate);\n const poolTokenAmounts = await getCoinAmountsFromLiquidity(\n poolName,\n tokens.toNumber(),\n );\n portfolioAmount = poolTokenAmounts;\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n } else {\n portfolioAmount = [0, 0];\n }\n\n portfolioAmountCache.set(portfolioAmountCacheKey, portfolioAmount);\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n portfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n portfolioAmountPromiseCache.set(portfolioAmountCacheKey, cachedPromise);\n }\n\n return cachedPromise;\n}\n\nexport async function getDoubleAssetPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n if ((poolName as DoubleAssetPoolNames) !== undefined) {\n const amounts = await getPortfolioAmount(poolName, options, ignoreCache);\n if (amounts !== undefined) {\n const ten = new Decimal(10);\n const pool1 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinA as CoinName;\n const pool2 = poolCoinPairMap[poolName as DoubleAssetPoolNames]\n .coinB as CoinName;\n const amount0 = new Decimal(amounts[0]).div(\n ten.pow(coins[pool1 as CoinName].expo),\n );\n const amount1 = new Decimal(amounts[1]).div(\n ten.pow(coins[pool2 as CoinName].expo),\n );\n const tokens = poolName.split(\"-\");\n const [priceOfCoin0, priceOfCoin1] = await getLatestPrices(\n [\n `${tokens[0]}/USD` as PythPriceIdPair,\n `${tokens[1]}/USD` as PythPriceIdPair,\n ],\n false,\n );\n if (priceOfCoin0 && priceOfCoin1) {\n const amount = amount0.mul(priceOfCoin0).add(amount1.mul(priceOfCoin1));\n return amount.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n }\n}\n\nconst singleAssetPortfolioAmountCache = new SimpleCache<number>();\nconst singleAssetPortfolioAmountPromiseCache = new SimpleCache<\n Promise<number>\n>();\nexport async function getSingleAssetPortfolioAmount(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n) {\n let portfolioAmount: number = 0;\n const portfolioAmountCacheKey = `getPortfolioAmount:${poolName}-${options.address}}`;\n if (ignoreCache) {\n singleAssetPortfolioAmountCache.delete(portfolioAmountCacheKey);\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey);\n }\n const cachedResponse = singleAssetPortfolioAmountCache.get(\n portfolioAmountCacheKey,\n );\n\n if (cachedResponse) {\n return cachedResponse;\n }\n\n let cachedPromise = singleAssetPortfolioAmountPromiseCache.get(\n portfolioAmountCacheKey,\n );\n\n if (!cachedPromise) {\n cachedPromise = (async () => {\n const receipts = await getReceipts(\n poolName,\n options.address,\n ignoreCache,\n );\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n if (\n poolName == \"NAVI-LOOP-SUI-VSUI\" ||\n poolName == \"NAVI-LOOP-USDC-USDT\"\n ) {\n const pool = await getPool(poolName, ignoreCache);\n const investor = (await getNaviInvestor(\n poolName,\n ignoreCache,\n )) as NaviInvestor & CommonInvestorFields;\n if (pool && investor) {\n const liquidity = new Decimal(\n investor.content.fields.tokensDeposited,\n );\n const debtToSupplyRatio = new Decimal(\n investor.content.fields.current_debt_to_supply_ratio,\n );\n const tokensInvested = liquidity.mul(\n new Decimal(1).minus(new Decimal(debtToSupplyRatio).div(1e20)),\n );\n const xTokenSupplyInPool = new Decimal(\n pool.content.fields.xTokenSupply,\n );\n const userTokens = totalXTokens\n .mul(tokensInvested)\n .div(xTokenSupplyInPool);\n const tokens = userTokens.div(\n Math.pow(10, 9 - coins[poolCoinMap[poolName]].expo),\n );\n if (poolName == \"NAVI-LOOP-SUI-VSUI\") {\n // const { SevenKGateway } = await import(\"../\");\n // const sevenKInstance = new SevenKGateway();\n // const numberOfTokensInSui = (await sevenKInstance.getQuote({\n // slippage: 1,\n // senderAddress: options.address,\n // pair: { coinA: coins[\"VSUI\"], coinB: coins[\"SUI\"] },\n // inAmount: new BN(tokens.toNumber()),\n // })) as QuoteResponse;\n const voloExchRate = await fetchVoloExchangeRate();\n portfolioAmount = Number(\n tokens.mul(parseFloat(voloExchRate.data.exchangeRate)),\n );\n }\n // TODO: Whenever NAVI-LOOP-USDT-WUSDC is released, change this else implementation\n else {\n portfolioAmount = Number(tokens);\n }\n } else {\n console.error(`Could not get object for poolName: ${poolName}`);\n }\n } else {\n const poolExchangeRate = await getPoolExchangeRate(\n poolName,\n ignoreCache,\n );\n if (poolExchangeRate) {\n let tokens = totalXTokens.mul(poolExchangeRate);\n tokens = tokens.div(\n Math.pow(\n 10,\n 9 -\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n );\n portfolioAmount = tokens.toNumber();\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n }\n } else {\n portfolioAmount = 0;\n }\n\n singleAssetPortfolioAmountCache.set(\n portfolioAmountCacheKey,\n portfolioAmount,\n );\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n return portfolioAmount;\n })().catch((error) => {\n singleAssetPortfolioAmountPromiseCache.delete(portfolioAmountCacheKey); // Remove the promise from cache\n throw error;\n });\n\n singleAssetPortfolioAmountPromiseCache.set(\n portfolioAmountCacheKey,\n cachedPromise,\n );\n }\n\n return cachedPromise;\n}\n\nexport async function getSingleAssetPortfolioAmountInUSD(\n poolName: SingleAssetPoolNames,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean = false,\n): Promise<string | undefined> {\n const amounts = await getSingleAssetPortfolioAmount(\n poolName,\n options,\n ignoreCache,\n );\n if (amounts !== undefined) {\n const amount = new Decimal(amounts).div(\n new Decimal(\n Math.pow(\n 10,\n coins[poolCoinMap[poolName as keyof typeof poolCoinMap]].expo,\n ),\n ),\n );\n const [priceOfCoin] = await getLatestPrices(\n [\n `${poolCoinMap[poolName as keyof typeof poolCoinMap]}/USD` as PythPriceIdPair,\n ],\n false,\n );\n if (priceOfCoin) {\n const amountInUSD = amount.mul(priceOfCoin);\n return amountInUSD.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"getPortfolioAmounts.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getPortfolioAmounts.ts"],"names":[],"mappings":"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","sourcesContent":["import { SuiClient } from \"@mysten/sui/client\";\nimport { Decimal } from \"decimal.js\";\nimport {\n PoolName,\n DoubleAssetPoolNames,\n NaviInvestor,\n CommonInvestorFields,\n poolInfo,\n loopingPoolCoinMap,\n getSuiClient,\n LoopingDebt,\n cetusPoolMap,\n getParentPool,\n} from \"../../index.js\";\nimport {\n getCoinAmountsFromLiquidity,\n getPool,\n getPoolExchangeRate,\n getReceipts,\n fetchVoloExchangeRate,\n getInvestor,\n} from \"./getReceipts.js\";\nimport { coinsList } from \"../../common/coins.js\";\nimport {\n singleAssetPoolCoinMap,\n doubleAssetPoolCoinMap,\n} from \"../../common/maps.js\";\nimport { PythPriceIdPair } from \"../../common/pyth.js\";\nimport { getAlphaPrice } from \"../../utils/clmm/prices.js\";\nimport { getLatestPrices } from \"../../utils/prices.js\";\nimport { TickMath } from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport BN from \"bn.js\";\n\nexport async function getAlphaPortfolioAmount(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean,\n) {\n const receipts = await getReceipts(poolName, options.address, ignoreCache);\n const pool = await getPool(poolName, ignoreCache);\n if (!pool) {\n throw new Error(\"Pool not found\");\n }\n\n const exchangeRate = await getPoolExchangeRate(poolName, ignoreCache);\n let totalXTokens = new Decimal(0);\n if (!exchangeRate) {\n return \"0\"; // if pool has 0 xtokens\n }\n if (options.isLocked === true) {\n receipts.forEach(async (receipt) => {\n const xTokens = new Decimal(receipt.content.fields.xTokenBalance);\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(xTokens.sub(bal));\n });\n } else if (options.isLocked === false) {\n receipts.forEach((receipt) => {\n const bal = new Decimal(\n Number(receipt.content.fields.unlocked_xtokens) *\n exchangeRate.toNumber(),\n );\n totalXTokens = totalXTokens.add(bal);\n });\n } else {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName, ignoreCache);\n if (poolExchangeRate) {\n const tokens = totalXTokens.div(1e9).mul(poolExchangeRate);\n return `${tokens}`;\n } else {\n console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);\n }\n } else {\n return \"0\";\n }\n}\n\nexport async function getAlphaPortfolioAmountInUSD(\n poolName: PoolName,\n options: { suiClient: SuiClient; address: string; isLocked?: boolean },\n ignoreCache: boolean,\n) {\n const tokens = await getAlphaPortfolioAmount(poolName, options, ignoreCache);\n const priceOfAlpha = await getAlphaPrice();\n if (priceOfAlpha && tokens) {\n let amount = new Decimal(tokens);\n amount = amount.mul(priceOfAlpha);\n return amount.toString();\n }\n}\n\nexport async function getPortfolioAmount(\n poolName: PoolName,\n address: string,\n ignoreCache: boolean,\n): Promise<[string, string] | undefined> {\n let portfolioAmount: [string, string] = [\"0\", \"0\"];\n const receipts = await getReceipts(poolName, address, ignoreCache);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n\n if (totalXTokens.gt(0)) {\n const poolExchangeRate = await getPoolExchangeRate(poolName, ignoreCache);\n if (poolExchangeRate) {\n const tokens = totalXTokens.mul(poolExchangeRate);\n const poolTokenAmounts = await getCoinAmountsFromLiquidity(\n poolName,\n tokens.toString(),\n ignoreCache,\n );\n portfolioAmount = poolTokenAmounts;\n } else {\n console.error(`Could not get poolExchangeRate for poolName: ${poolName}`);\n }\n }\n return portfolioAmount;\n}\n\nexport async function getDoubleAssetPortfolioAmountInUSD(\n poolName: PoolName,\n address: string,\n ignoreCache: boolean,\n): Promise<string | undefined> {\n if ((poolName as DoubleAssetPoolNames) !== undefined) {\n const amounts = await getPortfolioAmount(poolName, address, ignoreCache);\n if (amounts !== undefined) {\n const ten = new Decimal(10);\n const pool1 = doubleAssetPoolCoinMap[poolName].coin1;\n const pool2 = doubleAssetPoolCoinMap[poolName].coin2;\n\n const amount0 = new Decimal(amounts[0]).div(\n ten.pow(coinsList[pool1].expo),\n );\n const amount1 = new Decimal(amounts[1]).div(\n ten.pow(coinsList[pool2].expo),\n );\n const tokens = poolName.split(\"-\");\n const [priceOfCoin0, priceOfCoin1] = await getLatestPrices(\n [\n `${tokens[0]}/USD` as PythPriceIdPair,\n `${tokens[1]}/USD` as PythPriceIdPair,\n ],\n ignoreCache,\n );\n if (priceOfCoin0 && priceOfCoin1) {\n const amount = amount0.mul(priceOfCoin0).add(amount1.mul(priceOfCoin1));\n return amount.toString();\n }\n } else {\n console.error(\n `getPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n }\n}\n\nexport async function getNaviLoopingPoolDebt(\n poolName: PoolName,\n): Promise<string | undefined> {\n const debt = (\n (\n await getSuiClient().getDynamicFieldObject({\n parentId: poolInfo[poolName].investorId,\n name: {\n type: \"vector<u8>\",\n value: \"debt\".split(\"\").map((char) => char.charCodeAt(0)),\n },\n })\n ).data as LoopingDebt\n ).content.fields.value.toString();\n return debt;\n}\n\nexport async function getSingleAssetPortfolioAmount(\n poolName: PoolName,\n address: string,\n ignoreCache: boolean,\n) {\n let portfolioAmount: number = 0;\n const receipts = await getReceipts(poolName, address, ignoreCache);\n let totalXTokens = new Decimal(0);\n if (receipts) {\n receipts.forEach((receipt) => {\n const xTokens = receipt.content.fields.xTokenBalance;\n totalXTokens = totalXTokens.add(xTokens);\n });\n }\n if (totalXTokens.gt(0)) {\n let pool;\n let investor;\n if (poolInfo[poolName].parentProtocolName == \"NAVI\") {\n pool = await getPool(poolName, ignoreCache);\n investor = (await getInvestor(poolName, ignoreCache)) as NaviInvestor &\n CommonInvestorFields;\n }\n if (\n poolName == \"NAVI-LOOP-USDC-USDT\" ||\n poolName == \"NAVI-LOOP-USDT-USDC\"\n ) {\n const supplyCoin = loopingPoolCoinMap[poolName].supplyCoin;\n const borrowCoin = loopingPoolCoinMap[poolName].borrowCoin;\n if (pool && investor) {\n let tokensInvested = new Decimal(0);\n const currentDebt = await getNaviLoopingPoolDebt(poolName);\n\n const currentSupply =\n investor.content.fields.tokensDeposited.toString();\n if (\n cetusPoolMap[supplyCoin + \"-\" + borrowCoin] &&\n currentDebt &&\n currentSupply\n ) {\n const cetusPool = await getParentPool(\n supplyCoin + \"-\" + borrowCoin,\n ignoreCache,\n );\n if (cetusPool) {\n const sqrtPrice = cetusPool?.content.fields.current_sqrt_price;\n const price = TickMath.sqrtPriceX64ToPrice(\n new BN(sqrtPrice!),\n coinsList[supplyCoin].expo,\n coinsList[borrowCoin].expo,\n );\n const currentDebtInSupplyCoin = new Decimal(currentDebt).div(price);\n tokensInvested = new Decimal(currentSupply).minus(\n currentDebtInSupplyCoin,\n );\n } else {\n console.error(`couldnt fetch cetus pool`);\n }\n } else if (\n cetusPoolMap[borrowCoin + \"-\" + supplyCoin] &&\n currentDebt !== undefined &&\n currentSupply !== undefined\n ) {\n const cetusPool = await getParentPool(\n borrowCoin + \"-\" + supplyCoin,\n ignoreCache,\n );\n if (cetusPool) {\n const sqrtPrice = cetusPool?.content.fields.current_sqrt_price;\n const price = TickMath.sqrtPriceX64ToPrice(\n new BN(sqrtPrice!),\n coinsList[borrowCoin].expo,\n coinsList[supplyCoin].expo,\n );\n const currentDebtInSupplyCoin = new Decimal(currentDebt).mul(price);\n tokensInvested = new Decimal(currentSupply).minus(\n currentDebtInSupplyCoin,\n );\n } else {\n console.error(`couldnt fetch cetus pool`);\n }\n } else {\n console.error(\n `one or more of these are possibly undefined: currentDebt:${currentDebt}, currentSupply: ${currentSupply}, cetusPoolMap[supplyCoin+'-'+borrowCoin]:${cetusPoolMap[supplyCoin + \"-\" + borrowCoin]}, cetusPoolMap[borrowCoin+'-'+supplyCoin]: ${cetusPoolMap[borrowCoin + \"-\" + supplyCoin]}`,\n );\n }\n\n const xTokenSupplyInPool = new Decimal(\n pool.content.fields.xTokenSupply,\n );\n const userTokens = totalXTokens\n .mul(tokensInvested)\n .div(xTokenSupplyInPool);\n const tokens = userTokens.div(\n Math.pow(\n 10,\n 9 - coinsList[singleAssetPoolCoinMap[poolName].coin].expo,\n ),\n );\n portfolioAmount = Number(tokens);\n } else {\n console.error(`Could not get object for poolName: ${poolName}`);\n }\n } else if (\n poolName == \"NAVI-LOOP-HASUI-SUI\" ||\n poolName == \"NAVI-LOOP-SUI-VSUI\"\n ) {\n if (pool && investor) {\n const liquidity = new Decimal(investor.content.fields.tokensDeposited);\n const debtToSupplyRatio = new Decimal(\n investor.content.fields.current_debt_to_supply_ratio,\n );\n const tokensInvested = liquidity.mul(\n new Decimal(1).minus(new Decimal(debtToSupplyRatio).div(1e20)),\n );\n const xTokenSupplyInPool = new Decimal(\n pool.content.fields.xTokenSupply,\n );\n const userTokens = totalXTokens\n .mul(tokensInvested)\n .div(xTokenSupplyInPool);\n const tokens = userTokens.div(\n Math.pow(\n 10,\n 9 - coinsList[singleAssetPoolCoinMap[poolName].coin].expo,\n ),\n );\n if (poolName == \"NAVI-LOOP-SUI-VSUI\") {\n // const { SevenKGateway } = await import(\"../\");\n // const sevenKInstance = new SevenKGateway();\n // const numberOfTokensInSui = (await sevenKInstance.getQuote({\n // slippage: 1,\n // senderAddress: options.address,\n // pair: { coinA: coins[\"VSUI\"], coinB: coins[\"SUI\"] },\n // inAmount: new BN(tokens.toNumber()),\n // })) as QuoteResponse;\n const voloExchRate = await fetchVoloExchangeRate();\n portfolioAmount = Number(\n tokens.mul(parseFloat(voloExchRate.data.exchangeRate)),\n );\n } else {\n portfolioAmount = Number(tokens);\n }\n } else {\n console.error(`Could not get object for poolName: ${poolName}`);\n }\n } else {\n const poolExchangeRate = await getPoolExchangeRate(poolName, ignoreCache);\n if (poolExchangeRate) {\n let tokens = totalXTokens.mul(poolExchangeRate);\n if (poolInfo[poolName].parentProtocolName == \"NAVI\") {\n tokens = tokens.div(\n Math.pow(\n 10,\n 9 - coinsList[singleAssetPoolCoinMap[poolName].coin].expo,\n ),\n );\n }\n portfolioAmount = tokens.toNumber();\n } else {\n console.error(\n `Could not get poolExchangeRate for poolName: ${poolName}`,\n );\n }\n }\n }\n return portfolioAmount;\n}\n\nexport async function getSingleAssetPortfolioAmountInUSD(\n poolName: PoolName,\n address: string,\n ignoreCache: boolean,\n): Promise<string | undefined> {\n const amounts = await getSingleAssetPortfolioAmount(\n poolName,\n address,\n ignoreCache,\n );\n\n if (amounts !== undefined) {\n let coinName = singleAssetPoolCoinMap[poolName].coin;\n if (poolName == \"NAVI-LOOP-SUI-VSUI\") {\n coinName = \"SUI\";\n }\n const amount = new Decimal(amounts).div(\n new Decimal(Math.pow(10, coinsList[coinName].expo)),\n );\n const [priceOfCoin] = await getLatestPrices(\n [`${coinName}/USD` as PythPriceIdPair],\n ignoreCache,\n );\n if (priceOfCoin) {\n const amountInUSD = amount.mul(priceOfCoin);\n return amountInUSD.toString();\n }\n } else {\n console.error(\n `getSingleAssetPortfolioAmountInUSD is not implemented for poolName: ${poolName}`,\n );\n }\n return \"0\";\n}\n"]}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { AlphaPoolType,
|
|
1
|
+
import { AlphaPoolType, NaviInvestor, CommonInvestorFields, CetusPoolType, PoolName, PoolType, Receipt, NaviVoloData, Investor, SingleAssetPoolNames, ReceiptGQL } from "../../index.js";
|
|
2
2
|
import { Decimal } from "decimal.js";
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function
|
|
8
|
-
export declare function
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function
|
|
11
|
-
export declare function
|
|
3
|
+
export declare function convertReceiptGQLToReceipt(receipts: ReceiptGQL[]): Receipt[];
|
|
4
|
+
export declare function getMultiReceipts(address: string): Promise<void>;
|
|
5
|
+
export declare function getReceipts(poolName: string, address: string, ignoreCache: boolean): Promise<Receipt[]>;
|
|
6
|
+
export declare function getPoolExchangeRate(poolName: PoolName, ignoreCache: boolean): Promise<Decimal | undefined>;
|
|
7
|
+
export declare function getMultiPool(): Promise<void>;
|
|
8
|
+
export declare function getPool(poolName: string, ignoreCache: boolean): Promise<PoolType | AlphaPoolType | undefined>;
|
|
9
|
+
export declare function getMultiParentPool(): Promise<void>;
|
|
10
|
+
export declare function getParentPool(poolName: string, ignoreCache: boolean): Promise<CetusPoolType | undefined>;
|
|
11
|
+
export declare function getMultiInvestor(): Promise<void>;
|
|
12
|
+
export declare function getInvestor(poolName: PoolName, ignoreCache: boolean): Promise<Investor | undefined>;
|
|
13
|
+
export declare function fetchVoloExchangeRate(): Promise<NaviVoloData>;
|
|
14
|
+
export declare function getCoinAmountsFromLiquidity(poolName: PoolName, liquidity: string, ignoreCache: boolean): Promise<[string, string]>;
|
|
15
|
+
export declare function multiGetNaviInvestor(poolNames: SingleAssetPoolNames[]): Promise<{
|
|
12
16
|
ALPHA?: (NaviInvestor & CommonInvestorFields) | undefined;
|
|
13
17
|
"NAVI-SUI"?: (NaviInvestor & CommonInvestorFields) | undefined;
|
|
14
18
|
"NAVI-VSUI"?: (NaviInvestor & CommonInvestorFields) | undefined;
|
|
@@ -25,5 +29,6 @@ export declare function multiGetNaviInvestor(poolNames: SingleAssetPoolNames[],
|
|
|
25
29
|
"NAVI-ETH"?: (NaviInvestor & CommonInvestorFields) | undefined;
|
|
26
30
|
"NAVI-LOOP-HASUI-SUI"?: (NaviInvestor & CommonInvestorFields) | undefined;
|
|
27
31
|
"NAVI-LOOP-USDT-USDC"?: (NaviInvestor & CommonInvestorFields) | undefined;
|
|
32
|
+
"NAVI-NS"?: (NaviInvestor & CommonInvestorFields) | undefined;
|
|
28
33
|
}>;
|
|
29
34
|
//# sourceMappingURL=getReceipts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getReceipts.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getReceipts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"getReceipts.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/getReceipts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EAEb,YAAY,EACZ,oBAAoB,EACpB,aAAa,EAEb,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,QAAQ,EAGR,oBAAoB,EAEpB,UAAU,EAGX,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAyE5E;AAKD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,iBA0BrD;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,OAAO,EAAE,CAAC,CAgEpB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAoC9B;AAOD,wBAAsB,YAAY,kBAuBjC;AAED,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAC,CAgD/C;AAOD,wBAAsB,kBAAkB,kBAuBvC;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAkDpC;AAKD,wBAAsB,gBAAgB,kBAuBrC;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAqD/B;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,CAAC,CAenE;AAED,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4B3B;AAED,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;GA8B3E"}
|