impermax-sdk 2.1.310 → 2.1.311
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/lib/index.d.ts +2 -1
- package/lib/offchain/account/offchainAccount.d.ts +27 -3
- package/lib/offchain/account/offchainAccount.js +194 -24
- package/lib/offchain/account/offchainMultichainAccount.d.ts +1 -0
- package/lib/offchain/account/offchainMultichainAccount.js +15 -6
- package/package.json +1 -1
package/lib/index.d.ts
CHANGED
|
@@ -67,4 +67,5 @@ import OnchainNftlp from './onchain/impermaxFactory/lendingPool/nftlp';
|
|
|
67
67
|
import OnchainAccountNftlp from './onchain/account/lendingPool/nftlp';
|
|
68
68
|
import OffchainAccountBorrowableV3 from './offchain/account/lendingPool/offchainAccountBorrowableV3';
|
|
69
69
|
import { PairState } from "./config/whitelist";
|
|
70
|
-
|
|
70
|
+
import { AccountMarketData } from './offchain/account/offchainAccount';
|
|
71
|
+
export { offchain, OffchainMultichain, Offchain, OffchainPoolToken, OffchainLendingPool, OffchainCollateral, OffchainBorrowable, OffchainLendingPoolV2, OffchainCollateralV2, OffchainBorrowableV2, OffchainLendingPoolV3, OffchainCollateralV3, OffchainBorrowableV3, OffchainNftlp, OffchainNftlpUniswapV3, OffchainVault, OffchainLeveragedVault, OffchainLendingVault, OffchainHedgedVault, OffchainConfigManager, OffchainPairConfig, OffchainProposal, OffchainMultichainAccount, OffchainAccount, OffchainAccountPoolToken, OffchainAccountLendingPool, OffchainAccountCollateral, OffchainAccountBorrowable, OffchainAccountLendingPoolV2, OffchainAccountCollateralV2, OffchainAccountBorrowableV2, OffchainAccountLendingPoolV3, OffchainAccountCollateralV3, OffchainAccountBorrowableV3, OffchainAccountNftlp, OffchainAccountNftlpUniswapV3, OffchainLeveragedPosition, OffchainAccountVault, OffchainPriceHelper, OffchainSolidexHelper, PoolTokenData, BorrowableData, CollateralData, BorrowablePastData, TokenData, RewardData, PairData, FarmingPoolData, LendingPoolPastData, LendingPoolData, CollateralPosition, SupplyPosition, BorrowPosition, UserData, TvlData, XimxData, LendingVaultData, VaultPosition, PairConfigData, ProposalData, ProposalMetadata, VaultRisk, VaultType, onchain, Onchain, OnchainImpermaxFactory, OnchainImpermaxFactoryV2, OnchainImpermaxFactoryV3, OnchainPoolToken, OnchainLendingPool, OnchainBorrowable, OnchainCollateral, OnchainLendingPoolV2, OnchainBorrowableV2, OnchainCollateralV2, OnchainLendingPoolV3, OnchainBorrowableV3, OnchainCollateralV3, OnchainNftlp, OnchainNftlpUniswapV3, OnchainLendingVault, OnchainConfigManager, OnchainProposal, OnchainPairConfig, OnchainAccount, OnchainAccountPoolToken, OnchainAccountLendingPool, OnchainAccountBorrowable, OnchainAccountCollateral, OnchainAccountLendingPoolV2, OnchainAccountBorrowableV2, OnchainAccountCollateralV2, OnchainAccountLendingPoolV3, OnchainAccountBorrowableV3, OnchainAccountCollateralV3, OnchainAccountNftlp, OnchainAccountNftlpUniswapV3, OnchainAccountLendingVault, OnchainContractsHelper, OnchainInteractions, OnchainInteractionsPoolToken, OnchainInteractionsLendingPool, OnchainInteractionsCollateral, OnchainInteractionsBorrowable, OnchainInteractionsLendingPoolV2, OnchainInteractionsCollateralV2, OnchainInteractionsBorrowableV2, OnchainInteractionsLendingPoolV3, OnchainInteractionsCollateralV3, OnchainInteractionsBorrowableV3, OnchainInteractionsNftlp, OnchainInteractionsNftlpUniswapV3, OnchainInteractionsLendingVault, OnchainInteractionsConfigManager, Contract, ApprovalType, PermitData, OnchainConfig, Changes, NO_CHANGES, Values, AirdropData, PendingRewardUI, CollateralConfig, BorrowableV2Config, BorrowableV3Config, PairConfig, CLAIM_AGGREGATOR, IMPERMAX_CHEF, IMX, IMPERMAX_FACTORY, getNetworkFactories, getFactoryByAddress, LENDING_VAULT_WATCHER, MERKLE_DISTRIBUTOR_IBEX, MERKLE_DISTRIBUTOR_IBEX_2, MERKLE_DISTRIBUTOR_ETH, ROUTER, SIMPLE_UNISWAP_ORACLE, WETH, MERKLE_URL_ETH, MERKLE_URL_IBEX, MERKLE_URL_IBEX_2, hrAmms, AMM_FACTORY, getAmmByFactory, AMM_SUBGRAPH_URLS, ADD_LIQUIDITY_URLS, AMM_LP_FEE, DEBANK_IDS, ETH_SYMBOL, ETH_NAME, SOLIDEX_FACTORIES, BORROW_FEE_FACTORIES, OLD_KINK_MULTIPLIER_FACTORIES, LIQUIDATION_FEE_FACTORIES, V2_FACTORIES, Farms, hrFarms, FarmIndex, STAKED_LP_FACTORY, getFarmByStakedLPFactory, NOT_SYNCED, DEADLINE, ZERO, APPROVE_AMOUNT, IMPERMAX_SUBGRAPH_URL, IMPERMAX_CHEF_SUBGRAPH_URL, BLOCKS_SUBGRAPH_URL, XIMX_SUBGRAPH_URL, Networks, Factory, Extension, PoolTokenType, Amms, Address, NetworkIndex, FactoryIndex, AddressIndex, NetworkFactoryIndex, LendingPoolIndex, AmmIndex, DistributorDetails, ProposalState, WhitelistState, VaultListOrderBy, VaultListParams, LendingPoolListOrderBy, LendingPoolListParams, SortDirection, LendingPoolVersion, PositionType, AccountPosition, PermitType, Permits, Permit, Borrowable, decimalToBalance, MAX_TICK, MIN_TICK, formatPriceSqrtX96, uniV3TickToPrice, isV3Factory, UniswapV3Position, UniswapV2Position, Position, BorrowableEntity, PairState, SupplyPositionsParams, BorrowPositionsParams, TopPositionsParams, VaultPositionsParams, AccountEarningsParams, AccountMarketData };
|
|
@@ -3,6 +3,22 @@ import { Address, AddressIndex, Factory, FactoryIndex } from "../../config/types
|
|
|
3
3
|
import OffchainAccountLendingPool from "./lendingPool";
|
|
4
4
|
import OffchainAccountVault from "./vault/offchainAccountVault";
|
|
5
5
|
import { VaultPosition, UserData } from "../offchainTypes";
|
|
6
|
+
import { PairState } from '../../config/whitelist';
|
|
7
|
+
import { Networks } from "../../config/types";
|
|
8
|
+
export type AccountEarningsParams = {
|
|
9
|
+
networks?: Array<Networks>;
|
|
10
|
+
pairState?: PairState;
|
|
11
|
+
};
|
|
12
|
+
export interface AccountMarketData {
|
|
13
|
+
borrowing: {
|
|
14
|
+
totalBalanceUSD: number;
|
|
15
|
+
totalAPR: number;
|
|
16
|
+
};
|
|
17
|
+
lending: {
|
|
18
|
+
totalBalanceUSD: number;
|
|
19
|
+
totalAPR: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
6
22
|
export default class OffchainAccount {
|
|
7
23
|
private readonly offchain;
|
|
8
24
|
private readonly accountAddress;
|
|
@@ -22,12 +38,20 @@ export default class OffchainAccount {
|
|
|
22
38
|
getVaultsSuppliedUSD(): Promise<number>;
|
|
23
39
|
getNftlpPositions(): Promise<FactoryIndex<Address[]>>;
|
|
24
40
|
getVaultsEarningsUSD(): Promise<number>;
|
|
25
|
-
getVaultsYearlyYieldUSD(): Promise<number>;
|
|
41
|
+
getVaultsYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
|
|
26
42
|
getVaultsDailyYieldUSD(): Promise<number>;
|
|
27
43
|
getSupplyEarningsUSD(): Promise<number>;
|
|
28
|
-
getSupplyYearlyYieldUSD(): Promise<number>;
|
|
44
|
+
getSupplyYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
|
|
29
45
|
getSupplyDailyYieldUSD(): Promise<number>;
|
|
46
|
+
getV2PositionsYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
|
|
47
|
+
getV3PositionsYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
|
|
48
|
+
getAccountMarketData(factory: Factory, poolAddress: Address): Promise<AccountMarketData>;
|
|
49
|
+
getMarketDailyProfitUSD(factory: Factory, poolAddress: Address): Promise<number>;
|
|
30
50
|
getTotalEarningsUSD(): Promise<number>;
|
|
31
|
-
getTotalYearlyYieldUSD(): Promise<number>;
|
|
51
|
+
getTotalYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
|
|
32
52
|
getTotalDailyYieldUSD(): Promise<number>;
|
|
53
|
+
/**
|
|
54
|
+
* 1. Filter by whitelisted/deprecated/blacklisted pairs
|
|
55
|
+
*/
|
|
56
|
+
filterPairState(offchainAccountLendingPools: Array<OffchainAccountLendingPool>, pairState: PairState): OffchainAccountLendingPool[];
|
|
33
57
|
}
|
|
@@ -5,8 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const offchainAccountVault_1 = __importDefault(require("./vault/offchainAccountVault"));
|
|
7
7
|
const offchainTypes_1 = require("../offchainTypes");
|
|
8
|
-
|
|
9
|
-
// TODO: Vault earnings the same, move vault whitelist to sdk
|
|
8
|
+
const offchainLendingPool_1 = require("../lendingPool/offchainLendingPool");
|
|
10
9
|
class OffchainAccount {
|
|
11
10
|
constructor(offchain, account) {
|
|
12
11
|
this.getOffchain = () => this.offchain;
|
|
@@ -118,7 +117,7 @@ class OffchainAccount {
|
|
|
118
117
|
}
|
|
119
118
|
return earningsUSD;
|
|
120
119
|
}
|
|
121
|
-
async getVaultsYearlyYieldUSD() {
|
|
120
|
+
async getVaultsYearlyYieldUSD(params = {}) {
|
|
122
121
|
let yieldUSD = 0;
|
|
123
122
|
const vaultsUserData = await this.getVaultsUserData();
|
|
124
123
|
if (!vaultsUserData)
|
|
@@ -165,30 +164,32 @@ class OffchainAccount {
|
|
|
165
164
|
}
|
|
166
165
|
return earningsUSD;
|
|
167
166
|
}
|
|
168
|
-
async getSupplyYearlyYieldUSD() {
|
|
167
|
+
async getSupplyYearlyYieldUSD(params = {}) {
|
|
169
168
|
let yieldUSD = 0;
|
|
170
169
|
const positionsUserData = await this.getSupplyPositions();
|
|
171
170
|
if (!positionsUserData)
|
|
172
171
|
return 0;
|
|
172
|
+
const lendingPools = [];
|
|
173
173
|
// Get positions by factory
|
|
174
174
|
for (const factory in positionsUserData) {
|
|
175
175
|
const poolsOfFactory = positionsUserData[factory];
|
|
176
176
|
// Get pools of this factory
|
|
177
177
|
for (const poolAddress of poolsOfFactory) {
|
|
178
178
|
const pool = await this.getLendingPool(factory, poolAddress);
|
|
179
|
-
|
|
180
|
-
if (pool.getLendingPool().isBlacklisted())
|
|
181
|
-
continue;
|
|
182
|
-
// Get yearly yield = value * APR
|
|
183
|
-
const [valueA, valueB, aprA, aprB] = await Promise.all([
|
|
184
|
-
pool.getBorrowableA().getValue(),
|
|
185
|
-
pool.getBorrowableB().getValue(),
|
|
186
|
-
pool.getBorrowableA().getPoolToken().getSupplyAPR(),
|
|
187
|
-
pool.getBorrowableB().getPoolToken().getSupplyAPR()
|
|
188
|
-
]);
|
|
189
|
-
yieldUSD += valueA * aprA + valueB * aprB;
|
|
179
|
+
lendingPools.push(pool);
|
|
190
180
|
}
|
|
191
181
|
}
|
|
182
|
+
const filteredPools = this.filterPairState(lendingPools, params.pairState ?? { whitelisted: true, deprecated: true });
|
|
183
|
+
for (const pool of filteredPools) {
|
|
184
|
+
// Get yearly yield = value * APR
|
|
185
|
+
const [valueA, valueB, aprA, aprB] = await Promise.all([
|
|
186
|
+
pool.getBorrowableA().getValue(),
|
|
187
|
+
pool.getBorrowableB().getValue(),
|
|
188
|
+
pool.getBorrowableA().getPoolToken().getSupplyAPR(),
|
|
189
|
+
pool.getBorrowableB().getPoolToken().getSupplyAPR()
|
|
190
|
+
]);
|
|
191
|
+
yieldUSD += valueA * aprA + valueB * aprB;
|
|
192
|
+
}
|
|
192
193
|
return yieldUSD;
|
|
193
194
|
}
|
|
194
195
|
async getSupplyDailyYieldUSD() {
|
|
@@ -196,10 +197,162 @@ class OffchainAccount {
|
|
|
196
197
|
const yearlyYield = await this.getSupplyYearlyYieldUSD();
|
|
197
198
|
return yearlyYield / 365;
|
|
198
199
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
async getV2PositionsYearlyYieldUSD(params = {}) {
|
|
201
|
+
let yieldUSD = 0;
|
|
202
|
+
const positionsUserData = await this.getBorrowPositions();
|
|
203
|
+
if (!positionsUserData)
|
|
204
|
+
return 0;
|
|
205
|
+
const lendingPools = [];
|
|
206
|
+
// Get positions by factory
|
|
207
|
+
for (const factory in positionsUserData) {
|
|
208
|
+
const poolsOfFactory = positionsUserData[factory];
|
|
209
|
+
// Get pools of this factory
|
|
210
|
+
for (const poolAddress of poolsOfFactory) {
|
|
211
|
+
const pool = await this.getLendingPool(factory, poolAddress);
|
|
212
|
+
lendingPools.push(pool);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const filteredPools = this.filterPairState(lendingPools, params.pairState ?? { whitelisted: true, deprecated: true });
|
|
216
|
+
for (const pool of filteredPools) {
|
|
217
|
+
const [position, priceX, priceY] = await Promise.all([
|
|
218
|
+
pool.getCollateral().getPositionObject(),
|
|
219
|
+
pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
|
|
220
|
+
pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
|
|
221
|
+
]);
|
|
222
|
+
const poolYieldUSD = position.getLeveragedApr() * (position.getNetX() * priceX + position.getNetY() * priceY);
|
|
223
|
+
// NaN issue
|
|
224
|
+
yieldUSD += (poolYieldUSD || 0);
|
|
225
|
+
}
|
|
226
|
+
return yieldUSD;
|
|
227
|
+
}
|
|
228
|
+
async getV3PositionsYearlyYieldUSD(params = {}) {
|
|
229
|
+
let yieldUSD = 0;
|
|
230
|
+
const positionsUserData = await this.getNftlpPositions();
|
|
231
|
+
if (!positionsUserData)
|
|
232
|
+
return 0;
|
|
233
|
+
const lendingPools = [];
|
|
234
|
+
// Get positions by factory
|
|
235
|
+
for (const factory in positionsUserData) {
|
|
236
|
+
const poolsOfFactory = positionsUserData[factory];
|
|
237
|
+
// Get pools of this factory
|
|
238
|
+
for (const poolAddress of poolsOfFactory) {
|
|
239
|
+
const pool = await this.getLendingPool(factory, poolAddress);
|
|
240
|
+
lendingPools.push(pool);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
const filteredPools = this.filterPairState(lendingPools, params.pairState ?? { whitelisted: true, deprecated: true });
|
|
244
|
+
for (const pool of filteredPools) {
|
|
245
|
+
const nftlp = pool.getCollateral().getNftlp();
|
|
246
|
+
const [priceX, priceY, tokenIds] = await Promise.all([
|
|
247
|
+
pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
|
|
248
|
+
pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
|
|
249
|
+
nftlp.getTokenPositions()
|
|
250
|
+
]);
|
|
251
|
+
const nftlpPromises = Object.values(tokenIds).map(async (i) => {
|
|
252
|
+
const position = await nftlp.getPositionObject(Number(i.tokenId));
|
|
253
|
+
const poolYieldUSD = position.getLeveragedApr() * (position.getNetX() * priceX + position.getNetY() * priceY);
|
|
254
|
+
return yieldUSD += (poolYieldUSD || 0);
|
|
255
|
+
});
|
|
256
|
+
await Promise.all([...nftlpPromises]);
|
|
257
|
+
}
|
|
258
|
+
return yieldUSD;
|
|
259
|
+
}
|
|
260
|
+
async getAccountMarketData(factory, poolAddress) {
|
|
261
|
+
// Get market
|
|
262
|
+
const pool = await this.getLendingPool(factory, poolAddress);
|
|
263
|
+
// 1. Lending
|
|
264
|
+
const [valueA, valueB, aprA, aprB] = await Promise.all([
|
|
265
|
+
pool.getBorrowableA().getValue(),
|
|
266
|
+
pool.getBorrowableB().getValue(),
|
|
267
|
+
pool.getBorrowableA().getPoolToken().getSupplyAPR(),
|
|
268
|
+
pool.getBorrowableB().getPoolToken().getSupplyAPR()
|
|
269
|
+
]);
|
|
270
|
+
const lending = {
|
|
271
|
+
totalBalanceUSD: valueA + valueB,
|
|
272
|
+
totalAPR: (valueA * aprA + valueB * aprB) / (valueA + valueB)
|
|
273
|
+
};
|
|
274
|
+
let collateralBalanceUSD = 0;
|
|
275
|
+
let collateralAPR = 0;
|
|
276
|
+
// 2. Borrowing
|
|
277
|
+
if (pool.getLendingPool().getLendingPoolVersion() === offchainLendingPool_1.LendingPoolVersion.V3) {
|
|
278
|
+
const nftlp = pool.getCollateral().getNftlp();
|
|
279
|
+
// Weighted APR of all nftlp positions
|
|
280
|
+
let totalWeightedAPR = 0;
|
|
281
|
+
const [priceX, priceY, tokenIds] = await Promise.all([
|
|
282
|
+
pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
|
|
283
|
+
pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
|
|
284
|
+
nftlp.getTokenPositions(),
|
|
285
|
+
]);
|
|
286
|
+
await Promise.all([...Object.values(tokenIds).map(async (i) => {
|
|
287
|
+
const position = await nftlp.getPositionObject(Number(i.tokenId));
|
|
288
|
+
const positionValueUSD = position.getNetX() * priceX + position.getNetY() * priceY;
|
|
289
|
+
collateralBalanceUSD += positionValueUSD;
|
|
290
|
+
totalWeightedAPR += positionValueUSD * position.getLeveragedApr();
|
|
291
|
+
return;
|
|
292
|
+
})]);
|
|
293
|
+
collateralAPR = collateralBalanceUSD > 0 ? totalWeightedAPR / collateralBalanceUSD : 0;
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
// For V2 just get position and add yto collateralYields
|
|
297
|
+
const collateral = pool.getCollateral();
|
|
298
|
+
;
|
|
299
|
+
const [position, priceX, priceY] = await Promise.all([
|
|
300
|
+
collateral.getPositionObject(),
|
|
301
|
+
pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
|
|
302
|
+
pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
|
|
303
|
+
]);
|
|
304
|
+
collateralBalanceUSD += (position.getNetX() * priceX + position.getNetY() * priceY);
|
|
305
|
+
collateralAPR = position.getLeveragedApr();
|
|
306
|
+
}
|
|
307
|
+
const borrowing = {
|
|
308
|
+
totalBalanceUSD: collateralBalanceUSD,
|
|
309
|
+
totalAPR: collateralAPR
|
|
310
|
+
};
|
|
311
|
+
return { borrowing, lending };
|
|
312
|
+
}
|
|
313
|
+
async getMarketDailyProfitUSD(factory, poolAddress) {
|
|
314
|
+
// Get market
|
|
315
|
+
const pool = await this.getLendingPool(factory, poolAddress);
|
|
316
|
+
// Escape if blacklisted pool
|
|
317
|
+
if (!pool.getLendingPool().isBlacklisted())
|
|
318
|
+
return 0;
|
|
319
|
+
// 1. Market Supply Yearly Yields
|
|
320
|
+
const [valueA, valueB, aprA, aprB] = await Promise.all([
|
|
321
|
+
pool.getBorrowableA().getValue(),
|
|
322
|
+
pool.getBorrowableB().getValue(),
|
|
323
|
+
pool.getBorrowableA().getPoolToken().getSupplyAPR(),
|
|
324
|
+
pool.getBorrowableB().getPoolToken().getSupplyAPR()
|
|
325
|
+
]);
|
|
326
|
+
const yearlyMarketSupplyYields = valueA * aprA + valueB * aprB;
|
|
327
|
+
// 2. Collateral yearly yields
|
|
328
|
+
let yearlyMarketCollateralYields = 0;
|
|
329
|
+
// For V3, loop through all token Ids and add to collateralYields
|
|
330
|
+
if (pool.getLendingPool().getLendingPoolVersion() === offchainLendingPool_1.LendingPoolVersion.V3) {
|
|
331
|
+
const nftlp = pool.getCollateral().getNftlp();
|
|
332
|
+
const [priceX, priceY, tokenIds] = await Promise.all([
|
|
333
|
+
pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
|
|
334
|
+
pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
|
|
335
|
+
nftlp.getTokenPositions(),
|
|
336
|
+
]);
|
|
337
|
+
await Promise.all([...Object.values(tokenIds).map(async (i) => {
|
|
338
|
+
const position = await nftlp.getPositionObject(Number(i.tokenId));
|
|
339
|
+
return yearlyMarketCollateralYields += position.getLeveragedApr() * (position.getNetX() * priceX + position.getNetY() * priceY);
|
|
340
|
+
})]);
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
// For V2 just get position and add yto collateralYields
|
|
344
|
+
const collateral = pool.getCollateral();
|
|
345
|
+
;
|
|
346
|
+
const [position, priceX, priceY] = await Promise.all([
|
|
347
|
+
collateral.getPositionObject(),
|
|
348
|
+
pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
|
|
349
|
+
pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
|
|
350
|
+
]);
|
|
351
|
+
yearlyMarketCollateralYields += position.getLeveragedApr() * (position.getNetX() * priceX + position.getNetY() * priceY);
|
|
352
|
+
}
|
|
353
|
+
return (yearlyMarketCollateralYields + yearlyMarketSupplyYields) / 365;
|
|
354
|
+
}
|
|
355
|
+
// TODO: Collateral earnings? Not using this atm i think for anything other than vaults?
|
|
203
356
|
async getTotalEarningsUSD() {
|
|
204
357
|
const [supplyEarnings, vaultEarnings] = await Promise.all([
|
|
205
358
|
this.getSupplyEarningsUSD(),
|
|
@@ -207,16 +360,33 @@ class OffchainAccount {
|
|
|
207
360
|
]);
|
|
208
361
|
return supplyEarnings + vaultEarnings;
|
|
209
362
|
}
|
|
210
|
-
async getTotalYearlyYieldUSD() {
|
|
211
|
-
const [supplyYield, vaultYield] = await Promise.all([
|
|
212
|
-
this.getSupplyYearlyYieldUSD(),
|
|
213
|
-
this.getVaultsYearlyYieldUSD()
|
|
363
|
+
async getTotalYearlyYieldUSD(params = {}) {
|
|
364
|
+
const [supplyYield, vaultYield, v2PositionYields, v3PositionYields] = await Promise.all([
|
|
365
|
+
this.getSupplyYearlyYieldUSD(params),
|
|
366
|
+
this.getVaultsYearlyYieldUSD(params),
|
|
367
|
+
this.getV2PositionsYearlyYieldUSD(params),
|
|
368
|
+
this.getV3PositionsYearlyYieldUSD(params),
|
|
214
369
|
]);
|
|
215
|
-
return supplyYield + vaultYield;
|
|
370
|
+
return supplyYield + vaultYield + v2PositionYields + v3PositionYields;
|
|
216
371
|
}
|
|
217
372
|
async getTotalDailyYieldUSD() {
|
|
218
373
|
const yearlyYield = await this.getTotalYearlyYieldUSD();
|
|
219
374
|
return yearlyYield / 365;
|
|
220
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* 1. Filter by whitelisted/deprecated/blacklisted pairs
|
|
378
|
+
*/
|
|
379
|
+
filterPairState(offchainAccountLendingPools, pairState) {
|
|
380
|
+
if (!pairState.whitelisted && !pairState.blacklisted && !pairState.deprecated)
|
|
381
|
+
return offchainAccountLendingPools;
|
|
382
|
+
const pools = [];
|
|
383
|
+
if (pairState.whitelisted)
|
|
384
|
+
pools.push(...offchainAccountLendingPools.filter(i => i.getLendingPool().isWhitelisted()));
|
|
385
|
+
if (pairState.blacklisted)
|
|
386
|
+
pools.push(...offchainAccountLendingPools.filter(i => i.getLendingPool().isBlacklisted()));
|
|
387
|
+
if (pairState.deprecated)
|
|
388
|
+
pools.push(...offchainAccountLendingPools.filter(i => i.getLendingPool().isDeprecated()));
|
|
389
|
+
return pools;
|
|
390
|
+
}
|
|
221
391
|
}
|
|
222
392
|
exports.default = OffchainAccount;
|
|
@@ -85,6 +85,7 @@ export default class OffchainMultichainAccount {
|
|
|
85
85
|
getCollateralV2BalanceUSD(): Promise<number>;
|
|
86
86
|
getNetAPR(): Promise<number>;
|
|
87
87
|
getVaultsEarningsUSD(params?: AccountEarningsParams): Promise<number>;
|
|
88
|
+
getCollateralV2EarningsUSD(params?: AccountEarningsParams): Promise<number>;
|
|
88
89
|
getSupplyEarningsUSD(params?: AccountEarningsParams): Promise<number>;
|
|
89
90
|
getTotalEarningsUSD(params?: AccountEarningsParams): Promise<number>;
|
|
90
91
|
getTotalYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
|
|
@@ -178,7 +178,7 @@ class OffchainMultichainAccount {
|
|
|
178
178
|
pool.getLendingPool().getLendingPoolData(),
|
|
179
179
|
pool.getLendingPool().getFactory(),
|
|
180
180
|
]);
|
|
181
|
-
const totalValue = position.getNetX() * priceX + position.getNetY() * priceY;
|
|
181
|
+
const totalValue = (position.getNetX() * priceX + position.getNetY() * priceY) || 0;
|
|
182
182
|
return {
|
|
183
183
|
name: `${symbolA}/${symbolB}`,
|
|
184
184
|
value: totalValue,
|
|
@@ -190,7 +190,7 @@ class OffchainMultichainAccount {
|
|
|
190
190
|
}));
|
|
191
191
|
const v3PositionValues = await Promise.all(v3Positions.map(async (pool) => {
|
|
192
192
|
const nftlp = pool.getCollateral().getNftlp();
|
|
193
|
-
const [priceX, priceY, symbolA, symbolB, network, data, factory] = await Promise.all([
|
|
193
|
+
const [priceX, priceY, symbolA, symbolB, network, data, factory, tokenIds] = await Promise.all([
|
|
194
194
|
pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
|
|
195
195
|
pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
|
|
196
196
|
pool.getBorrowableA().getPoolToken().getSymbol(),
|
|
@@ -198,14 +198,14 @@ class OffchainMultichainAccount {
|
|
|
198
198
|
pool.getLendingPool().getOffchain().network,
|
|
199
199
|
pool.getLendingPool().getLendingPoolData(),
|
|
200
200
|
pool.getLendingPool().getFactory(),
|
|
201
|
+
nftlp.getTokenPositions()
|
|
201
202
|
]);
|
|
202
|
-
const tokenIds = await nftlp.getTokenPositions();
|
|
203
203
|
const nftlpPromises = Object.values(tokenIds).map(async (i) => {
|
|
204
204
|
const position = await nftlp.getPositionObject(Number(i.tokenId));
|
|
205
205
|
return position.getNetX() * priceX + position.getNetY() * priceY;
|
|
206
206
|
});
|
|
207
207
|
const nftlpValues = await Promise.all([...nftlpPromises]);
|
|
208
|
-
const totalValue = nftlpValues.reduce((acc, val) => acc + val, 0);
|
|
208
|
+
const totalValue = nftlpValues.reduce((acc, val) => acc + val, 0) || 0;
|
|
209
209
|
return {
|
|
210
210
|
name: `${symbolA}/${symbolB}`,
|
|
211
211
|
value: totalValue,
|
|
@@ -226,7 +226,7 @@ class OffchainMultichainAccount {
|
|
|
226
226
|
pool.getLendingPool().getLendingPoolData(),
|
|
227
227
|
pool.getLendingPool().getFactory(),
|
|
228
228
|
]);
|
|
229
|
-
const totalValue = valueA + valueB;
|
|
229
|
+
const totalValue = (valueA + valueB) || 0;
|
|
230
230
|
return {
|
|
231
231
|
name: `${symbolA}/${symbolB}`,
|
|
232
232
|
value: totalValue,
|
|
@@ -341,6 +341,15 @@ class OffchainMultichainAccount {
|
|
|
341
341
|
const results = await Promise.all(networkPromises);
|
|
342
342
|
return results.reduce((acc, val) => acc + val, 0);
|
|
343
343
|
}
|
|
344
|
+
async getCollateralV2EarningsUSD(params = {}) {
|
|
345
|
+
const allNetworks = params.networks ?? Object.values(types_1.Networks);
|
|
346
|
+
const networkPromises = allNetworks.map(async (network) => {
|
|
347
|
+
const offchainAccount = this.getOffchainAccount(network);
|
|
348
|
+
return offchainAccount.getSupplyEarningsUSD();
|
|
349
|
+
});
|
|
350
|
+
const results = await Promise.all(networkPromises);
|
|
351
|
+
return results.reduce((acc, val) => acc + val, 0);
|
|
352
|
+
}
|
|
344
353
|
async getSupplyEarningsUSD(params = {}) {
|
|
345
354
|
const allNetworks = params.networks ?? Object.values(types_1.Networks);
|
|
346
355
|
const networkPromises = allNetworks.map(async (network) => {
|
|
@@ -363,7 +372,7 @@ class OffchainMultichainAccount {
|
|
|
363
372
|
const allNetworks = params.networks ?? Object.values(types_1.Networks);
|
|
364
373
|
const networkPromises = allNetworks.map(async (network) => {
|
|
365
374
|
const offchainAccount = this.getOffchainAccount(network);
|
|
366
|
-
return offchainAccount.getTotalYearlyYieldUSD();
|
|
375
|
+
return offchainAccount.getTotalYearlyYieldUSD(params);
|
|
367
376
|
});
|
|
368
377
|
const results = await Promise.all(networkPromises);
|
|
369
378
|
return results.reduce((acc, val) => acc + val, 0);
|