@defisaver/positions-sdk 2.1.169-custom-fetching-dev → 2.1.169-custom-fetching-3-dev
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/cjs/aaveV2/index.d.ts +4 -4
- package/cjs/aaveV2/index.js +7 -7
- package/cjs/aaveV3/index.d.ts +4 -3
- package/cjs/aaveV3/index.js +14 -10
- package/cjs/aaveV3/merkl.d.ts +5 -1
- package/cjs/aaveV3/merkl.js +8 -3
- package/cjs/aaveV4/index.d.ts +4 -3
- package/cjs/aaveV4/index.js +19 -16
- package/cjs/aaveV4/merkl.d.ts +10 -2
- package/cjs/aaveV4/merkl.js +15 -6
- package/cjs/claiming/aaveV3.d.ts +2 -2
- package/cjs/claiming/aaveV3.js +5 -4
- package/cjs/claiming/king.d.ts +2 -2
- package/cjs/claiming/king.js +3 -2
- package/cjs/claiming/spark.d.ts +3 -3
- package/cjs/claiming/spark.js +8 -7
- package/cjs/claiming/uniswap.d.ts +2 -2
- package/cjs/claiming/uniswap.js +3 -2
- package/cjs/compoundV2/index.d.ts +4 -4
- package/cjs/compoundV2/index.js +9 -9
- package/cjs/compoundV3/index.d.ts +5 -4
- package/cjs/compoundV3/index.js +17 -13
- package/cjs/compoundV3/merkl.d.ts +1 -1
- package/cjs/compoundV3/merkl.js +2 -5
- package/cjs/curveUsd/index.d.ts +5 -5
- package/cjs/curveUsd/index.js +17 -17
- package/cjs/fluid/index.d.ts +23 -22
- package/cjs/fluid/index.js +75 -72
- package/cjs/fluid/merkl.d.ts +5 -3
- package/cjs/fluid/merkl.js +11 -6
- package/cjs/liquity/index.d.ts +4 -4
- package/cjs/liquity/index.js +23 -23
- package/cjs/liquityV2/index.d.ts +10 -10
- package/cjs/liquityV2/index.js +59 -59
- package/cjs/llamaLend/index.d.ts +5 -5
- package/cjs/llamaLend/index.js +13 -13
- package/cjs/maker/index.d.ts +6 -6
- package/cjs/maker/index.js +16 -16
- package/cjs/morphoBlue/index.d.ts +7 -7
- package/cjs/morphoBlue/index.js +28 -26
- package/cjs/morphoBlue/merkl.d.ts +5 -3
- package/cjs/morphoBlue/merkl.js +6 -8
- package/cjs/morphoMidnight/index.d.ts +5 -5
- package/cjs/morphoMidnight/index.js +18 -18
- package/cjs/portfolio/customDeFiData.js +45 -40
- package/cjs/services/merkl.d.ts +36 -2
- package/cjs/services/merkl.js +142 -19
- package/cjs/services/priceService.d.ts +12 -12
- package/cjs/services/priceService.js +30 -29
- package/cjs/services/viem.d.ts +10 -2
- package/cjs/services/viem.js +27 -1
- package/cjs/spark/index.d.ts +4 -4
- package/cjs/spark/index.js +9 -9
- package/cjs/types/merkl.d.ts +18 -0
- package/cjs/types/portfolio.d.ts +2 -0
- package/cjs/umbrella/index.d.ts +2 -2
- package/cjs/umbrella/index.js +5 -4
- package/esm/aaveV2/index.d.ts +4 -4
- package/esm/aaveV2/index.js +8 -8
- package/esm/aaveV3/index.d.ts +4 -3
- package/esm/aaveV3/index.js +15 -11
- package/esm/aaveV3/merkl.d.ts +5 -1
- package/esm/aaveV3/merkl.js +9 -4
- package/esm/aaveV4/index.d.ts +4 -3
- package/esm/aaveV4/index.js +20 -17
- package/esm/aaveV4/merkl.d.ts +10 -2
- package/esm/aaveV4/merkl.js +16 -7
- package/esm/claiming/aaveV3.d.ts +2 -2
- package/esm/claiming/aaveV3.js +5 -4
- package/esm/claiming/king.d.ts +2 -2
- package/esm/claiming/king.js +3 -2
- package/esm/claiming/spark.d.ts +3 -3
- package/esm/claiming/spark.js +8 -7
- package/esm/claiming/uniswap.d.ts +2 -2
- package/esm/claiming/uniswap.js +3 -2
- package/esm/compoundV2/index.d.ts +4 -4
- package/esm/compoundV2/index.js +9 -9
- package/esm/compoundV3/index.d.ts +5 -4
- package/esm/compoundV3/index.js +19 -15
- package/esm/compoundV3/merkl.d.ts +1 -1
- package/esm/compoundV3/merkl.js +3 -6
- package/esm/curveUsd/index.d.ts +5 -5
- package/esm/curveUsd/index.js +17 -17
- package/esm/fluid/index.d.ts +23 -22
- package/esm/fluid/index.js +76 -73
- package/esm/fluid/merkl.d.ts +5 -3
- package/esm/fluid/merkl.js +12 -7
- package/esm/liquity/index.d.ts +4 -4
- package/esm/liquity/index.js +23 -23
- package/esm/liquityV2/index.d.ts +10 -10
- package/esm/liquityV2/index.js +60 -60
- package/esm/llamaLend/index.d.ts +5 -5
- package/esm/llamaLend/index.js +13 -13
- package/esm/maker/index.d.ts +6 -6
- package/esm/maker/index.js +16 -16
- package/esm/morphoBlue/index.d.ts +7 -7
- package/esm/morphoBlue/index.js +29 -27
- package/esm/morphoBlue/merkl.d.ts +5 -3
- package/esm/morphoBlue/merkl.js +7 -9
- package/esm/morphoMidnight/index.d.ts +5 -5
- package/esm/morphoMidnight/index.js +18 -18
- package/esm/portfolio/customDeFiData.js +47 -42
- package/esm/services/merkl.d.ts +36 -2
- package/esm/services/merkl.js +136 -18
- package/esm/services/priceService.d.ts +12 -12
- package/esm/services/priceService.js +31 -30
- package/esm/services/viem.d.ts +10 -2
- package/esm/services/viem.js +25 -0
- package/esm/spark/index.d.ts +4 -4
- package/esm/spark/index.js +10 -10
- package/esm/types/merkl.d.ts +18 -0
- package/esm/types/portfolio.d.ts +2 -0
- package/esm/umbrella/index.d.ts +2 -2
- package/esm/umbrella/index.js +5 -4
- package/package.json +1 -1
- package/src/aaveV2/index.ts +7 -7
- package/src/aaveV3/index.ts +15 -11
- package/src/aaveV3/merkl.ts +9 -4
- package/src/aaveV4/index.ts +19 -16
- package/src/aaveV4/merkl.ts +16 -7
- package/src/claiming/aaveV3.ts +5 -3
- package/src/claiming/king.ts +6 -3
- package/src/claiming/spark.ts +9 -6
- package/src/claiming/uniswap.ts +4 -3
- package/src/compoundV2/index.ts +10 -9
- package/src/compoundV3/index.ts +20 -14
- package/src/compoundV3/merkl.ts +5 -4
- package/src/curveUsd/index.ts +19 -17
- package/src/fluid/index.ts +88 -70
- package/src/fluid/merkl.ts +12 -7
- package/src/liquity/index.ts +23 -23
- package/src/liquityV2/index.ts +64 -56
- package/src/llamaLend/index.ts +15 -13
- package/src/maker/index.ts +19 -16
- package/src/morphoBlue/index.ts +23 -20
- package/src/morphoBlue/merkl.ts +9 -6
- package/src/morphoMidnight/index.ts +13 -13
- package/src/portfolio/customDeFiData.ts +48 -41
- package/src/services/merkl.ts +152 -19
- package/src/services/priceService.ts +33 -30
- package/src/services/viem.ts +16 -0
- package/src/spark/index.ts +11 -8
- package/src/types/merkl.ts +20 -0
- package/src/types/portfolio.ts +2 -0
- package/src/umbrella/index.ts +6 -5
package/esm/fluid/index.js
CHANGED
|
@@ -19,7 +19,7 @@ import { getFluidMarketInfoById, getFluidVersionsDataForNetwork, getFTokenAddres
|
|
|
19
19
|
import { USD_QUOTE, ZERO_ADDRESS } from '../constants';
|
|
20
20
|
import { getChainlinkAssetAddress, getSyrupUSDTChainLinkPriceCalls, getSyrupUSDTPrice, getWeETHChainLinkPriceCalls, getWeETHPrice, getWsrETHChainLinkPriceCalls, getWsrETHPrice, getWstETHChainLinkPriceCalls, getWstETHPrice, getWstETHPriceFluid, getWstUSRChainLinkPriceCalls, getWstUSRPrice, parseSyrupUSDTPriceCalls, parseWeETHPriceCalls, parseWrsETHPriceCalls, parseWstETHPriceCalls, parseWstUSRPriceCalls, } from '../services/priceService';
|
|
21
21
|
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
22
|
-
import { getViemProvider } from '../services/viem';
|
|
22
|
+
import { getBlockTimestamp, getViemProvider, setViemBlockNumber } from '../services/viem';
|
|
23
23
|
import { attachFluidMerklIncentives, getFluidMerklCampaigns } from './merkl';
|
|
24
24
|
export { FluidMerklOpportunityType, buildFluidMerklRewardMap, getFluidMerklCampaigns, attachFluidMerklIncentives, } from './merkl';
|
|
25
25
|
export const EMPTY_USED_ASSET = {
|
|
@@ -41,7 +41,7 @@ const parseVaultType = (vaultType) => {
|
|
|
41
41
|
default: return FluidVaultType.Unknown;
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
|
-
const getChainLinkPricesForTokens = (
|
|
44
|
+
const getChainLinkPricesForTokens = (tokens_1, network_1, client_1, ...args_1) => __awaiter(void 0, [tokens_1, network_1, client_1, ...args_1], void 0, function* (tokens, network, client, blockNumber = 'latest') {
|
|
45
45
|
const isMainnet = isMainnetNetwork(network);
|
|
46
46
|
const noDuplicateTokens = new Array(...new Set(tokens));
|
|
47
47
|
const btcFeedContract = BTCPriceFeedContractViem(client, network);
|
|
@@ -96,7 +96,7 @@ const getChainLinkPricesForTokens = (tokens, network, client) => __awaiter(void
|
|
|
96
96
|
});
|
|
97
97
|
const calls = [...staticCalls, ..._calls].filter((call) => call);
|
|
98
98
|
// @ts-ignore
|
|
99
|
-
const results = yield client.multicall({ contracts: calls });
|
|
99
|
+
const results = yield client.multicall(Object.assign({ contracts: calls }, setViemBlockNumber(blockNumber)));
|
|
100
100
|
const ethPriceChainlink = new Dec(results[0].result).div(1e8).toString();
|
|
101
101
|
const btcPriceChainlink = new Dec(results[1].result).div(1e8).toString();
|
|
102
102
|
let offset = 2; // wstETH and weETH has 3 calls, while others have only 1, so we need to keep track. First 2 are static calls for eth and btc prices
|
|
@@ -205,7 +205,7 @@ const getChainLinkPricesForTokens = (tokens, network, client) => __awaiter(void
|
|
|
205
205
|
return acc;
|
|
206
206
|
}, {});
|
|
207
207
|
});
|
|
208
|
-
const getTokenPriceFromChainlink = (
|
|
208
|
+
const getTokenPriceFromChainlink = (asset_1, network_1, provider_1, ...args_1) => __awaiter(void 0, [asset_1, network_1, provider_1, ...args_1], void 0, function* (asset, network, provider, blockNumber = 'latest') {
|
|
209
209
|
if (asset.symbol === 'sUSDS') {
|
|
210
210
|
return new Dec('105276929').div(1e8).toString();
|
|
211
211
|
}
|
|
@@ -215,17 +215,17 @@ const getTokenPriceFromChainlink = (asset, network, provider) => __awaiter(void
|
|
|
215
215
|
let loanTokenPrice;
|
|
216
216
|
if (asset.symbol === 'wstETH') {
|
|
217
217
|
// need to handle wstETH for l2s inside getWstETHPrice
|
|
218
|
-
loanTokenPrice = yield getWstETHPriceFluid(provider, network);
|
|
218
|
+
loanTokenPrice = yield getWstETHPriceFluid(provider, network, blockNumber);
|
|
219
219
|
}
|
|
220
220
|
else if (isMainnet) {
|
|
221
221
|
const feedRegistryContract = FeedRegistryContractViem(provider, NetworkNumber.Eth);
|
|
222
|
-
loanTokenPrice = isTokenUSDA ? '100000000' : yield feedRegistryContract.read.latestAnswer([loanTokenFeedAddress, USD_QUOTE]);
|
|
222
|
+
loanTokenPrice = isTokenUSDA ? '100000000' : yield feedRegistryContract.read.latestAnswer([loanTokenFeedAddress, USD_QUOTE], setViemBlockNumber(blockNumber));
|
|
223
223
|
}
|
|
224
224
|
else {
|
|
225
225
|
// Currently only base network is supported
|
|
226
226
|
const feedRegistryContract = DFSFeedRegistryContractViem(provider, network);
|
|
227
227
|
try {
|
|
228
|
-
const roundPriceData = isTokenUSDA ? [0, '100000000'] : yield feedRegistryContract.read.latestRoundData([loanTokenFeedAddress, USD_QUOTE]);
|
|
228
|
+
const roundPriceData = isTokenUSDA ? [0, '100000000'] : yield feedRegistryContract.read.latestRoundData([loanTokenFeedAddress, USD_QUOTE], setViemBlockNumber(blockNumber));
|
|
229
229
|
loanTokenPrice = roundPriceData[1].toString();
|
|
230
230
|
}
|
|
231
231
|
catch (err) {
|
|
@@ -266,7 +266,7 @@ const getTradingApy = (poolAddress) => __awaiter(void 0, void 0, void 0, functio
|
|
|
266
266
|
const data = yield res.json();
|
|
267
267
|
return new Dec(data.tradingApy).div(100).toString();
|
|
268
268
|
});
|
|
269
|
-
const parseT1MarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null) {
|
|
269
|
+
const parseT1MarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null, blockNumber = 'latest') {
|
|
270
270
|
var _a, _b;
|
|
271
271
|
const collAssetContract = getAssetInfoByAddress(data.supplyToken0, network);
|
|
272
272
|
const collAsset = getAssetInfo(getNativeAssetFromWrapped(collAssetContract.symbol), network);
|
|
@@ -282,7 +282,7 @@ const parseT1MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
|
|
|
282
282
|
debtPriceParsed = tokenPrices[debtAsset.symbol] || '0';
|
|
283
283
|
}
|
|
284
284
|
else {
|
|
285
|
-
debtPriceParsed = yield getTokenPriceFromChainlink(debtAssetContract, network, provider);
|
|
285
|
+
debtPriceParsed = yield getTokenPriceFromChainlink(debtAssetContract, network, provider, blockNumber);
|
|
286
286
|
}
|
|
287
287
|
const collAssetData = {
|
|
288
288
|
symbol: collAsset.symbol,
|
|
@@ -378,7 +378,7 @@ const parseT1MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
|
|
|
378
378
|
marketData,
|
|
379
379
|
};
|
|
380
380
|
});
|
|
381
|
-
const parseT2MarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null) {
|
|
381
|
+
const parseT2MarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null, blockNumber = 'latest') {
|
|
382
382
|
var _a, _b, _c;
|
|
383
383
|
const collAsset0Contract = getAssetInfoByAddress(data.supplyToken0, network);
|
|
384
384
|
const collAsset0 = getAssetInfo(getNativeAssetFromWrapped(collAsset0Contract.symbol), network);
|
|
@@ -395,7 +395,7 @@ const parseT2MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
|
|
|
395
395
|
prices = tokenPrices;
|
|
396
396
|
}
|
|
397
397
|
else {
|
|
398
|
-
prices = yield getChainLinkPricesForTokens([collAsset0Contract.address, collAsset1Contract.address, debtAssetContract.address], network, provider);
|
|
398
|
+
prices = yield getChainLinkPricesForTokens([collAsset0Contract.address, collAsset1Contract.address, debtAssetContract.address], network, provider, blockNumber);
|
|
399
399
|
}
|
|
400
400
|
const { supplyDexFee, totalSupplyShares, supplyRate1, totalSupplyToken1, token0PerSupplyShare, token1PerSupplyShare, totalSupplyToken0, maxSupplyShares, withdrawableToken0, withdrawable0, withdrawableToken1, withdrawable1, supplyRate0, utilizationSupply0, utilizationSupply1, withdrawableShares, reservesSupplyToken0, reservesSupplyToken1, } = parseDexSupplyData(data.dexSupplyData, collAsset0.symbol, collAsset1.symbol);
|
|
401
401
|
const collFirstAssetData = {
|
|
@@ -534,7 +534,7 @@ const parseT2MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
|
|
|
534
534
|
marketData,
|
|
535
535
|
};
|
|
536
536
|
});
|
|
537
|
-
const parseT3MarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null) {
|
|
537
|
+
const parseT3MarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null, blockNumber = 'latest') {
|
|
538
538
|
var _a, _b, _c, _d;
|
|
539
539
|
const collAssetContract = getAssetInfoByAddress(data.supplyToken0, network);
|
|
540
540
|
const collAsset = getAssetInfo(getNativeAssetFromWrapped(collAssetContract.symbol), network);
|
|
@@ -552,7 +552,7 @@ const parseT3MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
|
|
|
552
552
|
prices = tokenPrices;
|
|
553
553
|
}
|
|
554
554
|
else {
|
|
555
|
-
prices = yield getChainLinkPricesForTokens([collAssetContract.address, debtAsset0Contract.address, debtAsset1Contract.address], network, provider);
|
|
555
|
+
prices = yield getChainLinkPricesForTokens([collAssetContract.address, debtAsset0Contract.address, debtAsset1Contract.address], network, provider, blockNumber);
|
|
556
556
|
}
|
|
557
557
|
const supplyRate = new Dec(data.supplyRateVault).div(100).toString();
|
|
558
558
|
const collAssetData = {
|
|
@@ -686,7 +686,7 @@ const parseT3MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
|
|
|
686
686
|
marketData,
|
|
687
687
|
};
|
|
688
688
|
});
|
|
689
|
-
const parseT4MarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null) {
|
|
689
|
+
const parseT4MarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null, blockNumber = 'latest') {
|
|
690
690
|
var _a, _b, _c, _d;
|
|
691
691
|
const collAsset0Contract = getAssetInfoByAddress(data.supplyToken0, network);
|
|
692
692
|
const collAsset0 = getAssetInfo(getNativeAssetFromWrapped(collAsset0Contract.symbol), network);
|
|
@@ -706,7 +706,7 @@ const parseT4MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
|
|
|
706
706
|
prices = tokenPrices;
|
|
707
707
|
}
|
|
708
708
|
else {
|
|
709
|
-
prices = yield getChainLinkPricesForTokens([collAsset0Contract.address, collAsset1Contract.address, debtAsset0Contract.address, debtAsset1Contract.address], network, provider);
|
|
709
|
+
prices = yield getChainLinkPricesForTokens([collAsset0Contract.address, collAsset1Contract.address, debtAsset0Contract.address, debtAsset1Contract.address], network, provider, blockNumber);
|
|
710
710
|
}
|
|
711
711
|
const { supplyDexFee, totalSupplyShares, supplyRate1, token0PerSupplyShare, token1PerSupplyShare, totalSupplyToken0, totalSupplyToken1, maxSupplyShares, withdrawableToken0, withdrawable0, withdrawableToken1, withdrawable1, supplyRate0, utilizationSupply0, utilizationSupply1, withdrawableShares, reservesSupplyToken0, reservesSupplyToken1, } = parseDexSupplyData(data.dexSupplyData, collAsset0.symbol, collAsset1.symbol);
|
|
712
712
|
const { borrowableShares, maxBorrowShares, borrowDexFee, utilizationBorrow0, utilizationBorrow1, borrowable0, borrowable1, borrowRate0, borrowRate1, totalBorrowShares, token0PerBorrowShare, token1PerBorrowShare, borrowableToken0, borrowableToken1, totalBorrowToken0, totalBorrowToken1, quoteTokensPerShare, reservesBorrowToken0, reservesBorrowToken1, } = parseDexBorrowData(data.dexBorrowData, debtAsset0.symbol, debtAsset1.symbol);
|
|
@@ -883,7 +883,7 @@ const parseT4MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
|
|
|
883
883
|
marketData,
|
|
884
884
|
};
|
|
885
885
|
});
|
|
886
|
-
const parseMarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null) {
|
|
886
|
+
const parseMarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null, blockNumber = 'latest') {
|
|
887
887
|
const marketInfo = getFluidMarketInfoById(+(data.vaultId.toString()), network);
|
|
888
888
|
if (!marketInfo) {
|
|
889
889
|
console.error(`Fluid market with address ${data.vault} not supported.`);
|
|
@@ -892,13 +892,13 @@ const parseMarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(
|
|
|
892
892
|
const vaultType = parseVaultType(+(data.vaultType.toString()));
|
|
893
893
|
switch (vaultType) {
|
|
894
894
|
case FluidVaultType.T1:
|
|
895
|
-
return parseT1MarketData(provider, data, network, tokenPrices);
|
|
895
|
+
return parseT1MarketData(provider, data, network, tokenPrices, blockNumber);
|
|
896
896
|
case FluidVaultType.T2:
|
|
897
|
-
return parseT2MarketData(provider, data, network, tokenPrices);
|
|
897
|
+
return parseT2MarketData(provider, data, network, tokenPrices, blockNumber);
|
|
898
898
|
case FluidVaultType.T3:
|
|
899
|
-
return parseT3MarketData(provider, data, network, tokenPrices);
|
|
899
|
+
return parseT3MarketData(provider, data, network, tokenPrices, blockNumber);
|
|
900
900
|
case FluidVaultType.T4:
|
|
901
|
-
return parseT4MarketData(provider, data, network, tokenPrices);
|
|
901
|
+
return parseT4MarketData(provider, data, network, tokenPrices, blockNumber);
|
|
902
902
|
default:
|
|
903
903
|
throw new Error(`Unknown vault type: ${vaultType}`);
|
|
904
904
|
}
|
|
@@ -1103,35 +1103,35 @@ const parseUserData = (userPositionData, vaultData) => {
|
|
|
1103
1103
|
throw new Error(`Unknown vault type: ${vaultType}`);
|
|
1104
1104
|
}
|
|
1105
1105
|
};
|
|
1106
|
-
export const _getFluidMarketData = (
|
|
1106
|
+
export const _getFluidMarketData = (provider_1, network_1, market_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, market_1, ...args_1], void 0, function* (provider, network, market, blockNumber = 'latest') {
|
|
1107
1107
|
const view = FluidViewContractViem(provider, network);
|
|
1108
1108
|
const [data, merklCampaigns] = yield Promise.all([
|
|
1109
|
-
view.read.getVaultData([market.marketAddress]),
|
|
1109
|
+
view.read.getVaultData([market.marketAddress], setViemBlockNumber(blockNumber)),
|
|
1110
1110
|
getFluidMerklCampaigns(network),
|
|
1111
1111
|
]);
|
|
1112
|
-
const marketData = yield parseMarketData(provider, data, network);
|
|
1112
|
+
const marketData = yield parseMarketData(provider, data, network, null, blockNumber);
|
|
1113
1113
|
return marketData ? attachFluidMerklIncentives(marketData, merklCampaigns) : marketData;
|
|
1114
1114
|
});
|
|
1115
|
-
export const getFluidMarketData = (
|
|
1116
|
-
export const _getFluidVaultIdsForUser = (
|
|
1115
|
+
export const getFluidMarketData = (provider_1, network_1, market_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, market_1, ...args_1], void 0, function* (provider, network, market, blockNumber = 'latest') { return _getFluidMarketData(getViemProvider(provider, network), network, market, blockNumber); });
|
|
1116
|
+
export const _getFluidVaultIdsForUser = (provider_1, network_1, user_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, user_1, ...args_1], void 0, function* (provider, network, user, blockNumber = 'latest') {
|
|
1117
1117
|
const view = FluidViewContractViem(provider, network);
|
|
1118
|
-
return (yield view.read.getUserNftIds([user])).map((item) => item.toString());
|
|
1118
|
+
return (yield view.read.getUserNftIds([user], setViemBlockNumber(blockNumber))).map((item) => item.toString());
|
|
1119
1119
|
});
|
|
1120
|
-
export const getFluidVaultIdsForUser = (
|
|
1121
|
-
export const _getFluidPosition = (
|
|
1120
|
+
export const getFluidVaultIdsForUser = (provider_1, network_1, user_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, user_1, ...args_1], void 0, function* (provider, network, user, blockNumber = 'latest') { return _getFluidVaultIdsForUser(getViemProvider(provider, network), network, user, blockNumber); });
|
|
1121
|
+
export const _getFluidPosition = (provider_1, network_1, vaultId_1, extractedState_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, vaultId_1, extractedState_1, ...args_1], void 0, function* (provider, network, vaultId, extractedState, blockNumber = 'latest') {
|
|
1122
1122
|
const view = FluidViewContractViem(provider, network);
|
|
1123
|
-
const data = yield view.read.getPositionByNftId([BigInt(vaultId)]);
|
|
1123
|
+
const data = yield view.read.getPositionByNftId([BigInt(vaultId)], setViemBlockNumber(blockNumber));
|
|
1124
1124
|
const userPositionData = data[0];
|
|
1125
1125
|
return parseUserData(userPositionData, extractedState);
|
|
1126
1126
|
});
|
|
1127
|
-
export const getFluidPosition = (
|
|
1128
|
-
export const _getFluidPositionWithMarket = (
|
|
1127
|
+
export const getFluidPosition = (provider_1, network_1, vaultId_1, extractedState_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, vaultId_1, extractedState_1, ...args_1], void 0, function* (provider, network, vaultId, extractedState, blockNumber = 'latest') { return _getFluidPosition(getViemProvider(provider, network), network, vaultId, extractedState, blockNumber); });
|
|
1128
|
+
export const _getFluidPositionWithMarket = (provider_1, network_1, vaultId_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, vaultId_1, ...args_1], void 0, function* (provider, network, vaultId, blockNumber = 'latest') {
|
|
1129
1129
|
const view = FluidViewContractViem(provider, network);
|
|
1130
1130
|
const [data, merklCampaigns] = yield Promise.all([
|
|
1131
|
-
view.read.getPositionByNftId([BigInt(vaultId)]),
|
|
1131
|
+
view.read.getPositionByNftId([BigInt(vaultId)], setViemBlockNumber(blockNumber)),
|
|
1132
1132
|
getFluidMerklCampaigns(network),
|
|
1133
1133
|
]);
|
|
1134
|
-
const parsedMarketData = yield parseMarketData(provider, data[1], network);
|
|
1134
|
+
const parsedMarketData = yield parseMarketData(provider, data[1], network, null, blockNumber);
|
|
1135
1135
|
if (!parsedMarketData) {
|
|
1136
1136
|
return;
|
|
1137
1137
|
}
|
|
@@ -1142,26 +1142,26 @@ export const _getFluidPositionWithMarket = (provider, network, vaultId) => __awa
|
|
|
1142
1142
|
marketData,
|
|
1143
1143
|
};
|
|
1144
1144
|
});
|
|
1145
|
-
export const getFluidPositionWithMarket = (
|
|
1146
|
-
export const _getAllFluidMarketDataChunked = (
|
|
1145
|
+
export const getFluidPositionWithMarket = (provider_1, network_1, vaultId_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, vaultId_1, ...args_1], void 0, function* (provider, network, vaultId, blockNumber = 'latest') { return _getFluidPositionWithMarket(getViemProvider(provider, network), network, vaultId, blockNumber); });
|
|
1146
|
+
export const _getAllFluidMarketDataChunked = (network_1, provider_1, ...args_1) => __awaiter(void 0, [network_1, provider_1, ...args_1], void 0, function* (network, provider, blockNumber = 'latest') {
|
|
1147
1147
|
const versions = getFluidVersionsDataForNetwork(network);
|
|
1148
1148
|
const view = FluidViewContractViem(provider, network);
|
|
1149
1149
|
const [data, merklCampaigns] = yield Promise.all([
|
|
1150
|
-
Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress]))),
|
|
1150
|
+
Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress], setViemBlockNumber(blockNumber)))),
|
|
1151
1151
|
getFluidMerklCampaigns(network),
|
|
1152
1152
|
]);
|
|
1153
1153
|
return Promise.all(data.map((item) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1154
|
-
const marketData = yield parseMarketData(provider, item, network);
|
|
1154
|
+
const marketData = yield parseMarketData(provider, item, network, null, blockNumber);
|
|
1155
1155
|
return marketData ? attachFluidMerklIncentives(marketData, merklCampaigns) : marketData;
|
|
1156
1156
|
})));
|
|
1157
1157
|
});
|
|
1158
|
-
export const getAllFluidMarketDataChunked = (
|
|
1159
|
-
export const _getFluidTokenData = (
|
|
1158
|
+
export const getAllFluidMarketDataChunked = (network_1, provider_1, ...args_1) => __awaiter(void 0, [network_1, provider_1, ...args_1], void 0, function* (network, provider, blockNumber = 'latest') { return _getAllFluidMarketDataChunked(network, getViemProvider(provider, network, { batch: { multicall: true } }), blockNumber); });
|
|
1159
|
+
export const _getFluidTokenData = (provider_1, network_1, token_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, token_1, ...args_1], void 0, function* (provider, network, token, blockNumber = 'latest') {
|
|
1160
1160
|
var _a, _b;
|
|
1161
1161
|
const view = FluidViewContractViem(provider, network);
|
|
1162
1162
|
const fTokenAddress = getFTokenAddress(token, network);
|
|
1163
1163
|
const [data, rewardsApiResponse,] = yield Promise.all([
|
|
1164
|
-
yield view.read.getFTokenData([fTokenAddress]),
|
|
1164
|
+
yield view.read.getFTokenData([fTokenAddress], setViemBlockNumber(blockNumber)),
|
|
1165
1165
|
fetch(`https://api.fluid.instadapp.io/v2/lending/${network}/tokens/${fTokenAddress}`),
|
|
1166
1166
|
]);
|
|
1167
1167
|
let rewardsData = { rewards: [] };
|
|
@@ -1188,7 +1188,7 @@ export const _getFluidTokenData = (provider, network, token) => __awaiter(void 0
|
|
|
1188
1188
|
withdrawRate,
|
|
1189
1189
|
};
|
|
1190
1190
|
});
|
|
1191
|
-
export const getFluidTokenData = (
|
|
1191
|
+
export const getFluidTokenData = (provider_1, network_1, token_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, token_1, ...args_1], void 0, function* (provider, network, token, blockNumber = 'latest') { return _getFluidTokenData(getViemProvider(provider, network), network, token, blockNumber); });
|
|
1192
1192
|
const parseFDepositTokenData = (fTokenData, userPosition, apiData, fTokenAddress) => {
|
|
1193
1193
|
var _a, _b;
|
|
1194
1194
|
const decimals = fTokenData.decimals.toString();
|
|
@@ -1210,11 +1210,11 @@ const parseFDepositTokenData = (fTokenData, userPosition, apiData, fTokenAddress
|
|
|
1210
1210
|
depositedShares: getEthAmountForDecimals(userPosition.fTokenShares.toString(), decimals),
|
|
1211
1211
|
};
|
|
1212
1212
|
};
|
|
1213
|
-
export const _getFluidDepositData = (
|
|
1213
|
+
export const _getFluidDepositData = (provider_1, network_1, token_1, address_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, token_1, address_1, ...args_1], void 0, function* (provider, network, token, address, blockNumber = 'latest') {
|
|
1214
1214
|
const view = FluidViewContractViem(provider, network);
|
|
1215
1215
|
const fTokenAddress = getFTokenAddress(token, network);
|
|
1216
1216
|
const [[userPosition, fTokenData], rewardsApiResponse,] = yield Promise.all([
|
|
1217
|
-
view.read.getUserEarnPositionWithFToken([fTokenAddress, address]),
|
|
1217
|
+
view.read.getUserEarnPositionWithFToken([fTokenAddress, address], setViemBlockNumber(blockNumber)),
|
|
1218
1218
|
fetch(`https://api.fluid.instadapp.io/v2/lending/${network}/tokens/${fTokenAddress}`),
|
|
1219
1219
|
]);
|
|
1220
1220
|
let rewardsData = { rewards: [] };
|
|
@@ -1226,11 +1226,11 @@ export const _getFluidDepositData = (provider, network, token, address) => __awa
|
|
|
1226
1226
|
}
|
|
1227
1227
|
return parseFDepositTokenData(fTokenData, userPosition, rewardsData, fTokenAddress);
|
|
1228
1228
|
});
|
|
1229
|
-
export const getFluidDepositData = (
|
|
1230
|
-
export const _getAllUserEarnPositionsWithFTokens = (
|
|
1229
|
+
export const getFluidDepositData = (provider_1, network_1, token_1, address_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, token_1, address_1, ...args_1], void 0, function* (provider, network, token, address, blockNumber = 'latest') { return _getFluidDepositData(getViemProvider(provider, network), network, token, address, blockNumber); });
|
|
1230
|
+
export const _getAllUserEarnPositionsWithFTokens = (provider_1, network_1, user_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, user_1, ...args_1], void 0, function* (provider, network, user, blockNumber = 'latest') {
|
|
1231
1231
|
const view = FluidViewContractViem(provider, network);
|
|
1232
1232
|
const [[userPositions, fTokensData], rewardsApiResponse,] = yield Promise.all([
|
|
1233
|
-
view.read.getAllUserEarnPositionsWithFTokens([user]),
|
|
1233
|
+
view.read.getAllUserEarnPositionsWithFTokens([user], setViemBlockNumber(blockNumber)),
|
|
1234
1234
|
fetch(`https://api.fluid.instadapp.io/v2/lending/${network}/tokens`),
|
|
1235
1235
|
]);
|
|
1236
1236
|
let rewardsData = {
|
|
@@ -1254,14 +1254,14 @@ export const _getAllUserEarnPositionsWithFTokens = (provider, network, user) =>
|
|
|
1254
1254
|
}, []);
|
|
1255
1255
|
return parsedRes;
|
|
1256
1256
|
});
|
|
1257
|
-
export const getAllUserEarnPositionsWithFTokens = (
|
|
1258
|
-
export const _getUserPositions = (
|
|
1257
|
+
export const getAllUserEarnPositionsWithFTokens = (provider_1, network_1, user_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, user_1, ...args_1], void 0, function* (provider, network, user, blockNumber = 'latest') { return _getAllUserEarnPositionsWithFTokens(getViemProvider(provider, network), network, user, blockNumber); });
|
|
1258
|
+
export const _getUserPositions = (provider_1, network_1, user_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, user_1, ...args_1], void 0, function* (provider, network, user, blockNumber = 'latest') {
|
|
1259
1259
|
const view = FluidViewContractViem(provider, network);
|
|
1260
1260
|
const [data, merklCampaigns] = yield Promise.all([
|
|
1261
|
-
view.read.getUserPositions([user]),
|
|
1261
|
+
view.read.getUserPositions([user], setViemBlockNumber(blockNumber)),
|
|
1262
1262
|
getFluidMerklCampaigns(network),
|
|
1263
1263
|
]);
|
|
1264
|
-
const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network); }))))
|
|
1264
|
+
const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, null, blockNumber); }))))
|
|
1265
1265
|
.map(marketData => (marketData ? attachFluidMerklIncentives(marketData, merklCampaigns) : marketData));
|
|
1266
1266
|
const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
|
|
1267
1267
|
return parsedMarketData.map((market, i) => ({
|
|
@@ -1269,39 +1269,39 @@ export const _getUserPositions = (provider, network, user) => __awaiter(void 0,
|
|
|
1269
1269
|
userData: userData[i],
|
|
1270
1270
|
})).filter(md => md.marketData !== undefined);
|
|
1271
1271
|
});
|
|
1272
|
-
export const getUserPositions = (
|
|
1273
|
-
const getTokenPricePortfolio = (
|
|
1272
|
+
export const getUserPositions = (provider_1, network_1, user_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, user_1, ...args_1], void 0, function* (provider, network, user, blockNumber = 'latest') { return _getUserPositions(getViemProvider(provider, network), network, user, blockNumber); });
|
|
1273
|
+
const getTokenPricePortfolio = (token_1, provider_1, network_1, ...args_1) => __awaiter(void 0, [token_1, provider_1, network_1, ...args_1], void 0, function* (token, provider, network, blockNumber = 'latest') {
|
|
1274
1274
|
if (token === 'ETH') {
|
|
1275
1275
|
const ethFeedContract = ETHPriceFeedContractViem(provider, network);
|
|
1276
|
-
return ethFeedContract.read.latestAnswer();
|
|
1276
|
+
return ethFeedContract.read.latestAnswer(setViemBlockNumber(blockNumber));
|
|
1277
1277
|
}
|
|
1278
1278
|
if (token === 'WBTC') {
|
|
1279
1279
|
const wbtcFeedContract = BTCPriceFeedContractViem(provider, network);
|
|
1280
|
-
return wbtcFeedContract.read.latestAnswer();
|
|
1280
|
+
return wbtcFeedContract.read.latestAnswer(setViemBlockNumber(blockNumber));
|
|
1281
1281
|
}
|
|
1282
1282
|
if (token === 'wstETH') {
|
|
1283
|
-
return getWstETHPrice(provider, network);
|
|
1283
|
+
return getWstETHPrice(provider, network, blockNumber);
|
|
1284
1284
|
}
|
|
1285
1285
|
if (token === 'weETH' && network !== NetworkNumber.Plasma) {
|
|
1286
|
-
return getWeETHPrice(provider, network);
|
|
1286
|
+
return getWeETHPrice(provider, network, blockNumber);
|
|
1287
1287
|
}
|
|
1288
1288
|
if (token === 'wrsETH') {
|
|
1289
|
-
return getWsrETHPrice(provider, network);
|
|
1289
|
+
return getWsrETHPrice(provider, network, blockNumber);
|
|
1290
1290
|
}
|
|
1291
1291
|
if (token === 'syrupUSDT') {
|
|
1292
|
-
return getSyrupUSDTPrice(provider, network);
|
|
1292
|
+
return getSyrupUSDTPrice(provider, network, blockNumber);
|
|
1293
1293
|
}
|
|
1294
1294
|
if (token === 'wstUSR') {
|
|
1295
|
-
return getWstUSRPrice(provider, network);
|
|
1295
|
+
return getWstUSRPrice(provider, network, blockNumber);
|
|
1296
1296
|
}
|
|
1297
1297
|
const isMainnet = isMainnetNetwork(network);
|
|
1298
1298
|
const chainLinkFeedAddress = getChainlinkAssetAddress(token, network);
|
|
1299
1299
|
if (isMainnet) {
|
|
1300
1300
|
const feedRegistryContract = FeedRegistryContractViem(provider, NetworkNumber.Eth);
|
|
1301
|
-
return feedRegistryContract.read.latestAnswer([chainLinkFeedAddress, USD_QUOTE]);
|
|
1301
|
+
return feedRegistryContract.read.latestAnswer([chainLinkFeedAddress, USD_QUOTE], setViemBlockNumber(blockNumber));
|
|
1302
1302
|
}
|
|
1303
1303
|
const feedRegistryContract = DFSFeedRegistryContractViem(provider, network);
|
|
1304
|
-
return feedRegistryContract.read.latestRoundData([chainLinkFeedAddress, USD_QUOTE]);
|
|
1304
|
+
return feedRegistryContract.read.latestRoundData([chainLinkFeedAddress, USD_QUOTE], setViemBlockNumber(blockNumber));
|
|
1305
1305
|
});
|
|
1306
1306
|
const tokensWithoutChainlinkPrices = ['sUSDS', 'USDA', 'ezETH', 'rsETH', 'weETHs', 'LBTC'];
|
|
1307
1307
|
const handleTokenWithoutChainlinkPrice = (token, prices) => {
|
|
@@ -1328,12 +1328,12 @@ const handleTokenWithoutChainlinkPrice = (token, prices) => {
|
|
|
1328
1328
|
}
|
|
1329
1329
|
return '0';
|
|
1330
1330
|
};
|
|
1331
|
-
const getTokensPricesForPortfolio = (
|
|
1331
|
+
const getTokensPricesForPortfolio = (tokens_1, provider_1, network_1, ...args_1) => __awaiter(void 0, [tokens_1, provider_1, network_1, ...args_1], void 0, function* (tokens, provider, network, blockNumber = 'latest') {
|
|
1332
1332
|
const tokensWithChainlinkPrices = tokens.filter((token) => !tokensWithoutChainlinkPrices.includes(token));
|
|
1333
1333
|
const pricesFromChainlink = {};
|
|
1334
1334
|
yield Promise.all(tokensWithChainlinkPrices.map((token) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1335
1335
|
try {
|
|
1336
|
-
const price = yield getTokenPricePortfolio(token, provider, network);
|
|
1336
|
+
const price = yield getTokenPricePortfolio(token, provider, network, blockNumber);
|
|
1337
1337
|
if (typeof price === 'string')
|
|
1338
1338
|
pricesFromChainlink[token] = price;
|
|
1339
1339
|
else if (typeof price === 'bigint')
|
|
@@ -1352,9 +1352,9 @@ const getTokensPricesForPortfolio = (tokens, provider, network) => __awaiter(voi
|
|
|
1352
1352
|
});
|
|
1353
1353
|
return pricesFromChainlink;
|
|
1354
1354
|
});
|
|
1355
|
-
export const _getUserPositionsPortfolio = (
|
|
1355
|
+
export const _getUserPositionsPortfolio = (provider_1, network_1, user_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, user_1, ...args_1], void 0, function* (provider, network, user, blockNumber = 'latest') {
|
|
1356
1356
|
const view = FluidViewContractViem(provider, network);
|
|
1357
|
-
const data = yield view.read.getUserPositions([user]);
|
|
1357
|
+
const data = yield view.read.getUserPositions([user], setViemBlockNumber(blockNumber));
|
|
1358
1358
|
const tokens = Array.from(new Set(data[1].map((vaultData) => {
|
|
1359
1359
|
const vaultTokens = [getAssetInfoByAddress(vaultData.supplyToken0, network).symbol, getAssetInfoByAddress(vaultData.borrowToken0, network).symbol];
|
|
1360
1360
|
if (vaultData.supplyToken1 && !compareAddresses(ZERO_ADDRESS, vaultData.supplyToken1))
|
|
@@ -1371,10 +1371,10 @@ export const _getUserPositionsPortfolio = (provider, network, user) => __awaiter
|
|
|
1371
1371
|
if (!tokens.includes('WBTC'))
|
|
1372
1372
|
tokens.push('WBTC');
|
|
1373
1373
|
const [tokenPrices, merklCampaigns] = yield Promise.all([
|
|
1374
|
-
getTokensPricesForPortfolio(tokens, provider, network),
|
|
1374
|
+
getTokensPricesForPortfolio(tokens, provider, network, blockNumber),
|
|
1375
1375
|
getFluidMerklCampaigns(network),
|
|
1376
1376
|
]);
|
|
1377
|
-
const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); }))))
|
|
1377
|
+
const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices, blockNumber); }))))
|
|
1378
1378
|
.map(marketData => (marketData ? attachFluidMerklIncentives(marketData, merklCampaigns) : marketData));
|
|
1379
1379
|
const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
|
|
1380
1380
|
return parsedMarketData.map((market, i) => ({
|
|
@@ -1382,12 +1382,13 @@ export const _getUserPositionsPortfolio = (provider, network, user) => __awaiter
|
|
|
1382
1382
|
userData: userData[i],
|
|
1383
1383
|
})).filter(md => md.marketData !== undefined);
|
|
1384
1384
|
});
|
|
1385
|
-
|
|
1385
|
+
/** `blockTimestamp` (unix seconds) is the historical block's timestamp when already known; otherwise it is read from the block. */
|
|
1386
|
+
export const _getAllFluidMarketDataPortfolio = (provider_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, ...args_1], void 0, function* (provider, network, blockNumber = 'latest', blockTimestamp) {
|
|
1386
1387
|
const versions = getFluidVersionsDataForNetwork(network);
|
|
1387
1388
|
if (versions.length === 0)
|
|
1388
1389
|
return {};
|
|
1389
1390
|
const view = FluidViewContractViem(provider, network);
|
|
1390
|
-
const vaultsData = yield Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress])));
|
|
1391
|
+
const vaultsData = yield Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress], setViemBlockNumber(blockNumber))));
|
|
1391
1392
|
const tokens = Array.from(new Set(vaultsData.map((vaultData) => {
|
|
1392
1393
|
const vaultTokens = [getAssetInfoByAddress(vaultData.supplyToken0, network).symbol, getAssetInfoByAddress(vaultData.borrowToken0, network).symbol];
|
|
1393
1394
|
if (vaultData.supplyToken1 && !compareAddresses(ZERO_ADDRESS, vaultData.supplyToken1))
|
|
@@ -1402,10 +1403,12 @@ export const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(
|
|
|
1402
1403
|
if (!tokens.includes('WBTC'))
|
|
1403
1404
|
tokens.push('WBTC');
|
|
1404
1405
|
const [tokenPrices, merklCampaigns] = yield Promise.all([
|
|
1405
|
-
getTokensPricesForPortfolio(tokens, provider, network),
|
|
1406
|
-
|
|
1406
|
+
getTokensPricesForPortfolio(tokens, provider, network, blockNumber),
|
|
1407
|
+
// Merkl rewards are keyed by time: a historical block resolves to its timestamp first (one RPC
|
|
1408
|
+
// call unless given, none for 'latest') so the rewards in force at that moment are attached.
|
|
1409
|
+
getBlockTimestamp(provider, blockNumber, blockTimestamp).then((asOfTimestamp) => getFluidMerklCampaigns(network, asOfTimestamp)),
|
|
1407
1410
|
]);
|
|
1408
|
-
const parsedMarketsData = yield Promise.all(vaultsData.map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); })));
|
|
1411
|
+
const parsedMarketsData = yield Promise.all(vaultsData.map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices, blockNumber); })));
|
|
1409
1412
|
const marketsData = {};
|
|
1410
1413
|
parsedMarketsData.forEach((marketData, i) => {
|
|
1411
1414
|
if (!marketData)
|
|
@@ -1414,4 +1417,4 @@ export const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(
|
|
|
1414
1417
|
});
|
|
1415
1418
|
return marketsData;
|
|
1416
1419
|
});
|
|
1417
|
-
export const getAllFluidMarketDataPortfolio = (
|
|
1420
|
+
export const getAllFluidMarketDataPortfolio = (provider_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, ...args_1], void 0, function* (provider, network, blockNumber = 'latest', blockTimestamp) { return _getAllFluidMarketDataPortfolio(getViemProvider(provider, network, { batch: { multicall: true } }), network, blockNumber, blockTimestamp); });
|
package/esm/fluid/merkl.d.ts
CHANGED
|
@@ -20,10 +20,12 @@ export declare enum FluidMerklOpportunityType {
|
|
|
20
20
|
}
|
|
21
21
|
export declare const buildFluidMerklRewardMap: (opportunities: MerklOpportunity[], chainId: NetworkNumber) => FluidMerklRewardMap;
|
|
22
22
|
/**
|
|
23
|
-
* Fetches live vault-scoped Fluid campaigns for the chain, keyed by vault address.
|
|
24
|
-
*
|
|
23
|
+
* Fetches live vault-scoped Fluid campaigns for the chain, keyed by vault address. With
|
|
24
|
+
* `asOfTimestamp` (unix seconds) the campaigns and APRs are the ones Merkl had at that moment
|
|
25
|
+
* instead. Never throws — on any failure it returns an empty map, so Merkl being down can't break
|
|
26
|
+
* market data.
|
|
25
27
|
*/
|
|
26
|
-
export declare const getFluidMerklCampaigns: ((chainId: NetworkNumber) => Promise<FluidMerklRewardMap>) & memoize.Memoized<(chainId: NetworkNumber) => Promise<FluidMerklRewardMap>>;
|
|
28
|
+
export declare const getFluidMerklCampaigns: ((chainId: NetworkNumber, asOfTimestamp?: number) => Promise<FluidMerklRewardMap>) & memoize.Memoized<(chainId: NetworkNumber, asOfTimestamp?: number) => Promise<FluidMerklRewardMap>>;
|
|
27
29
|
/**
|
|
28
30
|
* Appends the vault's Merkl campaigns to its assets' incentive arrays — supply rewards on every
|
|
29
31
|
* suppliable asset and borrow rewards on every borrowable one. Smart collateral/debt vaults hold
|
package/esm/fluid/merkl.js
CHANGED
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import memoize from 'memoizee';
|
|
11
11
|
import { aprToApy } from '../moneymarket';
|
|
12
|
-
import {
|
|
12
|
+
import { fetchMerklOpportunities } from '../services/merkl';
|
|
13
13
|
import { IncentiveKind, IncentiveSource, OpportunityStatus, } from '../types';
|
|
14
14
|
/**
|
|
15
15
|
* Merkl tags Fluid vault-scoped reward campaigns via the opportunity `type` field:
|
|
@@ -63,23 +63,28 @@ export const buildFluidMerklRewardMap = (opportunities, chainId) => {
|
|
|
63
63
|
return result;
|
|
64
64
|
};
|
|
65
65
|
/**
|
|
66
|
-
* Fetches live vault-scoped Fluid campaigns for the chain, keyed by vault address.
|
|
67
|
-
*
|
|
66
|
+
* Fetches live vault-scoped Fluid campaigns for the chain, keyed by vault address. With
|
|
67
|
+
* `asOfTimestamp` (unix seconds) the campaigns and APRs are the ones Merkl had at that moment
|
|
68
|
+
* instead. Never throws — on any failure it returns an empty map, so Merkl being down can't break
|
|
69
|
+
* market data.
|
|
68
70
|
*/
|
|
69
|
-
export const getFluidMerklCampaigns = memoize((chainId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
|
+
export const getFluidMerklCampaigns = memoize((chainId, asOfTimestamp) => __awaiter(void 0, void 0, void 0, function* () {
|
|
70
72
|
try {
|
|
71
|
-
const opportunities = yield
|
|
73
|
+
const opportunities = yield fetchMerklOpportunities({
|
|
72
74
|
mainProtocolId: 'fluid',
|
|
75
|
+
chainId: chainId.toString(),
|
|
73
76
|
type: Object.values(FluidMerklOpportunityType).join(','),
|
|
74
77
|
status: OpportunityStatus.LIVE,
|
|
75
|
-
});
|
|
78
|
+
}, asOfTimestamp);
|
|
76
79
|
return buildFluidMerklRewardMap(opportunities, chainId);
|
|
77
80
|
}
|
|
78
81
|
catch (e) {
|
|
79
82
|
console.error('Failed to fetch Fluid Merkl campaigns', e);
|
|
80
83
|
return {};
|
|
81
84
|
}
|
|
82
|
-
|
|
85
|
+
// memoizee keys on the declared arity, which excludes optional params — `length: 2` keeps the
|
|
86
|
+
// timestamp in the cache key so a historical lookup never serves (or is served by) the live one
|
|
87
|
+
}), { promise: true, maxAge: 60 * 1000, length: 2 });
|
|
83
88
|
/**
|
|
84
89
|
* Appends the vault's Merkl campaigns to its assets' incentive arrays — supply rewards on every
|
|
85
90
|
* suppliable asset and borrow rewards on every borrowable one. Smart collateral/debt vaults hold
|
package/esm/liquity/index.d.ts
CHANGED
|
@@ -5,10 +5,10 @@ export declare const LIQUITY_NORMAL_MODE_RATIO = 110;
|
|
|
5
5
|
export declare const LIQUITY_RECOVERY_MODE_RATIO = 150;
|
|
6
6
|
export declare const _getLiquityAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
|
|
7
7
|
export declare const getLiquityAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
|
|
8
|
-
export declare const getDebtInFront: (provider: EthereumProvider, address: EthAddress) => Promise<string>;
|
|
9
|
-
export declare const _getLiquityTroveInfo: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<LiquityTroveInfo>;
|
|
10
|
-
export declare const getLiquityTroveInfo: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress) => Promise<LiquityTroveInfo>;
|
|
11
|
-
export declare const getLiquityStakingData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<{
|
|
8
|
+
export declare const getDebtInFront: (provider: EthereumProvider, address: EthAddress, blockNumber?: Blockish) => Promise<string>;
|
|
9
|
+
export declare const _getLiquityTroveInfo: (provider: Client, network: NetworkNumber, address: EthAddress, blockNumber?: Blockish) => Promise<LiquityTroveInfo>;
|
|
10
|
+
export declare const getLiquityTroveInfo: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, blockNumber?: Blockish) => Promise<LiquityTroveInfo>;
|
|
11
|
+
export declare const getLiquityStakingData: (provider: Client, network: NetworkNumber, address: EthAddress, blockNumber?: Blockish) => Promise<{
|
|
12
12
|
totalLUSDDeposited: string;
|
|
13
13
|
totalLQTYStaked: string;
|
|
14
14
|
stakedLQTY: string;
|
package/esm/liquity/index.js
CHANGED
|
@@ -40,33 +40,33 @@ export const _getLiquityAccountBalances = (provider, network, block, addressMapp
|
|
|
40
40
|
return balances;
|
|
41
41
|
});
|
|
42
42
|
export const getLiquityAccountBalances = (provider, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () { return _getLiquityAccountBalances(getViemProvider(provider, network), network, block, addressMapping, address); });
|
|
43
|
-
const _getDebtInFront = (viewContract_1, address_1, ...args_1) => __awaiter(void 0, [viewContract_1, address_1, ...args_1], void 0, function* (viewContract, address, accumulatedSum = '0', iterations = 2000) {
|
|
44
|
-
const res = yield viewContract.read.getDebtInFront([address, accumulatedSum, iterations]);
|
|
43
|
+
const _getDebtInFront = (viewContract_1, address_1, ...args_1) => __awaiter(void 0, [viewContract_1, address_1, ...args_1], void 0, function* (viewContract, address, accumulatedSum = '0', iterations = 2000, blockNumber = 'latest') {
|
|
44
|
+
const res = yield viewContract.read.getDebtInFront([address, accumulatedSum, iterations], setViemBlockNumber(blockNumber));
|
|
45
45
|
const debt = res[1].toString();
|
|
46
46
|
const next = res[0];
|
|
47
47
|
if (next === ZERO_ADDRESS)
|
|
48
48
|
return assetAmountInEth(debt, 'LUSD');
|
|
49
|
-
return _getDebtInFront(viewContract, next, debt, iterations);
|
|
49
|
+
return _getDebtInFront(viewContract, next, debt, iterations, blockNumber);
|
|
50
50
|
});
|
|
51
|
-
export const getDebtInFront = (
|
|
51
|
+
export const getDebtInFront = (provider_1, address_1, ...args_1) => __awaiter(void 0, [provider_1, address_1, ...args_1], void 0, function* (provider, address, blockNumber = 'latest') {
|
|
52
52
|
const client = getViemProvider(provider, NetworkNumber.Eth);
|
|
53
53
|
const viewContract = LiquityViewContractViem(client, NetworkNumber.Eth);
|
|
54
|
-
return _getDebtInFront(viewContract, address);
|
|
54
|
+
return _getDebtInFront(viewContract, address, '0', 2000, blockNumber);
|
|
55
55
|
});
|
|
56
|
-
export const _getLiquityTroveInfo = (
|
|
56
|
+
export const _getLiquityTroveInfo = (provider_1, network_1, address_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, address_1, ...args_1], void 0, function* (provider, network, address, blockNumber = 'latest') {
|
|
57
57
|
const viewContract = LiquityViewContractViem(provider, network);
|
|
58
58
|
const collSurplusPoolContract = LiquityCollSurplusPoolContractViem(provider, network);
|
|
59
59
|
const troveManagerContract = LiquityTroveManagerContractViem(provider, network);
|
|
60
60
|
const priceFeedContract = LiquityPriceFeedContractViem(provider, network);
|
|
61
61
|
const activePoolContract = LiquityActivePoolContractViem(provider, network);
|
|
62
62
|
const [troveInfo, collSurplusInfo, borrowingRateWithDecay, assetPrice, totalETH, totalLUSD, debtInFront,] = yield Promise.all([
|
|
63
|
-
viewContract.read.getTroveInfo([address]),
|
|
64
|
-
collSurplusPoolContract.read.getCollateral([address]),
|
|
65
|
-
troveManagerContract.read.getBorrowingRateWithDecay(),
|
|
66
|
-
priceFeedContract.read.fetchPrice(),
|
|
67
|
-
activePoolContract.read.getETH(),
|
|
68
|
-
activePoolContract.read.getLUSDDebt(),
|
|
69
|
-
_getDebtInFront(viewContract, address),
|
|
63
|
+
viewContract.read.getTroveInfo([address], setViemBlockNumber(blockNumber)),
|
|
64
|
+
collSurplusPoolContract.read.getCollateral([address], setViemBlockNumber(blockNumber)),
|
|
65
|
+
troveManagerContract.read.getBorrowingRateWithDecay(setViemBlockNumber(blockNumber)),
|
|
66
|
+
priceFeedContract.read.fetchPrice(setViemBlockNumber(blockNumber)),
|
|
67
|
+
activePoolContract.read.getETH(setViemBlockNumber(blockNumber)),
|
|
68
|
+
activePoolContract.read.getLUSDDebt(setViemBlockNumber(blockNumber)),
|
|
69
|
+
_getDebtInFront(viewContract, address, '0', 2000, blockNumber),
|
|
70
70
|
]);
|
|
71
71
|
const recoveryMode = troveInfo[6];
|
|
72
72
|
const minCollateralRatio = recoveryMode ? LIQUITY_RECOVERY_MODE_RATIO : LIQUITY_NORMAL_MODE_RATIO;
|
|
@@ -100,19 +100,19 @@ export const _getLiquityTroveInfo = (provider, network, address) => __awaiter(vo
|
|
|
100
100
|
};
|
|
101
101
|
return payload;
|
|
102
102
|
});
|
|
103
|
-
export const getLiquityTroveInfo = (
|
|
104
|
-
export const getLiquityStakingData = (
|
|
103
|
+
export const getLiquityTroveInfo = (provider_1, network_1, address_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, address_1, ...args_1], void 0, function* (provider, network, address, blockNumber = 'latest') { return _getLiquityTroveInfo(getViemProvider(provider, network, { batch: { multicall: true } }), network, address, blockNumber); });
|
|
104
|
+
export const getLiquityStakingData = (provider_1, network_1, address_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, address_1, ...args_1], void 0, function* (provider, network, address, blockNumber = 'latest') {
|
|
105
105
|
const lqtyStakingView = LiquityLQTYStakingViem(provider, network);
|
|
106
106
|
const stabilityPoolView = LiquityStabilityPoolViem(provider, network);
|
|
107
107
|
const [stakes, pendingETHGain, pendingLUSDGain, totalLQTYStakes, stabilityPoolETHGain, stabilityPoolLQTYGain, compoundedLUSDDeposit, totalLUSDDeposits,] = yield Promise.all([
|
|
108
|
-
lqtyStakingView.read.stakes([address]),
|
|
109
|
-
lqtyStakingView.read.getPendingETHGain([address]),
|
|
110
|
-
lqtyStakingView.read.getPendingLUSDGain([address]),
|
|
111
|
-
lqtyStakingView.read.totalLQTYStaked(),
|
|
112
|
-
stabilityPoolView.read.getDepositorETHGain([address]),
|
|
113
|
-
stabilityPoolView.read.getDepositorLQTYGain([address]),
|
|
114
|
-
stabilityPoolView.read.getCompoundedLUSDDeposit([address]),
|
|
115
|
-
stabilityPoolView.read.getTotalLUSDDeposits(),
|
|
108
|
+
lqtyStakingView.read.stakes([address], setViemBlockNumber(blockNumber)),
|
|
109
|
+
lqtyStakingView.read.getPendingETHGain([address], setViemBlockNumber(blockNumber)),
|
|
110
|
+
lqtyStakingView.read.getPendingLUSDGain([address], setViemBlockNumber(blockNumber)),
|
|
111
|
+
lqtyStakingView.read.totalLQTYStaked(setViemBlockNumber(blockNumber)),
|
|
112
|
+
stabilityPoolView.read.getDepositorETHGain([address], setViemBlockNumber(blockNumber)),
|
|
113
|
+
stabilityPoolView.read.getDepositorLQTYGain([address], setViemBlockNumber(blockNumber)),
|
|
114
|
+
stabilityPoolView.read.getCompoundedLUSDDeposit([address], setViemBlockNumber(blockNumber)),
|
|
115
|
+
stabilityPoolView.read.getTotalLUSDDeposits(setViemBlockNumber(blockNumber)),
|
|
116
116
|
]);
|
|
117
117
|
const totalLUSDDeposited = getEthAmountForDecimals(totalLUSDDeposits, 18);
|
|
118
118
|
const totalLQTYStaked = getEthAmountForDecimals(totalLQTYStakes, 18);
|