@alphafi/alphafi-sdk 0.0.57 → 0.0.59
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/dist/cjs/common/constants.d.ts +31 -0
- package/dist/cjs/common/constants.d.ts.map +1 -1
- package/dist/cjs/common/constants.js +38 -5
- package/dist/cjs/common/constants.js.map +1 -1
- package/dist/cjs/getAprs.d.ts +2 -0
- package/dist/cjs/getAprs.d.ts.map +1 -1
- package/dist/cjs/getAprs.js +251 -1
- package/dist/cjs/getAprs.js.map +1 -1
- package/dist/cjs/transactions/bluefin.d.ts.map +1 -1
- package/dist/cjs/transactions/bluefin.js +84 -28
- package/dist/cjs/transactions/bluefin.js.map +1 -1
- package/dist/esm/common/constants.d.ts +31 -0
- package/dist/esm/common/constants.d.ts.map +1 -1
- package/dist/esm/common/constants.js +38 -5
- package/dist/esm/common/constants.js.map +1 -1
- package/dist/esm/getAprs.d.ts +2 -0
- package/dist/esm/getAprs.d.ts.map +1 -1
- package/dist/esm/getAprs.js +249 -2
- package/dist/esm/getAprs.js.map +1 -1
- package/dist/esm/transactions/bluefin.d.ts.map +1 -1
- package/dist/esm/transactions/bluefin.js +84 -28
- package/dist/esm/transactions/bluefin.js.map +1 -1
- package/docs/assets/highlight.css +51 -74
- package/docs/assets/icons.js +17 -20
- package/docs/assets/main.js +5 -2163
- package/docs/assets/navigation.js +1 -2
- package/docs/assets/search.js +1 -2
- package/docs/assets/style.css +850 -846
- package/docs/functions/alphaLpBreakdown.html +1 -253
- package/docs/functions/cetusLpBreakdown.html +1 -253
- package/docs/functions/claimBlueRewardTxb.html +1 -258
- package/docs/functions/claimRewardTxb.html +1 -243
- package/docs/functions/coinAmountToXTokensDoubleAsset.html +1 -267
- package/docs/functions/coinAmountToXTokensSingleAsset.html +1 -260
- package/docs/functions/coinsInPool.html +1 -438
- package/docs/functions/collectRewards.html +1 -242
- package/docs/functions/deposit.html +1 -246
- package/docs/functions/depositDoubleAssetTxb.html +1 -270
- package/docs/functions/depositSingleAssetTxb.html +1 -263
- package/docs/functions/fetchAfterTransactionEvents.html +1 -328
- package/docs/functions/fetchAutoCompoundingEvents.html +1 -257
- package/docs/functions/fetchAutoCompoundingEventsGql.html +1 -251
- package/docs/functions/fetchCetusPools.html +1 -231
- package/docs/functions/fetchChainIdentifier.html +1 -233
- package/docs/functions/fetchCheckRatioEvents.html +1 -249
- package/docs/functions/fetchLiquidityChangeEvents.html +1 -257
- package/docs/functions/fetchMultiCategoryEvents.html +1 -348
- package/docs/functions/fetchMultiReceipts.html +1 -261
- package/docs/functions/fetchNftHolders.html +1 -233
- package/docs/functions/fetchPools.html +1 -230
- package/docs/functions/fetchPortfolioData.html +1 -243
- package/docs/functions/fetchProtocolData.html +1 -231
- package/docs/functions/fetchTVL.html +1 -253
- package/docs/functions/fetchUserVaultBalances.html +1 -245
- package/docs/functions/fetchUserVaults.html +1 -243
- package/docs/functions/fetchUserWalletData.html +1 -243
- package/docs/functions/fetchVoloExchangeRate.html +1 -251
- package/docs/functions/fetchWithdrawV2Events.html +1 -255
- package/docs/functions/getAirdropShare.html +1 -243
- package/docs/functions/getAllDoubleAssetVaults.html +1 -235
- package/docs/functions/getAllSingleAssetVaults.html +1 -235
- package/docs/functions/getAllVaultBalances.html +1 -265
- package/docs/functions/getAllVaults.html +1 -233
- package/docs/functions/getAlphaUnlocks.html +1 -245
- package/docs/functions/getAlphaVaultBalance.html +1 -255
- package/docs/functions/getAmounts.html +1 -272
- package/docs/functions/getApr.html +1 -243
- package/docs/functions/getAprs.html +1 -255
- package/docs/functions/getApy.html +1 -243
- package/docs/functions/getApys.html +1 -255
- package/docs/functions/getCetusInvestorTicksMap.html +1 -284
- package/docs/functions/getCetusPool.html +1 -270
- package/docs/functions/getCetusSqrtPriceMap.html +1 -249
- package/docs/functions/getCoinAmountsFromLiquidity.html +1 -273
- package/docs/functions/getConf.html +1 -13163
- package/docs/functions/getCurrentTick.html +1 -247
- package/docs/functions/getDistributor.html +1 -252
- package/docs/functions/getDoubleAssetVaultBalance.html +1 -268
- package/docs/functions/getDoubleAssetVaults.html +1 -253
- package/docs/functions/getHoldersFromTransactions.html +1 -299
- package/docs/functions/getInvestor.html +1 -259
- package/docs/functions/getInvestorPoolMap.html +1 -241
- package/docs/functions/getLastAutoCompoundTime.html +1 -249
- package/docs/functions/getLatestPrices.html +1 -253
- package/docs/functions/getLiquidity.html +1 -260
- package/docs/functions/getMultiCetusPool.html +1 -231
- package/docs/functions/getMultiInvestor.html +1 -231
- package/docs/functions/getMultiLatestPrices.html +1 -233
- package/docs/functions/getMultiParentPool.html +1 -231
- package/docs/functions/getMultiPool.html +1 -231
- package/docs/functions/getMultiReceipts.html +1 -243
- package/docs/functions/getParentPool.html +1 -266
- package/docs/functions/getPool.html +1 -262
- package/docs/functions/getPoolExchangeRate.html +1 -254
- package/docs/functions/getPoolExchangeRateMap.html +1 -249
- package/docs/functions/getPoolsWeightDistribution.html +1 -266
- package/docs/functions/getPositionRange.html +1 -283
- package/docs/functions/getPositionRanges.html +1 -289
- package/docs/functions/getPositionTicks.html +1 -249
- package/docs/functions/getPriceToTick.html +1 -264
- package/docs/functions/getRebalanceHistories.html +1 -269
- package/docs/functions/getRebalanceHistory.html +1 -255
- package/docs/functions/getReceipts.html +1 -268
- package/docs/functions/getSingleAssetVaultBalance.html +1 -268
- package/docs/functions/getSingleAssetVaults.html +1 -253
- package/docs/functions/getSuiClient.html +3 -247
- package/docs/functions/getSuiNodeUrl.html +3 -232
- package/docs/functions/getTVLs-1.html +1 -243
- package/docs/functions/getTickSpacing.html +1 -247
- package/docs/functions/getTickToPrice.html +1 -248
- package/docs/functions/getTvls.html +1 -259
- package/docs/functions/getUserTokensFromTransactions.html +1 -269
- package/docs/functions/getUserTokensInUsdFromTransactions.html +1 -263
- package/docs/functions/getVaultBalance.html +1 -277
- package/docs/functions/getVaultBalanceForActiveUsers.html +1 -261
- package/docs/functions/getVaults.html +1 -250
- package/docs/functions/getXTokenVaultBalanceForActiveUsers.html +1 -261
- package/docs/functions/getZapAmounts.html +1 -323
- package/docs/functions/lastAutocompoundTime.html +1 -249
- package/docs/functions/liquidityToTokens.html +1 -253
- package/docs/functions/multiLiquidityToTokens.html +1 -271
- package/docs/functions/multiTokensToUsd.html +1 -262
- package/docs/functions/multiXTokensToLiquidity.html +1 -257
- package/docs/functions/parseUserWalletData.html +1 -243
- package/docs/functions/pendingBlueRewardAmount.html +1 -256
- package/docs/functions/setCustomSuiClient.html +5 -251
- package/docs/functions/setSuiClient.html +7 -255
- package/docs/functions/setSuiNodeUrl.html +5 -249
- package/docs/functions/setWeights.html +1 -270
- package/docs/functions/withdraw.html +1 -249
- package/docs/functions/withdrawAlphaTxb.html +1 -257
- package/docs/functions/withdrawTxb.html +1 -260
- package/docs/functions/zapDepositTxb.html +1 -300
- package/docs/index.html +41 -587
- package/docs/interfaces/Coin.html +12 -474
- package/docs/interfaces/CoinPair.html +3 -358
- package/docs/interfaces/NaviVoloData.html +3 -514
- package/docs/interfaces/PoolData.html +8 -579
- package/docs/interfaces/PoolWeightDistribution.html +4 -414
- package/docs/interfaces/RebalanceHistoryType.html +9 -652
- package/docs/modules.html +198 -1430
- package/docs/types/AfterTransactionEventNode.html +1 -305
- package/docs/types/Allocator.html +1 -321
- package/docs/types/AlphaFiDoubleAssetVault.html +1 -258
- package/docs/types/AlphaFiMultiVaultBalance.html +1 -219
- package/docs/types/AlphaFiSingleAssetVault.html +1 -244
- package/docs/types/AlphaFiVault.html +1 -214
- package/docs/types/AlphaFiVaultBalance.html +1 -220
- package/docs/types/AlphaPoolType.html +1 -383
- package/docs/types/AlphaReceipt.html +1 -220
- package/docs/types/AlphaReceiptFields.html +1 -421
- package/docs/types/AlphaVaultBalance.html +1 -245
- package/docs/types/AutoBalancePoolNames.html +1 -226
- package/docs/types/AutoCompoundingEventNode.html +1 -230
- package/docs/types/BluefinInvestor.html +1 -209
- package/docs/types/BluefinPoolType.html +1 -440
- package/docs/types/BucketInvestor.html +1 -249
- package/docs/types/CetusInvestor.html +1 -240
- package/docs/types/CetusPoolType.html +1 -433
- package/docs/types/CetusSwapOptions.html +1 -209
- package/docs/types/CoinAmounts.html +1 -216
- package/docs/types/CoinName.html +1 -293
- package/docs/types/CoinType.html +1 -294
- package/docs/types/CommonInvestorFields.html +1 -276
- package/docs/types/CreatePoolOptions.html +1 -246
- package/docs/types/Distributor.html +1 -341
- package/docs/types/DoubleAssetMultiVaultBalance.html +1 -236
- package/docs/types/DoubleAssetPoolNames.html +1 -297
- package/docs/types/DoubleAssetTokenHoldings.html +1 -232
- package/docs/types/DoubleAssetVaultBalance.html +1 -229
- package/docs/types/EventCategory.html +1 -209
- package/docs/types/EventNode.html +1 -229
- package/docs/types/GetHoldersParams.html +1 -221
- package/docs/types/GetTokenHoldingsParams.html +1 -227
- package/docs/types/GetUserTokensFromTransactionsParams.html +1 -233
- package/docs/types/GetUserTokensInUsdFromTransactionsParams.html +1 -244
- package/docs/types/GetVaultBalanceForActiveUsersParams.html +1 -231
- package/docs/types/GetVaultBalanceParams.html +1 -217
- package/docs/types/HoldingsObj.html +1 -223
- package/docs/types/Icon.html +1 -266
- package/docs/types/Investor.html +1 -245
- package/docs/types/LiquidityChangeEventNode.html +1 -220
- package/docs/types/LiquidityToTokensParams.html +1 -255
- package/docs/types/LiquidityToUsdParams.html +1 -267
- package/docs/types/LoopingDebt.html +1 -258
- package/docs/types/LoopingPoolNames.html +1 -216
- package/docs/types/LpBreakdownType.html +1 -238
- package/docs/types/MemberPoolDataType.html +1 -276
- package/docs/types/MemberType.html +1 -269
- package/docs/types/MultiGetVaultBalancesParams.html +1 -229
- package/docs/types/NaviInvestor.html +1 -235
- package/docs/types/OtherReceiptFields.html +1 -373
- package/docs/types/PoolName.html +1 -214
- package/docs/types/PoolReceipt.html +1 -253
- package/docs/types/PoolType.html +1 -388
- package/docs/types/Receipt.html +1 -475
- package/docs/types/ReceiptGQL.html +1 -374
- package/docs/types/SingleAssetMultiVaultBalance.html +1 -232
- package/docs/types/SingleAssetPoolNames.html +1 -244
- package/docs/types/SingleAssetTokenHoldings.html +1 -228
- package/docs/types/SingleAssetVaultBalance.html +1 -223
- package/docs/types/SingleGetVaultBalancesParams.html +1 -224
- package/docs/types/StrategyType.html +1 -221
- package/docs/types/SuiNetwork.html +1 -213
- package/docs/types/SwapOptions.html +1 -248
- package/docs/types/TickSpacing.html +1 -212
- package/docs/types/TotalWeightType.html +1 -246
- package/docs/types/TransactionBlockType.html +1 -358
- package/docs/types/UserPoolLiquidity.html +1 -221
- package/docs/types/UserPoolTokenHoldings.html +1 -217
- package/docs/types/UserUsdHoldings.html +1 -223
- package/docs/types/VaultBalance.html +1 -216
- package/docs/types/WithdrawV2EventNode.html +1 -208
- package/docs/variables/bluefinPoolMap.html +1 -214
- package/docs/variables/cetusPoolMap.html +1 -214
- package/docs/variables/coinsList.html +1 -220
- package/docs/variables/defunctPoolsSet.html +1 -209
- package/docs/variables/doubleAssetPoolCoinMap.html +1 -237
- package/docs/variables/eventCategories.html +1 -210
- package/docs/variables/ignoredWalletsForDailyRevenue.html +1 -218
- package/docs/variables/loopingAccountAddresses.html +1 -219
- package/docs/variables/loopingPoolCoinMap.html +1 -233
- package/docs/variables/naviAssetMap.html +1 -215
- package/docs/variables/poolIdPoolNameMap.html +1 -218
- package/docs/variables/poolInfo.html +1 -319
- package/docs/variables/singleAssetPoolCoinMap.html +1 -229
- package/docs/variables/stableCoins.html +1 -207
- package/package.json +1 -1
package/dist/cjs/getAprs.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { PoolName } from "./common/types.js";
|
|
2
2
|
export declare function getApr(poolName: PoolName): Promise<number>;
|
|
3
3
|
export declare function getAprs(poolNames?: PoolName[]): Promise<Record<string, number>>;
|
|
4
|
+
export declare function getRewardAprs(poolNames?: PoolName[]): Promise<Record<string, number>>;
|
|
4
5
|
export declare function getApy(poolName: PoolName): Promise<number>;
|
|
5
6
|
export declare function getApys(poolNames?: PoolName[]): Promise<Record<string, number>>;
|
|
7
|
+
export declare function fetchRewardAPR(poolName: PoolName, ignoreCache: boolean): Promise<number>;
|
|
6
8
|
//# sourceMappingURL=getAprs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAprs.d.ts","sourceRoot":"","sources":["../../src/getAprs.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"getAprs.d.ts","sourceRoot":"","sources":["../../src/getAprs.ts"],"names":[],"mappings":"AAIA,OAAO,EAOL,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAyB3B,wBAAsB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhE;AAED,wBAAsB,OAAO,CAC3B,SAAS,CAAC,EAAE,QAAQ,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAoBjC;AAED,wBAAsB,aAAa,CACjC,SAAS,CAAC,EAAE,QAAQ,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAoBjC;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED,wBAAsB,OAAO,CAC3B,SAAS,CAAC,EAAE,QAAQ,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAejC;AAaD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC,CA2RjB"}
|
package/dist/cjs/getAprs.js
CHANGED
|
@@ -2,10 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getApr = getApr;
|
|
4
4
|
exports.getAprs = getAprs;
|
|
5
|
+
exports.getRewardAprs = getRewardAprs;
|
|
5
6
|
exports.getApy = getApy;
|
|
6
7
|
exports.getApys = getApys;
|
|
8
|
+
exports.fetchRewardAPR = fetchRewardAPR;
|
|
9
|
+
const tslib_1 = require("tslib");
|
|
7
10
|
const fetchAutoCompoundingEvents_js_1 = require("./sui-sdk/events/fetchAutoCompoundingEvents.js");
|
|
8
11
|
const maps_js_1 = require("./common/maps.js");
|
|
12
|
+
const decimal_js_1 = require("decimal.js");
|
|
13
|
+
const constants_js_1 = require("./common/constants.js");
|
|
14
|
+
const getReceipts_js_1 = require("./sui-sdk/functions/getReceipts.js");
|
|
15
|
+
const prices_js_1 = require("./utils/prices.js");
|
|
16
|
+
const cetus_sui_clmm_sdk_1 = require("@cetusprotocol/cetus-sui-clmm-sdk");
|
|
17
|
+
const bn_js_1 = tslib_1.__importDefault(require("bn.js"));
|
|
18
|
+
const coins_js_1 = require("./common/coins.js");
|
|
9
19
|
async function getApr(poolName) {
|
|
10
20
|
const aprMap = await getAprs([poolName]);
|
|
11
21
|
const apr = aprMap[poolName];
|
|
@@ -28,17 +38,40 @@ async function getAprs(poolNames) {
|
|
|
28
38
|
}
|
|
29
39
|
return aprMap;
|
|
30
40
|
}
|
|
41
|
+
async function getRewardAprs(poolNames) {
|
|
42
|
+
await Promise.all([
|
|
43
|
+
(0, getReceipts_js_1.getMultiPool)(),
|
|
44
|
+
(0, getReceipts_js_1.getMultiCetusPool)(),
|
|
45
|
+
(0, getReceipts_js_1.getMultiInvestor)(),
|
|
46
|
+
(0, getReceipts_js_1.getMultiParentPool)(),
|
|
47
|
+
(0, prices_js_1.getMultiLatestPrices)(),
|
|
48
|
+
]);
|
|
49
|
+
const aprMap = {};
|
|
50
|
+
if (poolNames) {
|
|
51
|
+
poolNames.forEach(async (pool) => {
|
|
52
|
+
aprMap[pool] = await fetchRewardAPR(pool, false);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
for (const pool of Object.keys(maps_js_1.poolInfo)) {
|
|
57
|
+
aprMap[pool] = await fetchRewardAPR(pool, false);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return aprMap;
|
|
61
|
+
}
|
|
31
62
|
async function getApy(poolName) {
|
|
32
63
|
const apy = convertAprToApy(await getApr(poolName));
|
|
33
64
|
return apy;
|
|
34
65
|
}
|
|
35
66
|
async function getApys(poolNames) {
|
|
36
67
|
const aprMap = await getAprs(poolNames);
|
|
68
|
+
const rewardAprMap = await getRewardAprs(poolNames);
|
|
69
|
+
// console.log(aprMap);
|
|
37
70
|
// Convert each APR to APY
|
|
38
71
|
const apyMap = {};
|
|
39
72
|
for (const poolName in aprMap) {
|
|
40
73
|
if (aprMap.hasOwnProperty(poolName)) {
|
|
41
|
-
apyMap[poolName] = convertAprToApy(aprMap[poolName]);
|
|
74
|
+
apyMap[poolName] = convertAprToApy(aprMap[poolName] + rewardAprMap[poolName]);
|
|
42
75
|
}
|
|
43
76
|
}
|
|
44
77
|
return apyMap;
|
|
@@ -53,4 +86,221 @@ function convertAprToApy(apr) {
|
|
|
53
86
|
const apy = 100 * (Math.pow(1 + apr / 100 / n, n) - 1);
|
|
54
87
|
return apy;
|
|
55
88
|
}
|
|
89
|
+
async function fetchRewardAPR(poolName, ignoreCache) {
|
|
90
|
+
let apr = 0;
|
|
91
|
+
if (!(poolName in maps_js_1.poolInfo)) {
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
if (poolName === "ALPHA") {
|
|
96
|
+
const pool = await (0, getReceipts_js_1.getPool)("ALPHA", ignoreCache);
|
|
97
|
+
const distributor = await (0, getReceipts_js_1.getDistributor)(ignoreCache);
|
|
98
|
+
if (pool && distributor) {
|
|
99
|
+
const allocator = distributor.content.fields.pool_allocator;
|
|
100
|
+
const tokensInvested = Number(pool.content.fields.tokensInvested);
|
|
101
|
+
const target = Number(distributor.content.fields.target);
|
|
102
|
+
const members = allocator.fields.members.fields.contents;
|
|
103
|
+
let alphaMember = undefined;
|
|
104
|
+
for (const member of members) {
|
|
105
|
+
if (member.fields.key === (0, constants_js_1.getConf)().ALPHA_POOL) {
|
|
106
|
+
alphaMember = member;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (alphaMember) {
|
|
110
|
+
const weight = Number(alphaMember.fields.value.fields.pool_data.fields.contents[0].fields
|
|
111
|
+
.value.fields.weight);
|
|
112
|
+
const totalWeightArr = allocator.fields.total_weights.fields.contents;
|
|
113
|
+
const totalWeight = Number(totalWeightArr[0].fields.value);
|
|
114
|
+
if (totalWeight === 0 || tokensInvested === 0)
|
|
115
|
+
return 0;
|
|
116
|
+
apr =
|
|
117
|
+
(((target / 100) * 365 * weight) / totalWeight / tokensInvested) *
|
|
118
|
+
(2750000 / 4250000) *
|
|
119
|
+
100;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (Object.keys(maps_js_1.doubleAssetPoolCoinMap).includes(poolName)) {
|
|
124
|
+
const distributor = await (0, getReceipts_js_1.getDistributor)(ignoreCache);
|
|
125
|
+
let clmmPool;
|
|
126
|
+
if (maps_js_1.poolInfo[poolName].parentProtocolName == "CETUS") {
|
|
127
|
+
clmmPool = await (0, getReceipts_js_1.getCetusPool)(poolName, ignoreCache);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
clmmPool = await (0, getReceipts_js_1.getParentPool)(poolName, ignoreCache);
|
|
131
|
+
}
|
|
132
|
+
const pool = await (0, getReceipts_js_1.getPool)(poolName, ignoreCache);
|
|
133
|
+
let investor;
|
|
134
|
+
if (maps_js_1.poolInfo[poolName].parentProtocolName == "CETUS") {
|
|
135
|
+
investor = (await (0, getReceipts_js_1.getInvestor)(poolName, ignoreCache));
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
investor = (await (0, getReceipts_js_1.getInvestor)(poolName, ignoreCache));
|
|
139
|
+
}
|
|
140
|
+
const tokenA = maps_js_1.doubleAssetPoolCoinMap[poolName].coin1;
|
|
141
|
+
const tokenB = maps_js_1.doubleAssetPoolCoinMap[poolName].coin2;
|
|
142
|
+
if (distributor && clmmPool && investor && pool) {
|
|
143
|
+
const allocator = distributor.content.fields.pool_allocator;
|
|
144
|
+
const members = allocator.fields.members.fields.contents;
|
|
145
|
+
let poolMember = undefined;
|
|
146
|
+
for (const member of members) {
|
|
147
|
+
if (member.fields.key == maps_js_1.poolInfo[poolName].poolId) {
|
|
148
|
+
poolMember = member;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (poolMember) {
|
|
152
|
+
try {
|
|
153
|
+
const target = Number(distributor.content.fields.target);
|
|
154
|
+
const weight = Number(poolMember.fields.value.fields.pool_data.fields.contents[0].fields
|
|
155
|
+
.value.fields.weight);
|
|
156
|
+
const totalWeight = Number(allocator.fields.total_weights.fields.contents[0].fields.value);
|
|
157
|
+
if (totalWeight === 0)
|
|
158
|
+
return 0;
|
|
159
|
+
const [priceOfCoin0, priceOfCoin1] = await (0, prices_js_1.getLatestPrices)([
|
|
160
|
+
`${tokenA}/USD`,
|
|
161
|
+
`${tokenB}/USD`,
|
|
162
|
+
], ignoreCache);
|
|
163
|
+
const [priceOfAlpha] = await (0, prices_js_1.getLatestPrices)(["ALPHA/USD"], ignoreCache);
|
|
164
|
+
if (priceOfCoin0 && priceOfCoin1) {
|
|
165
|
+
const liquidity = Math.floor(parseFloat(pool.content.fields.tokensInvested)).toString();
|
|
166
|
+
const current_sqrt_price = new bn_js_1.default(clmmPool.content.fields.current_sqrt_price);
|
|
167
|
+
const upperBound = 443636;
|
|
168
|
+
let lowerTick = Number(investor.content.fields.lower_tick);
|
|
169
|
+
let upperTick = Number(investor.content.fields.upper_tick);
|
|
170
|
+
if (lowerTick > upperBound) {
|
|
171
|
+
lowerTick = -~(lowerTick - 1);
|
|
172
|
+
}
|
|
173
|
+
if (upperTick > upperBound) {
|
|
174
|
+
upperTick = -~(upperTick - 1);
|
|
175
|
+
}
|
|
176
|
+
const upper_sqrt_price = cetus_sui_clmm_sdk_1.TickMath.tickIndexToSqrtPriceX64(upperTick);
|
|
177
|
+
const lower_sqrt_price = cetus_sui_clmm_sdk_1.TickMath.tickIndexToSqrtPriceX64(lowerTick);
|
|
178
|
+
const { coinA, coinB } = cetus_sui_clmm_sdk_1.ClmmPoolUtil.getCoinAmountFromLiquidity(new bn_js_1.default(liquidity), current_sqrt_price, lower_sqrt_price, upper_sqrt_price, false);
|
|
179
|
+
let amount0 = coinA;
|
|
180
|
+
let amount1 = coinB;
|
|
181
|
+
// amount0 = amount0 / 10 ** coins[tokenA as CoinName].expo;
|
|
182
|
+
// amount1 = amount1 / 10 ** coins[tokenB as CoinName].expo;
|
|
183
|
+
amount0 = amount0.div(new bn_js_1.default(10 ** coins_js_1.coinsList[tokenA].expo));
|
|
184
|
+
amount1 = amount1.div(new bn_js_1.default(10 ** coins_js_1.coinsList[tokenB].expo));
|
|
185
|
+
if (priceOfAlpha) {
|
|
186
|
+
const amount0Big = new decimal_js_1.Decimal(amount0.toString());
|
|
187
|
+
const targetBig = new decimal_js_1.Decimal(target);
|
|
188
|
+
const weightBig = new decimal_js_1.Decimal(weight);
|
|
189
|
+
const totalWeightBig = new decimal_js_1.Decimal(totalWeight);
|
|
190
|
+
const priceOfAlphaBig = new decimal_js_1.Decimal(priceOfAlpha);
|
|
191
|
+
const priceOfCoin0Big = new decimal_js_1.Decimal(priceOfCoin0);
|
|
192
|
+
const amount1Big = new decimal_js_1.Decimal(amount1.toString());
|
|
193
|
+
const priceOfCoin1Big = new decimal_js_1.Decimal(priceOfCoin1);
|
|
194
|
+
if (totalWeight === 0 ||
|
|
195
|
+
amount0Big
|
|
196
|
+
.mul(priceOfCoin0Big)
|
|
197
|
+
.add(amount1Big.mul(priceOfCoin1Big))
|
|
198
|
+
.isZero()) {
|
|
199
|
+
return 0;
|
|
200
|
+
}
|
|
201
|
+
// apr =
|
|
202
|
+
// (((((target / (100 * 1_000_000_000)) * 365 * weight) /
|
|
203
|
+
// totalWeight) *
|
|
204
|
+
// parseFloat(priceOfAlpha)) /
|
|
205
|
+
// (amount0 * Number(priceOfCoin0) +
|
|
206
|
+
// amount1 * Number(priceOfCoin1))) *
|
|
207
|
+
// (2_750_000 / 4_250_000) *
|
|
208
|
+
// 100;
|
|
209
|
+
apr = targetBig
|
|
210
|
+
.div(new decimal_js_1.Decimal(100).mul(new decimal_js_1.Decimal(1000000000)))
|
|
211
|
+
.mul(new decimal_js_1.Decimal(365))
|
|
212
|
+
.mul(weightBig)
|
|
213
|
+
.div(totalWeightBig)
|
|
214
|
+
.mul(priceOfAlphaBig)
|
|
215
|
+
.div(amount0Big
|
|
216
|
+
.mul(priceOfCoin0Big)
|
|
217
|
+
.add(amount1Big.mul(priceOfCoin1Big)))
|
|
218
|
+
.mul(new decimal_js_1.Decimal(2750000).div(new decimal_js_1.Decimal(4250000)))
|
|
219
|
+
.mul(new decimal_js_1.Decimal(100))
|
|
220
|
+
.toNumber();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
console.log(`Error calculating Alpha APR for pool ${poolName}`, error);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else if (Object.keys(maps_js_1.singleAssetPoolCoinMap).includes(poolName)) {
|
|
231
|
+
const distributor = await (0, getReceipts_js_1.getDistributor)(ignoreCache);
|
|
232
|
+
const pool = await (0, getReceipts_js_1.getPool)(poolName, ignoreCache);
|
|
233
|
+
const token = maps_js_1.singleAssetPoolCoinMap[poolName];
|
|
234
|
+
if (distributor && pool) {
|
|
235
|
+
const allocator = distributor.content.fields.pool_allocator;
|
|
236
|
+
const members = allocator.fields.members.fields.contents;
|
|
237
|
+
let poolMember = undefined;
|
|
238
|
+
for (const member of members) {
|
|
239
|
+
if (member.fields.key == maps_js_1.poolInfo[poolName].poolId) {
|
|
240
|
+
poolMember = member;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (poolMember) {
|
|
244
|
+
try {
|
|
245
|
+
const target = Number(distributor.content.fields.target);
|
|
246
|
+
const weight = Number(poolMember.fields.value.fields.pool_data.fields.contents[0].fields
|
|
247
|
+
.value.fields.weight);
|
|
248
|
+
const totalWeight = Number(allocator.fields.total_weights.fields.contents[0].fields.value);
|
|
249
|
+
if (totalWeight === 0)
|
|
250
|
+
return 0;
|
|
251
|
+
const [priceOfCoin] = await (0, prices_js_1.getLatestPrices)([`${token.coin}/USD`], ignoreCache);
|
|
252
|
+
const [priceOfAlpha] = await (0, prices_js_1.getLatestPrices)(["ALPHA/USD"], ignoreCache);
|
|
253
|
+
if (priceOfCoin) {
|
|
254
|
+
let tokensInvested = new decimal_js_1.Decimal(pool.content.fields.tokensInvested);
|
|
255
|
+
// dividing by 1e9 for every token because navi scales every token's liquidity to 1e9;
|
|
256
|
+
if (poolName == "NAVI-LOOP-SUI-VSUI" ||
|
|
257
|
+
poolName == "NAVI-LOOP-USDC-USDT" ||
|
|
258
|
+
poolName == "NAVI-LOOP-HASUI-SUI" ||
|
|
259
|
+
poolName == "NAVI-LOOP-USDT-USDC") {
|
|
260
|
+
const investor = (await (0, getReceipts_js_1.getInvestor)(poolName, ignoreCache));
|
|
261
|
+
if (investor) {
|
|
262
|
+
const debtToSupplyRatio = new decimal_js_1.Decimal(investor.content.fields.current_debt_to_supply_ratio);
|
|
263
|
+
tokensInvested = tokensInvested
|
|
264
|
+
.mul(new decimal_js_1.Decimal(1).minus(debtToSupplyRatio.div(new decimal_js_1.Decimal(1e20))))
|
|
265
|
+
.div(new decimal_js_1.Decimal(1e9));
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
tokensInvested = new decimal_js_1.Decimal(0);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
tokensInvested = tokensInvested.div(Math.pow(10, 9));
|
|
273
|
+
}
|
|
274
|
+
const liquidity = tokensInvested.toNumber();
|
|
275
|
+
if (priceOfAlpha) {
|
|
276
|
+
if (totalWeight === 0 || liquidity * Number(priceOfCoin) === 0)
|
|
277
|
+
return 0;
|
|
278
|
+
apr =
|
|
279
|
+
(((((target / (100 * 1000000000)) * 365 * weight) /
|
|
280
|
+
totalWeight) *
|
|
281
|
+
parseFloat(priceOfAlpha)) /
|
|
282
|
+
(liquidity * Number(priceOfCoin))) *
|
|
283
|
+
(2750000 / 4250000) *
|
|
284
|
+
100;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
catch (e) {
|
|
289
|
+
console.error("error in fetchRewardAPR", e);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
console.log("fetchRewardAPR not implemented for poolName: " + poolName);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
console.error("error in fetchRewardAPR", e);
|
|
300
|
+
}
|
|
301
|
+
if (!apr) {
|
|
302
|
+
apr = 0;
|
|
303
|
+
}
|
|
304
|
+
return apr;
|
|
305
|
+
}
|
|
56
306
|
//# sourceMappingURL=getAprs.js.map
|
package/dist/cjs/getAprs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAprs.js","sourceRoot":"","sources":["../../src/getAprs.ts"],"names":[],"mappings":";;AAOA,wBAIC;AAED,0BAsBC;AAED,wBAGC;AAED,0BAcC;AAxDD,kGAGwD;AAExD,8CAA4C;AAErC,KAAK,UAAU,MAAM,CAAC,QAAkB;IAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,SAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,6BAA6B;IAE9E,MAAM,MAAM,GAAG,MAAM,IAAA,0DAA0B,EAAC;QAC9C,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,IAAA,oDAAoB,EAAC,MAAM,CAAC,CAAC;IAElD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAgB,CAAC;QAClC,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,QAAkB;IAC7C,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,SAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IAExC,0BAA0B;IAC1B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,gBAAgB;IACnC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import {\n calculateAprForPools,\n fetchAutoCompoundingEvents,\n} from \"./sui-sdk/events/fetchAutoCompoundingEvents.js\";\nimport { PoolName } from \"./common/types.js\";\nimport { poolInfo } from \"./common/maps.js\";\n\nexport async function getApr(poolName: PoolName): Promise<number> {\n const aprMap = await getAprs([poolName]);\n const apr = aprMap[poolName];\n return apr;\n}\n\nexport async function getAprs(\n poolNames?: PoolName[],\n): Promise<Record<string, number>> {\n const endTime = Date.now();\n const startTime = endTime - 24 * 60 * 60 * 1000; // timestamp for 24 hours ago\n\n const events = await fetchAutoCompoundingEvents({\n startTime: startTime,\n endTime: endTime,\n poolNames: poolNames,\n });\n\n const aprMap = await calculateAprForPools(events);\n\n for (const pool of Object.keys(poolInfo)) {\n const poolName = pool as PoolName;\n if (!(poolName in aprMap)) {\n aprMap[poolName] = 0;\n }\n }\n\n return aprMap;\n}\n\nexport async function getApy(poolName: PoolName): Promise<number> {\n const apy = convertAprToApy(await getApr(poolName));\n return apy;\n}\n\nexport async function getApys(\n poolNames?: PoolName[],\n): Promise<Record<string, number>> {\n const aprMap = await getAprs(poolNames);\n\n // Convert each APR to APY\n const apyMap: Record<string, number> = {};\n for (const poolName in aprMap) {\n if (aprMap.hasOwnProperty(poolName)) {\n apyMap[poolName] = convertAprToApy(aprMap[poolName]);\n }\n }\n\n return apyMap;\n}\n\n/**\n * Converts APR to APY with compounding 6 times a day\n * @param apr - The annual percentage rate (APR) as a decimal\n * @returns The annual percentage yield (APY) as a decimal\n */\nfunction convertAprToApy(apr: number): number {\n const n = 6 * 365; // 6 times a day\n const apy = 100 * (Math.pow(1 + apr / 100 / n, n) - 1);\n return apy;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"getAprs.js","sourceRoot":"","sources":["../../src/getAprs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n calculateAprForPools,\n fetchAutoCompoundingEvents,\n} from \"./sui-sdk/events/fetchAutoCompoundingEvents.js\";\nimport {\n Allocator,\n BluefinInvestor,\n CetusInvestor,\n CommonInvestorFields,\n MemberType,\n NaviInvestor,\n PoolName,\n} from \"./common/types.js\";\nimport {\n doubleAssetPoolCoinMap,\n poolInfo,\n singleAssetPoolCoinMap,\n} from \"./common/maps.js\";\nimport { Decimal } from \"decimal.js\";\nimport { getConf } from \"./common/constants.js\";\nimport {\n getCetusPool,\n getDistributor,\n getInvestor,\n getMultiCetusPool,\n getMultiInvestor,\n getMultiParentPool,\n getMultiPool,\n getParentPool,\n getPool,\n} from \"./sui-sdk/functions/getReceipts.js\";\nimport { getLatestPrices, getMultiLatestPrices } from \"./utils/prices.js\";\nimport { PythPriceIdPair } from \"./common/pyth.js\";\nimport { ClmmPoolUtil, TickMath } from \"@cetusprotocol/cetus-sui-clmm-sdk\";\nimport BN from \"bn.js\";\nimport { coinsList } from \"./common/coins.js\";\n\nexport async function getApr(poolName: PoolName): Promise<number> {\n const aprMap = await getAprs([poolName]);\n const apr = aprMap[poolName];\n return apr;\n}\n\nexport async function getAprs(\n poolNames?: PoolName[],\n): Promise<Record<string, number>> {\n const endTime = Date.now();\n const startTime = endTime - 24 * 60 * 60 * 1000; // timestamp for 24 hours ago\n\n const events = await fetchAutoCompoundingEvents({\n startTime: startTime,\n endTime: endTime,\n poolNames: poolNames,\n });\n\n const aprMap = await calculateAprForPools(events);\n\n for (const pool of Object.keys(poolInfo)) {\n const poolName = pool as PoolName;\n if (!(poolName in aprMap)) {\n aprMap[poolName] = 0;\n }\n }\n\n return aprMap;\n}\n\nexport async function getRewardAprs(\n poolNames?: PoolName[],\n): Promise<Record<string, number>> {\n await Promise.all([\n getMultiPool(),\n getMultiCetusPool(),\n getMultiInvestor(),\n getMultiParentPool(),\n getMultiLatestPrices(),\n ]);\n const aprMap: Record<string, number> = {};\n\n if (poolNames) {\n poolNames.forEach(async (pool) => {\n aprMap[pool] = await fetchRewardAPR(pool as PoolName, false);\n });\n } else {\n for (const pool of Object.keys(poolInfo)) {\n aprMap[pool] = await fetchRewardAPR(pool as PoolName, false);\n }\n }\n return aprMap;\n}\n\nexport async function getApy(poolName: PoolName): Promise<number> {\n const apy = convertAprToApy(await getApr(poolName));\n return apy;\n}\n\nexport async function getApys(\n poolNames?: PoolName[],\n): Promise<Record<string, number>> {\n const aprMap = await getAprs(poolNames);\n const rewardAprMap = await getRewardAprs(poolNames);\n // console.log(aprMap);\n // Convert each APR to APY\n const apyMap: Record<string, number> = {};\n for (const poolName in aprMap) {\n if (aprMap.hasOwnProperty(poolName)) {\n apyMap[poolName] = convertAprToApy(\n aprMap[poolName] + rewardAprMap[poolName],\n );\n }\n }\n\n return apyMap;\n}\n\n/**\n * Converts APR to APY with compounding 6 times a day\n * @param apr - The annual percentage rate (APR) as a decimal\n * @returns The annual percentage yield (APY) as a decimal\n */\nfunction convertAprToApy(apr: number): number {\n const n = 6 * 365; // 6 times a day\n const apy = 100 * (Math.pow(1 + apr / 100 / n, n) - 1);\n return apy;\n}\n\nexport async function fetchRewardAPR(\n poolName: PoolName,\n ignoreCache: boolean,\n): Promise<number> {\n let apr = 0;\n if (!(poolName in poolInfo)) {\n return 0;\n }\n try {\n if (poolName === \"ALPHA\") {\n const pool = await getPool(\"ALPHA\", ignoreCache);\n const distributor = await getDistributor(ignoreCache);\n if (pool && distributor) {\n const allocator: Allocator = distributor.content.fields.pool_allocator;\n const tokensInvested = Number(pool.content.fields.tokensInvested);\n const target = Number(distributor.content.fields.target);\n const members: MemberType[] = allocator.fields.members.fields.contents;\n let alphaMember: MemberType | undefined = undefined;\n for (const member of members) {\n if (member.fields.key === getConf().ALPHA_POOL) {\n alphaMember = member;\n }\n }\n if (alphaMember) {\n const weight = Number(\n alphaMember.fields.value.fields.pool_data.fields.contents[0].fields\n .value.fields.weight,\n );\n const totalWeightArr = allocator.fields.total_weights.fields.contents;\n const totalWeight = Number(totalWeightArr[0].fields.value);\n\n if (totalWeight === 0 || tokensInvested === 0) return 0;\n\n apr =\n (((target / 100) * 365 * weight) / totalWeight / tokensInvested) *\n (2_750_000 / 4_250_000) *\n 100;\n }\n }\n } else if (Object.keys(doubleAssetPoolCoinMap).includes(poolName)) {\n const distributor = await getDistributor(ignoreCache);\n let clmmPool;\n if (poolInfo[poolName].parentProtocolName == \"CETUS\") {\n clmmPool = await getCetusPool(poolName, ignoreCache);\n } else {\n clmmPool = await getParentPool(poolName, ignoreCache);\n }\n const pool = await getPool(poolName, ignoreCache);\n let investor;\n if (poolInfo[poolName].parentProtocolName == \"CETUS\") {\n investor = (await getInvestor(poolName, ignoreCache)) as CetusInvestor &\n CommonInvestorFields;\n } else {\n investor = (await getInvestor(\n poolName,\n ignoreCache,\n )) as BluefinInvestor & CommonInvestorFields;\n }\n const tokenA = doubleAssetPoolCoinMap[poolName].coin1;\n const tokenB = doubleAssetPoolCoinMap[poolName].coin2;\n\n if (distributor && clmmPool && investor && pool) {\n const allocator: Allocator = distributor.content.fields.pool_allocator;\n const members: MemberType[] = allocator.fields.members.fields.contents;\n\n let poolMember: MemberType | undefined = undefined;\n\n for (const member of members) {\n if (member.fields.key == poolInfo[poolName].poolId) {\n poolMember = member;\n }\n }\n\n if (poolMember) {\n try {\n const target = Number(distributor.content.fields.target);\n const weight = Number(\n poolMember.fields.value.fields.pool_data.fields.contents[0].fields\n .value.fields.weight,\n );\n const totalWeight = Number(\n allocator.fields.total_weights.fields.contents[0].fields.value,\n );\n\n if (totalWeight === 0) return 0;\n\n const [priceOfCoin0, priceOfCoin1] = await getLatestPrices(\n [\n `${tokenA}/USD` as PythPriceIdPair,\n `${tokenB}/USD` as PythPriceIdPair,\n ],\n ignoreCache,\n );\n const [priceOfAlpha] = await getLatestPrices(\n [\"ALPHA/USD\"],\n ignoreCache,\n );\n if (priceOfCoin0 && priceOfCoin1) {\n const liquidity = Math.floor(\n parseFloat(pool.content.fields.tokensInvested),\n ).toString();\n const current_sqrt_price = new BN(\n clmmPool.content.fields.current_sqrt_price,\n );\n const upperBound = 443636;\n let lowerTick = Number(investor.content.fields.lower_tick);\n let upperTick = Number(investor.content.fields.upper_tick);\n\n if (lowerTick > upperBound) {\n lowerTick = -~(lowerTick - 1);\n }\n if (upperTick > upperBound) {\n upperTick = -~(upperTick - 1);\n }\n const upper_sqrt_price =\n TickMath.tickIndexToSqrtPriceX64(upperTick);\n const lower_sqrt_price =\n TickMath.tickIndexToSqrtPriceX64(lowerTick);\n const { coinA, coinB } = ClmmPoolUtil.getCoinAmountFromLiquidity(\n new BN(liquidity),\n current_sqrt_price,\n lower_sqrt_price,\n upper_sqrt_price,\n false,\n );\n let amount0 = coinA;\n let amount1 = coinB;\n // amount0 = amount0 / 10 ** coins[tokenA as CoinName].expo;\n // amount1 = amount1 / 10 ** coins[tokenB as CoinName].expo;\n amount0 = amount0.div(new BN(10 ** coinsList[tokenA].expo));\n amount1 = amount1.div(new BN(10 ** coinsList[tokenB].expo));\n\n if (priceOfAlpha) {\n const amount0Big = new Decimal(amount0.toString());\n const targetBig = new Decimal(target);\n const weightBig = new Decimal(weight);\n const totalWeightBig = new Decimal(totalWeight);\n const priceOfAlphaBig = new Decimal(priceOfAlpha);\n const priceOfCoin0Big = new Decimal(priceOfCoin0);\n const amount1Big = new Decimal(amount1.toString());\n const priceOfCoin1Big = new Decimal(priceOfCoin1);\n\n if (\n totalWeight === 0 ||\n amount0Big\n .mul(priceOfCoin0Big)\n .add(amount1Big.mul(priceOfCoin1Big))\n .isZero()\n ) {\n return 0;\n }\n // apr =\n // (((((target / (100 * 1_000_000_000)) * 365 * weight) /\n // totalWeight) *\n // parseFloat(priceOfAlpha)) /\n // (amount0 * Number(priceOfCoin0) +\n // amount1 * Number(priceOfCoin1))) *\n // (2_750_000 / 4_250_000) *\n // 100;\n\n apr = targetBig\n .div(new Decimal(100).mul(new Decimal(1000000000)))\n .mul(new Decimal(365))\n .mul(weightBig)\n .div(totalWeightBig)\n .mul(priceOfAlphaBig)\n .div(\n amount0Big\n .mul(priceOfCoin0Big)\n .add(amount1Big.mul(priceOfCoin1Big)),\n )\n .mul(new Decimal(2750000).div(new Decimal(4250000)))\n .mul(new Decimal(100))\n .toNumber();\n }\n }\n } catch (error) {\n console.log(\n `Error calculating Alpha APR for pool ${poolName}`,\n error,\n );\n }\n }\n }\n } else if (Object.keys(singleAssetPoolCoinMap).includes(poolName)) {\n const distributor = await getDistributor(ignoreCache);\n const pool = await getPool(poolName, ignoreCache);\n\n const token = singleAssetPoolCoinMap[poolName];\n\n if (distributor && pool) {\n const allocator: Allocator = distributor.content.fields.pool_allocator;\n const members: MemberType[] = allocator.fields.members.fields.contents;\n\n let poolMember: MemberType | undefined = undefined;\n\n for (const member of members) {\n if (member.fields.key == poolInfo[poolName].poolId) {\n poolMember = member;\n }\n }\n\n if (poolMember) {\n try {\n const target = Number(distributor.content.fields.target);\n const weight = Number(\n poolMember.fields.value.fields.pool_data.fields.contents[0].fields\n .value.fields.weight,\n );\n const totalWeight = Number(\n allocator.fields.total_weights.fields.contents[0].fields.value,\n );\n\n if (totalWeight === 0) return 0;\n\n const [priceOfCoin] = await getLatestPrices(\n [`${token.coin}/USD` as PythPriceIdPair],\n ignoreCache,\n );\n\n const [priceOfAlpha] = await getLatestPrices(\n [\"ALPHA/USD\"],\n ignoreCache,\n );\n if (priceOfCoin) {\n let tokensInvested = new Decimal(\n pool.content.fields.tokensInvested,\n );\n // dividing by 1e9 for every token because navi scales every token's liquidity to 1e9;\n if (\n poolName == \"NAVI-LOOP-SUI-VSUI\" ||\n poolName == \"NAVI-LOOP-USDC-USDT\" ||\n poolName == \"NAVI-LOOP-HASUI-SUI\" ||\n poolName == \"NAVI-LOOP-USDT-USDC\"\n ) {\n const investor = (await getInvestor(\n poolName,\n ignoreCache,\n )) as NaviInvestor & CommonInvestorFields;\n if (investor) {\n const debtToSupplyRatio = new Decimal(\n investor.content.fields.current_debt_to_supply_ratio,\n );\n tokensInvested = tokensInvested\n .mul(\n new Decimal(1).minus(\n debtToSupplyRatio.div(new Decimal(1e20)),\n ),\n )\n .div(new Decimal(1e9));\n } else {\n tokensInvested = new Decimal(0);\n }\n } else {\n tokensInvested = tokensInvested.div(Math.pow(10, 9));\n }\n const liquidity = tokensInvested.toNumber();\n if (priceOfAlpha) {\n if (totalWeight === 0 || liquidity * Number(priceOfCoin) === 0)\n return 0;\n\n apr =\n (((((target / (100 * 1_000_000_000)) * 365 * weight) /\n totalWeight) *\n parseFloat(priceOfAlpha)) /\n (liquidity * Number(priceOfCoin))) *\n (2_750_000 / 4_250_000) *\n 100;\n }\n }\n } catch (e) {\n console.error(\"error in fetchRewardAPR\", e);\n }\n }\n }\n } else {\n console.log(\"fetchRewardAPR not implemented for poolName: \" + poolName);\n }\n } catch (e) {\n console.error(\"error in fetchRewardAPR\", e);\n }\n\n if (!apr) {\n apr = 0;\n }\n return apr;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bluefin.d.ts","sourceRoot":"","sources":["../../../src/transactions/bluefin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUvD,OAAO,EAAE,QAAQ,EAAW,MAAM,oBAAoB,CAAC;AAKvD,eAAO,MAAM,yBAAyB,WAC5B,MAAM,YACJ,QAAQ,aACP,OAAO,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,gBACf,WAAW,GAAG,SAAS,KACnC,OAAO,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"bluefin.d.ts","sourceRoot":"","sources":["../../../src/transactions/bluefin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUvD,OAAO,EAAE,QAAQ,EAAW,MAAM,oBAAoB,CAAC;AAKvD,eAAO,MAAM,yBAAyB,WAC5B,MAAM,YACJ,QAAQ,aACP,OAAO,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,gBACf,WAAW,GAAG,SAAS,KACnC,OAAO,CAAC,WAAW,CA2LrB,CAAC;AAEF,eAAO,MAAM,0BAA0B,WAC7B,MAAM,YACJ,QAAQ,aACP,OAAO,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,gBACf,WAAW,GAAG,SAAS,KACnC,OAAO,CAAC,WAAW,CA6OrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,MAAM,YACJ,QAAQ,aACP,OAAO,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,gBACf,WAAW,GAAG,SAAS,KACnC,OAAO,CAAC,WAAW,CAwWrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,MAAM,YACJ,QAAQ,aACP,OAAO,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,gBACf,WAAW,GAAG,SAAS,KACnC,OAAO,CAAC,WAAW,CAqPrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,MAAM,YACJ,QAAQ,aACP,OAAO,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,gBACf,WAAW,GAAG,SAAS,KACnC,OAAO,CAAC,WAAW,CAwRrB,CAAC;AAEF,eAAO,MAAM,0BAA0B,YAC5B,MAAM,YACL,QAAQ,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,yBAqJ7B,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAC7B,MAAM,YACL,QAAQ,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,yBAsM7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,YACzB,MAAM,YACL,QAAQ,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,yBAuS7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,YACzB,MAAM,YACL,QAAQ,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,yBAkL7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,YACzB,MAAM,YACL,QAAQ,WACT;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,yBAoN7B,CAAC"}
|