@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.
Files changed (145) hide show
  1. package/cjs/aaveV2/index.d.ts +4 -4
  2. package/cjs/aaveV2/index.js +7 -7
  3. package/cjs/aaveV3/index.d.ts +4 -3
  4. package/cjs/aaveV3/index.js +14 -10
  5. package/cjs/aaveV3/merkl.d.ts +5 -1
  6. package/cjs/aaveV3/merkl.js +8 -3
  7. package/cjs/aaveV4/index.d.ts +4 -3
  8. package/cjs/aaveV4/index.js +19 -16
  9. package/cjs/aaveV4/merkl.d.ts +10 -2
  10. package/cjs/aaveV4/merkl.js +15 -6
  11. package/cjs/claiming/aaveV3.d.ts +2 -2
  12. package/cjs/claiming/aaveV3.js +5 -4
  13. package/cjs/claiming/king.d.ts +2 -2
  14. package/cjs/claiming/king.js +3 -2
  15. package/cjs/claiming/spark.d.ts +3 -3
  16. package/cjs/claiming/spark.js +8 -7
  17. package/cjs/claiming/uniswap.d.ts +2 -2
  18. package/cjs/claiming/uniswap.js +3 -2
  19. package/cjs/compoundV2/index.d.ts +4 -4
  20. package/cjs/compoundV2/index.js +9 -9
  21. package/cjs/compoundV3/index.d.ts +5 -4
  22. package/cjs/compoundV3/index.js +17 -13
  23. package/cjs/compoundV3/merkl.d.ts +1 -1
  24. package/cjs/compoundV3/merkl.js +2 -5
  25. package/cjs/curveUsd/index.d.ts +5 -5
  26. package/cjs/curveUsd/index.js +17 -17
  27. package/cjs/fluid/index.d.ts +23 -22
  28. package/cjs/fluid/index.js +75 -72
  29. package/cjs/fluid/merkl.d.ts +5 -3
  30. package/cjs/fluid/merkl.js +11 -6
  31. package/cjs/liquity/index.d.ts +4 -4
  32. package/cjs/liquity/index.js +23 -23
  33. package/cjs/liquityV2/index.d.ts +10 -10
  34. package/cjs/liquityV2/index.js +59 -59
  35. package/cjs/llamaLend/index.d.ts +5 -5
  36. package/cjs/llamaLend/index.js +13 -13
  37. package/cjs/maker/index.d.ts +6 -6
  38. package/cjs/maker/index.js +16 -16
  39. package/cjs/morphoBlue/index.d.ts +7 -7
  40. package/cjs/morphoBlue/index.js +28 -26
  41. package/cjs/morphoBlue/merkl.d.ts +5 -3
  42. package/cjs/morphoBlue/merkl.js +6 -8
  43. package/cjs/morphoMidnight/index.d.ts +5 -5
  44. package/cjs/morphoMidnight/index.js +18 -18
  45. package/cjs/portfolio/customDeFiData.js +45 -40
  46. package/cjs/services/merkl.d.ts +36 -2
  47. package/cjs/services/merkl.js +142 -19
  48. package/cjs/services/priceService.d.ts +12 -12
  49. package/cjs/services/priceService.js +30 -29
  50. package/cjs/services/viem.d.ts +10 -2
  51. package/cjs/services/viem.js +27 -1
  52. package/cjs/spark/index.d.ts +4 -4
  53. package/cjs/spark/index.js +9 -9
  54. package/cjs/types/merkl.d.ts +18 -0
  55. package/cjs/types/portfolio.d.ts +2 -0
  56. package/cjs/umbrella/index.d.ts +2 -2
  57. package/cjs/umbrella/index.js +5 -4
  58. package/esm/aaveV2/index.d.ts +4 -4
  59. package/esm/aaveV2/index.js +8 -8
  60. package/esm/aaveV3/index.d.ts +4 -3
  61. package/esm/aaveV3/index.js +15 -11
  62. package/esm/aaveV3/merkl.d.ts +5 -1
  63. package/esm/aaveV3/merkl.js +9 -4
  64. package/esm/aaveV4/index.d.ts +4 -3
  65. package/esm/aaveV4/index.js +20 -17
  66. package/esm/aaveV4/merkl.d.ts +10 -2
  67. package/esm/aaveV4/merkl.js +16 -7
  68. package/esm/claiming/aaveV3.d.ts +2 -2
  69. package/esm/claiming/aaveV3.js +5 -4
  70. package/esm/claiming/king.d.ts +2 -2
  71. package/esm/claiming/king.js +3 -2
  72. package/esm/claiming/spark.d.ts +3 -3
  73. package/esm/claiming/spark.js +8 -7
  74. package/esm/claiming/uniswap.d.ts +2 -2
  75. package/esm/claiming/uniswap.js +3 -2
  76. package/esm/compoundV2/index.d.ts +4 -4
  77. package/esm/compoundV2/index.js +9 -9
  78. package/esm/compoundV3/index.d.ts +5 -4
  79. package/esm/compoundV3/index.js +19 -15
  80. package/esm/compoundV3/merkl.d.ts +1 -1
  81. package/esm/compoundV3/merkl.js +3 -6
  82. package/esm/curveUsd/index.d.ts +5 -5
  83. package/esm/curveUsd/index.js +17 -17
  84. package/esm/fluid/index.d.ts +23 -22
  85. package/esm/fluid/index.js +76 -73
  86. package/esm/fluid/merkl.d.ts +5 -3
  87. package/esm/fluid/merkl.js +12 -7
  88. package/esm/liquity/index.d.ts +4 -4
  89. package/esm/liquity/index.js +23 -23
  90. package/esm/liquityV2/index.d.ts +10 -10
  91. package/esm/liquityV2/index.js +60 -60
  92. package/esm/llamaLend/index.d.ts +5 -5
  93. package/esm/llamaLend/index.js +13 -13
  94. package/esm/maker/index.d.ts +6 -6
  95. package/esm/maker/index.js +16 -16
  96. package/esm/morphoBlue/index.d.ts +7 -7
  97. package/esm/morphoBlue/index.js +29 -27
  98. package/esm/morphoBlue/merkl.d.ts +5 -3
  99. package/esm/morphoBlue/merkl.js +7 -9
  100. package/esm/morphoMidnight/index.d.ts +5 -5
  101. package/esm/morphoMidnight/index.js +18 -18
  102. package/esm/portfolio/customDeFiData.js +47 -42
  103. package/esm/services/merkl.d.ts +36 -2
  104. package/esm/services/merkl.js +136 -18
  105. package/esm/services/priceService.d.ts +12 -12
  106. package/esm/services/priceService.js +31 -30
  107. package/esm/services/viem.d.ts +10 -2
  108. package/esm/services/viem.js +25 -0
  109. package/esm/spark/index.d.ts +4 -4
  110. package/esm/spark/index.js +10 -10
  111. package/esm/types/merkl.d.ts +18 -0
  112. package/esm/types/portfolio.d.ts +2 -0
  113. package/esm/umbrella/index.d.ts +2 -2
  114. package/esm/umbrella/index.js +5 -4
  115. package/package.json +1 -1
  116. package/src/aaveV2/index.ts +7 -7
  117. package/src/aaveV3/index.ts +15 -11
  118. package/src/aaveV3/merkl.ts +9 -4
  119. package/src/aaveV4/index.ts +19 -16
  120. package/src/aaveV4/merkl.ts +16 -7
  121. package/src/claiming/aaveV3.ts +5 -3
  122. package/src/claiming/king.ts +6 -3
  123. package/src/claiming/spark.ts +9 -6
  124. package/src/claiming/uniswap.ts +4 -3
  125. package/src/compoundV2/index.ts +10 -9
  126. package/src/compoundV3/index.ts +20 -14
  127. package/src/compoundV3/merkl.ts +5 -4
  128. package/src/curveUsd/index.ts +19 -17
  129. package/src/fluid/index.ts +88 -70
  130. package/src/fluid/merkl.ts +12 -7
  131. package/src/liquity/index.ts +23 -23
  132. package/src/liquityV2/index.ts +64 -56
  133. package/src/llamaLend/index.ts +15 -13
  134. package/src/maker/index.ts +19 -16
  135. package/src/morphoBlue/index.ts +23 -20
  136. package/src/morphoBlue/merkl.ts +9 -6
  137. package/src/morphoMidnight/index.ts +13 -13
  138. package/src/portfolio/customDeFiData.ts +48 -41
  139. package/src/services/merkl.ts +152 -19
  140. package/src/services/priceService.ts +33 -30
  141. package/src/services/viem.ts +16 -0
  142. package/src/spark/index.ts +11 -8
  143. package/src/types/merkl.ts +20 -0
  144. package/src/types/portfolio.ts +2 -0
  145. package/src/umbrella/index.ts +6 -5
@@ -51,7 +51,7 @@ const parseVaultType = (vaultType) => {
51
51
  default: return types_1.FluidVaultType.Unknown;
52
52
  }
53
53
  };
54
- const getChainLinkPricesForTokens = (tokens, network, client) => __awaiter(void 0, void 0, void 0, function* () {
54
+ const getChainLinkPricesForTokens = (tokens_2, network_1, client_1, ...args_1) => __awaiter(void 0, [tokens_2, network_1, client_1, ...args_1], void 0, function* (tokens, network, client, blockNumber = 'latest') {
55
55
  const isMainnet = (0, utils_1.isMainnetNetwork)(network);
56
56
  const noDuplicateTokens = new Array(...new Set(tokens));
57
57
  const btcFeedContract = (0, contracts_1.BTCPriceFeedContractViem)(client, network);
@@ -106,7 +106,7 @@ const getChainLinkPricesForTokens = (tokens, network, client) => __awaiter(void
106
106
  });
107
107
  const calls = [...staticCalls, ..._calls].filter((call) => call);
108
108
  // @ts-ignore
109
- const results = yield client.multicall({ contracts: calls });
109
+ const results = yield client.multicall(Object.assign({ contracts: calls }, (0, viem_1.setViemBlockNumber)(blockNumber)));
110
110
  const ethPriceChainlink = new decimal_js_1.default(results[0].result).div(1e8).toString();
111
111
  const btcPriceChainlink = new decimal_js_1.default(results[1].result).div(1e8).toString();
112
112
  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
@@ -215,7 +215,7 @@ const getChainLinkPricesForTokens = (tokens, network, client) => __awaiter(void
215
215
  return acc;
216
216
  }, {});
217
217
  });
218
- const getTokenPriceFromChainlink = (asset, network, provider) => __awaiter(void 0, void 0, void 0, function* () {
218
+ 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') {
219
219
  if (asset.symbol === 'sUSDS') {
220
220
  return new decimal_js_1.default('105276929').div(1e8).toString();
221
221
  }
@@ -225,17 +225,17 @@ const getTokenPriceFromChainlink = (asset, network, provider) => __awaiter(void
225
225
  let loanTokenPrice;
226
226
  if (asset.symbol === 'wstETH') {
227
227
  // need to handle wstETH for l2s inside getWstETHPrice
228
- loanTokenPrice = yield (0, priceService_1.getWstETHPriceFluid)(provider, network);
228
+ loanTokenPrice = yield (0, priceService_1.getWstETHPriceFluid)(provider, network, blockNumber);
229
229
  }
230
230
  else if (isMainnet) {
231
231
  const feedRegistryContract = (0, contracts_1.FeedRegistryContractViem)(provider, common_1.NetworkNumber.Eth);
232
- loanTokenPrice = isTokenUSDA ? '100000000' : yield feedRegistryContract.read.latestAnswer([loanTokenFeedAddress, constants_1.USD_QUOTE]);
232
+ loanTokenPrice = isTokenUSDA ? '100000000' : yield feedRegistryContract.read.latestAnswer([loanTokenFeedAddress, constants_1.USD_QUOTE], (0, viem_1.setViemBlockNumber)(blockNumber));
233
233
  }
234
234
  else {
235
235
  // Currently only base network is supported
236
236
  const feedRegistryContract = (0, contracts_1.DFSFeedRegistryContractViem)(provider, network);
237
237
  try {
238
- const roundPriceData = isTokenUSDA ? [0, '100000000'] : yield feedRegistryContract.read.latestRoundData([loanTokenFeedAddress, constants_1.USD_QUOTE]);
238
+ const roundPriceData = isTokenUSDA ? [0, '100000000'] : yield feedRegistryContract.read.latestRoundData([loanTokenFeedAddress, constants_1.USD_QUOTE], (0, viem_1.setViemBlockNumber)(blockNumber));
239
239
  loanTokenPrice = roundPriceData[1].toString();
240
240
  }
241
241
  catch (err) {
@@ -276,7 +276,7 @@ const getTradingApy = (poolAddress) => __awaiter(void 0, void 0, void 0, functio
276
276
  const data = yield res.json();
277
277
  return new decimal_js_1.default(data.tradingApy).div(100).toString();
278
278
  });
279
- 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) {
279
+ 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') {
280
280
  var _a, _b;
281
281
  const collAssetContract = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
282
282
  const collAsset = (0, tokens_1.getAssetInfo)((0, utils_1.getNativeAssetFromWrapped)(collAssetContract.symbol), network);
@@ -292,7 +292,7 @@ const parseT1MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
292
292
  debtPriceParsed = tokenPrices[debtAsset.symbol] || '0';
293
293
  }
294
294
  else {
295
- debtPriceParsed = yield getTokenPriceFromChainlink(debtAssetContract, network, provider);
295
+ debtPriceParsed = yield getTokenPriceFromChainlink(debtAssetContract, network, provider, blockNumber);
296
296
  }
297
297
  const collAssetData = {
298
298
  symbol: collAsset.symbol,
@@ -388,7 +388,7 @@ const parseT1MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
388
388
  marketData,
389
389
  };
390
390
  });
391
- 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) {
391
+ 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') {
392
392
  var _a, _b, _c;
393
393
  const collAsset0Contract = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
394
394
  const collAsset0 = (0, tokens_1.getAssetInfo)((0, utils_1.getNativeAssetFromWrapped)(collAsset0Contract.symbol), network);
@@ -405,7 +405,7 @@ const parseT2MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
405
405
  prices = tokenPrices;
406
406
  }
407
407
  else {
408
- prices = yield getChainLinkPricesForTokens([collAsset0Contract.address, collAsset1Contract.address, debtAssetContract.address], network, provider);
408
+ prices = yield getChainLinkPricesForTokens([collAsset0Contract.address, collAsset1Contract.address, debtAssetContract.address], network, provider, blockNumber);
409
409
  }
410
410
  const { supplyDexFee, totalSupplyShares, supplyRate1, totalSupplyToken1, token0PerSupplyShare, token1PerSupplyShare, totalSupplyToken0, maxSupplyShares, withdrawableToken0, withdrawable0, withdrawableToken1, withdrawable1, supplyRate0, utilizationSupply0, utilizationSupply1, withdrawableShares, reservesSupplyToken0, reservesSupplyToken1, } = (0, fluidHelpers_1.parseDexSupplyData)(data.dexSupplyData, collAsset0.symbol, collAsset1.symbol);
411
411
  const collFirstAssetData = {
@@ -544,7 +544,7 @@ const parseT2MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
544
544
  marketData,
545
545
  };
546
546
  });
547
- 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) {
547
+ 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') {
548
548
  var _a, _b, _c, _d;
549
549
  const collAssetContract = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
550
550
  const collAsset = (0, tokens_1.getAssetInfo)((0, utils_1.getNativeAssetFromWrapped)(collAssetContract.symbol), network);
@@ -562,7 +562,7 @@ const parseT3MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
562
562
  prices = tokenPrices;
563
563
  }
564
564
  else {
565
- prices = yield getChainLinkPricesForTokens([collAssetContract.address, debtAsset0Contract.address, debtAsset1Contract.address], network, provider);
565
+ prices = yield getChainLinkPricesForTokens([collAssetContract.address, debtAsset0Contract.address, debtAsset1Contract.address], network, provider, blockNumber);
566
566
  }
567
567
  const supplyRate = new decimal_js_1.default(data.supplyRateVault).div(100).toString();
568
568
  const collAssetData = {
@@ -696,7 +696,7 @@ const parseT3MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
696
696
  marketData,
697
697
  };
698
698
  });
699
- 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) {
699
+ 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') {
700
700
  var _a, _b, _c, _d;
701
701
  const collAsset0Contract = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
702
702
  const collAsset0 = (0, tokens_1.getAssetInfo)((0, utils_1.getNativeAssetFromWrapped)(collAsset0Contract.symbol), network);
@@ -716,7 +716,7 @@ const parseT4MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
716
716
  prices = tokenPrices;
717
717
  }
718
718
  else {
719
- prices = yield getChainLinkPricesForTokens([collAsset0Contract.address, collAsset1Contract.address, debtAsset0Contract.address, debtAsset1Contract.address], network, provider);
719
+ prices = yield getChainLinkPricesForTokens([collAsset0Contract.address, collAsset1Contract.address, debtAsset0Contract.address, debtAsset1Contract.address], network, provider, blockNumber);
720
720
  }
721
721
  const { supplyDexFee, totalSupplyShares, supplyRate1, token0PerSupplyShare, token1PerSupplyShare, totalSupplyToken0, totalSupplyToken1, maxSupplyShares, withdrawableToken0, withdrawable0, withdrawableToken1, withdrawable1, supplyRate0, utilizationSupply0, utilizationSupply1, withdrawableShares, reservesSupplyToken0, reservesSupplyToken1, } = (0, fluidHelpers_1.parseDexSupplyData)(data.dexSupplyData, collAsset0.symbol, collAsset1.symbol);
722
722
  const { borrowableShares, maxBorrowShares, borrowDexFee, utilizationBorrow0, utilizationBorrow1, borrowable0, borrowable1, borrowRate0, borrowRate1, totalBorrowShares, token0PerBorrowShare, token1PerBorrowShare, borrowableToken0, borrowableToken1, totalBorrowToken0, totalBorrowToken1, quoteTokensPerShare, reservesBorrowToken0, reservesBorrowToken1, } = (0, fluidHelpers_1.parseDexBorrowData)(data.dexBorrowData, debtAsset0.symbol, debtAsset1.symbol);
@@ -893,7 +893,7 @@ const parseT4MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
893
893
  marketData,
894
894
  };
895
895
  });
896
- 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) {
896
+ 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') {
897
897
  const marketInfo = (0, markets_1.getFluidMarketInfoById)(+(data.vaultId.toString()), network);
898
898
  if (!marketInfo) {
899
899
  console.error(`Fluid market with address ${data.vault} not supported.`);
@@ -902,13 +902,13 @@ const parseMarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(
902
902
  const vaultType = parseVaultType(+(data.vaultType.toString()));
903
903
  switch (vaultType) {
904
904
  case types_1.FluidVaultType.T1:
905
- return parseT1MarketData(provider, data, network, tokenPrices);
905
+ return parseT1MarketData(provider, data, network, tokenPrices, blockNumber);
906
906
  case types_1.FluidVaultType.T2:
907
- return parseT2MarketData(provider, data, network, tokenPrices);
907
+ return parseT2MarketData(provider, data, network, tokenPrices, blockNumber);
908
908
  case types_1.FluidVaultType.T3:
909
- return parseT3MarketData(provider, data, network, tokenPrices);
909
+ return parseT3MarketData(provider, data, network, tokenPrices, blockNumber);
910
910
  case types_1.FluidVaultType.T4:
911
- return parseT4MarketData(provider, data, network, tokenPrices);
911
+ return parseT4MarketData(provider, data, network, tokenPrices, blockNumber);
912
912
  default:
913
913
  throw new Error(`Unknown vault type: ${vaultType}`);
914
914
  }
@@ -1113,41 +1113,41 @@ const parseUserData = (userPositionData, vaultData) => {
1113
1113
  throw new Error(`Unknown vault type: ${vaultType}`);
1114
1114
  }
1115
1115
  };
1116
- const _getFluidMarketData = (provider, network, market) => __awaiter(void 0, void 0, void 0, function* () {
1116
+ 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') {
1117
1117
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1118
1118
  const [data, merklCampaigns] = yield Promise.all([
1119
- view.read.getVaultData([market.marketAddress]),
1119
+ view.read.getVaultData([market.marketAddress], (0, viem_1.setViemBlockNumber)(blockNumber)),
1120
1120
  (0, merkl_1.getFluidMerklCampaigns)(network),
1121
1121
  ]);
1122
- const marketData = yield parseMarketData(provider, data, network);
1122
+ const marketData = yield parseMarketData(provider, data, network, null, blockNumber);
1123
1123
  return marketData ? (0, merkl_1.attachFluidMerklIncentives)(marketData, merklCampaigns) : marketData;
1124
1124
  });
1125
1125
  exports._getFluidMarketData = _getFluidMarketData;
1126
- const getFluidMarketData = (provider, network, market) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getFluidMarketData)((0, viem_1.getViemProvider)(provider, network), network, market); });
1126
+ 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 (0, exports._getFluidMarketData)((0, viem_1.getViemProvider)(provider, network), network, market, blockNumber); });
1127
1127
  exports.getFluidMarketData = getFluidMarketData;
1128
- const _getFluidVaultIdsForUser = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () {
1128
+ 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') {
1129
1129
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1130
- return (yield view.read.getUserNftIds([user])).map((item) => item.toString());
1130
+ return (yield view.read.getUserNftIds([user], (0, viem_1.setViemBlockNumber)(blockNumber))).map((item) => item.toString());
1131
1131
  });
1132
1132
  exports._getFluidVaultIdsForUser = _getFluidVaultIdsForUser;
1133
- const getFluidVaultIdsForUser = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getFluidVaultIdsForUser)((0, viem_1.getViemProvider)(provider, network), network, user); });
1133
+ 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 (0, exports._getFluidVaultIdsForUser)((0, viem_1.getViemProvider)(provider, network), network, user, blockNumber); });
1134
1134
  exports.getFluidVaultIdsForUser = getFluidVaultIdsForUser;
1135
- const _getFluidPosition = (provider, network, vaultId, extractedState) => __awaiter(void 0, void 0, void 0, function* () {
1135
+ 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') {
1136
1136
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1137
- const data = yield view.read.getPositionByNftId([BigInt(vaultId)]);
1137
+ const data = yield view.read.getPositionByNftId([BigInt(vaultId)], (0, viem_1.setViemBlockNumber)(blockNumber));
1138
1138
  const userPositionData = data[0];
1139
1139
  return parseUserData(userPositionData, extractedState);
1140
1140
  });
1141
1141
  exports._getFluidPosition = _getFluidPosition;
1142
- const getFluidPosition = (provider, network, vaultId, extractedState) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getFluidPosition)((0, viem_1.getViemProvider)(provider, network), network, vaultId, extractedState); });
1142
+ 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 (0, exports._getFluidPosition)((0, viem_1.getViemProvider)(provider, network), network, vaultId, extractedState, blockNumber); });
1143
1143
  exports.getFluidPosition = getFluidPosition;
1144
- const _getFluidPositionWithMarket = (provider, network, vaultId) => __awaiter(void 0, void 0, void 0, function* () {
1144
+ 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') {
1145
1145
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1146
1146
  const [data, merklCampaigns] = yield Promise.all([
1147
- view.read.getPositionByNftId([BigInt(vaultId)]),
1147
+ view.read.getPositionByNftId([BigInt(vaultId)], (0, viem_1.setViemBlockNumber)(blockNumber)),
1148
1148
  (0, merkl_1.getFluidMerklCampaigns)(network),
1149
1149
  ]);
1150
- const parsedMarketData = yield parseMarketData(provider, data[1], network);
1150
+ const parsedMarketData = yield parseMarketData(provider, data[1], network, null, blockNumber);
1151
1151
  if (!parsedMarketData) {
1152
1152
  return;
1153
1153
  }
@@ -1159,29 +1159,29 @@ const _getFluidPositionWithMarket = (provider, network, vaultId) => __awaiter(vo
1159
1159
  };
1160
1160
  });
1161
1161
  exports._getFluidPositionWithMarket = _getFluidPositionWithMarket;
1162
- const getFluidPositionWithMarket = (provider, network, vaultId) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getFluidPositionWithMarket)((0, viem_1.getViemProvider)(provider, network), network, vaultId); });
1162
+ 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 (0, exports._getFluidPositionWithMarket)((0, viem_1.getViemProvider)(provider, network), network, vaultId, blockNumber); });
1163
1163
  exports.getFluidPositionWithMarket = getFluidPositionWithMarket;
1164
- const _getAllFluidMarketDataChunked = (network, provider) => __awaiter(void 0, void 0, void 0, function* () {
1164
+ const _getAllFluidMarketDataChunked = (network_1, provider_1, ...args_1) => __awaiter(void 0, [network_1, provider_1, ...args_1], void 0, function* (network, provider, blockNumber = 'latest') {
1165
1165
  const versions = (0, markets_1.getFluidVersionsDataForNetwork)(network);
1166
1166
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1167
1167
  const [data, merklCampaigns] = yield Promise.all([
1168
- Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress]))),
1168
+ Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress], (0, viem_1.setViemBlockNumber)(blockNumber)))),
1169
1169
  (0, merkl_1.getFluidMerklCampaigns)(network),
1170
1170
  ]);
1171
1171
  return Promise.all(data.map((item) => __awaiter(void 0, void 0, void 0, function* () {
1172
- const marketData = yield parseMarketData(provider, item, network);
1172
+ const marketData = yield parseMarketData(provider, item, network, null, blockNumber);
1173
1173
  return marketData ? (0, merkl_1.attachFluidMerklIncentives)(marketData, merklCampaigns) : marketData;
1174
1174
  })));
1175
1175
  });
1176
1176
  exports._getAllFluidMarketDataChunked = _getAllFluidMarketDataChunked;
1177
- const getAllFluidMarketDataChunked = (network, provider) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getAllFluidMarketDataChunked)(network, (0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } })); });
1177
+ 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 (0, exports._getAllFluidMarketDataChunked)(network, (0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } }), blockNumber); });
1178
1178
  exports.getAllFluidMarketDataChunked = getAllFluidMarketDataChunked;
1179
- const _getFluidTokenData = (provider, network, token) => __awaiter(void 0, void 0, void 0, function* () {
1179
+ 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') {
1180
1180
  var _a, _b;
1181
1181
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1182
1182
  const fTokenAddress = (0, markets_1.getFTokenAddress)(token, network);
1183
1183
  const [data, rewardsApiResponse,] = yield Promise.all([
1184
- yield view.read.getFTokenData([fTokenAddress]),
1184
+ yield view.read.getFTokenData([fTokenAddress], (0, viem_1.setViemBlockNumber)(blockNumber)),
1185
1185
  fetch(`https://api.fluid.instadapp.io/v2/lending/${network}/tokens/${fTokenAddress}`),
1186
1186
  ]);
1187
1187
  let rewardsData = { rewards: [] };
@@ -1209,7 +1209,7 @@ const _getFluidTokenData = (provider, network, token) => __awaiter(void 0, void
1209
1209
  };
1210
1210
  });
1211
1211
  exports._getFluidTokenData = _getFluidTokenData;
1212
- const getFluidTokenData = (provider, network, token) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getFluidTokenData)((0, viem_1.getViemProvider)(provider, network), network, token); });
1212
+ 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 (0, exports._getFluidTokenData)((0, viem_1.getViemProvider)(provider, network), network, token, blockNumber); });
1213
1213
  exports.getFluidTokenData = getFluidTokenData;
1214
1214
  const parseFDepositTokenData = (fTokenData, userPosition, apiData, fTokenAddress) => {
1215
1215
  var _a, _b;
@@ -1232,11 +1232,11 @@ const parseFDepositTokenData = (fTokenData, userPosition, apiData, fTokenAddress
1232
1232
  depositedShares: (0, utils_1.getEthAmountForDecimals)(userPosition.fTokenShares.toString(), decimals),
1233
1233
  };
1234
1234
  };
1235
- const _getFluidDepositData = (provider, network, token, address) => __awaiter(void 0, void 0, void 0, function* () {
1235
+ 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') {
1236
1236
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1237
1237
  const fTokenAddress = (0, markets_1.getFTokenAddress)(token, network);
1238
1238
  const [[userPosition, fTokenData], rewardsApiResponse,] = yield Promise.all([
1239
- view.read.getUserEarnPositionWithFToken([fTokenAddress, address]),
1239
+ view.read.getUserEarnPositionWithFToken([fTokenAddress, address], (0, viem_1.setViemBlockNumber)(blockNumber)),
1240
1240
  fetch(`https://api.fluid.instadapp.io/v2/lending/${network}/tokens/${fTokenAddress}`),
1241
1241
  ]);
1242
1242
  let rewardsData = { rewards: [] };
@@ -1249,12 +1249,12 @@ const _getFluidDepositData = (provider, network, token, address) => __awaiter(vo
1249
1249
  return parseFDepositTokenData(fTokenData, userPosition, rewardsData, fTokenAddress);
1250
1250
  });
1251
1251
  exports._getFluidDepositData = _getFluidDepositData;
1252
- const getFluidDepositData = (provider, network, token, address) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getFluidDepositData)((0, viem_1.getViemProvider)(provider, network), network, token, address); });
1252
+ 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 (0, exports._getFluidDepositData)((0, viem_1.getViemProvider)(provider, network), network, token, address, blockNumber); });
1253
1253
  exports.getFluidDepositData = getFluidDepositData;
1254
- const _getAllUserEarnPositionsWithFTokens = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () {
1254
+ 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') {
1255
1255
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1256
1256
  const [[userPositions, fTokensData], rewardsApiResponse,] = yield Promise.all([
1257
- view.read.getAllUserEarnPositionsWithFTokens([user]),
1257
+ view.read.getAllUserEarnPositionsWithFTokens([user], (0, viem_1.setViemBlockNumber)(blockNumber)),
1258
1258
  fetch(`https://api.fluid.instadapp.io/v2/lending/${network}/tokens`),
1259
1259
  ]);
1260
1260
  let rewardsData = {
@@ -1279,15 +1279,15 @@ const _getAllUserEarnPositionsWithFTokens = (provider, network, user) => __await
1279
1279
  return parsedRes;
1280
1280
  });
1281
1281
  exports._getAllUserEarnPositionsWithFTokens = _getAllUserEarnPositionsWithFTokens;
1282
- const getAllUserEarnPositionsWithFTokens = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getAllUserEarnPositionsWithFTokens)((0, viem_1.getViemProvider)(provider, network), network, user); });
1282
+ 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 (0, exports._getAllUserEarnPositionsWithFTokens)((0, viem_1.getViemProvider)(provider, network), network, user, blockNumber); });
1283
1283
  exports.getAllUserEarnPositionsWithFTokens = getAllUserEarnPositionsWithFTokens;
1284
- const _getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () {
1284
+ 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') {
1285
1285
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1286
1286
  const [data, merklCampaigns] = yield Promise.all([
1287
- view.read.getUserPositions([user]),
1287
+ view.read.getUserPositions([user], (0, viem_1.setViemBlockNumber)(blockNumber)),
1288
1288
  (0, merkl_1.getFluidMerklCampaigns)(network),
1289
1289
  ]);
1290
- const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network); }))))
1290
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, null, blockNumber); }))))
1291
1291
  .map(marketData => (marketData ? (0, merkl_1.attachFluidMerklIncentives)(marketData, merklCampaigns) : marketData));
1292
1292
  const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1293
1293
  return parsedMarketData.map((market, i) => ({
@@ -1296,40 +1296,40 @@ const _getUserPositions = (provider, network, user) => __awaiter(void 0, void 0,
1296
1296
  })).filter(md => md.marketData !== undefined);
1297
1297
  });
1298
1298
  exports._getUserPositions = _getUserPositions;
1299
- const getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getUserPositions)((0, viem_1.getViemProvider)(provider, network), network, user); });
1299
+ 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 (0, exports._getUserPositions)((0, viem_1.getViemProvider)(provider, network), network, user, blockNumber); });
1300
1300
  exports.getUserPositions = getUserPositions;
1301
- const getTokenPricePortfolio = (token, provider, network) => __awaiter(void 0, void 0, void 0, function* () {
1301
+ 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') {
1302
1302
  if (token === 'ETH') {
1303
1303
  const ethFeedContract = (0, contracts_1.ETHPriceFeedContractViem)(provider, network);
1304
- return ethFeedContract.read.latestAnswer();
1304
+ return ethFeedContract.read.latestAnswer((0, viem_1.setViemBlockNumber)(blockNumber));
1305
1305
  }
1306
1306
  if (token === 'WBTC') {
1307
1307
  const wbtcFeedContract = (0, contracts_1.BTCPriceFeedContractViem)(provider, network);
1308
- return wbtcFeedContract.read.latestAnswer();
1308
+ return wbtcFeedContract.read.latestAnswer((0, viem_1.setViemBlockNumber)(blockNumber));
1309
1309
  }
1310
1310
  if (token === 'wstETH') {
1311
- return (0, priceService_1.getWstETHPrice)(provider, network);
1311
+ return (0, priceService_1.getWstETHPrice)(provider, network, blockNumber);
1312
1312
  }
1313
1313
  if (token === 'weETH' && network !== common_1.NetworkNumber.Plasma) {
1314
- return (0, priceService_1.getWeETHPrice)(provider, network);
1314
+ return (0, priceService_1.getWeETHPrice)(provider, network, blockNumber);
1315
1315
  }
1316
1316
  if (token === 'wrsETH') {
1317
- return (0, priceService_1.getWsrETHPrice)(provider, network);
1317
+ return (0, priceService_1.getWsrETHPrice)(provider, network, blockNumber);
1318
1318
  }
1319
1319
  if (token === 'syrupUSDT') {
1320
- return (0, priceService_1.getSyrupUSDTPrice)(provider, network);
1320
+ return (0, priceService_1.getSyrupUSDTPrice)(provider, network, blockNumber);
1321
1321
  }
1322
1322
  if (token === 'wstUSR') {
1323
- return (0, priceService_1.getWstUSRPrice)(provider, network);
1323
+ return (0, priceService_1.getWstUSRPrice)(provider, network, blockNumber);
1324
1324
  }
1325
1325
  const isMainnet = (0, utils_1.isMainnetNetwork)(network);
1326
1326
  const chainLinkFeedAddress = (0, priceService_1.getChainlinkAssetAddress)(token, network);
1327
1327
  if (isMainnet) {
1328
1328
  const feedRegistryContract = (0, contracts_1.FeedRegistryContractViem)(provider, common_1.NetworkNumber.Eth);
1329
- return feedRegistryContract.read.latestAnswer([chainLinkFeedAddress, constants_1.USD_QUOTE]);
1329
+ return feedRegistryContract.read.latestAnswer([chainLinkFeedAddress, constants_1.USD_QUOTE], (0, viem_1.setViemBlockNumber)(blockNumber));
1330
1330
  }
1331
1331
  const feedRegistryContract = (0, contracts_1.DFSFeedRegistryContractViem)(provider, network);
1332
- return feedRegistryContract.read.latestRoundData([chainLinkFeedAddress, constants_1.USD_QUOTE]);
1332
+ return feedRegistryContract.read.latestRoundData([chainLinkFeedAddress, constants_1.USD_QUOTE], (0, viem_1.setViemBlockNumber)(blockNumber));
1333
1333
  });
1334
1334
  const tokensWithoutChainlinkPrices = ['sUSDS', 'USDA', 'ezETH', 'rsETH', 'weETHs', 'LBTC'];
1335
1335
  const handleTokenWithoutChainlinkPrice = (token, prices) => {
@@ -1356,12 +1356,12 @@ const handleTokenWithoutChainlinkPrice = (token, prices) => {
1356
1356
  }
1357
1357
  return '0';
1358
1358
  };
1359
- const getTokensPricesForPortfolio = (tokens, provider, network) => __awaiter(void 0, void 0, void 0, function* () {
1359
+ const getTokensPricesForPortfolio = (tokens_2, provider_1, network_1, ...args_1) => __awaiter(void 0, [tokens_2, provider_1, network_1, ...args_1], void 0, function* (tokens, provider, network, blockNumber = 'latest') {
1360
1360
  const tokensWithChainlinkPrices = tokens.filter((token) => !tokensWithoutChainlinkPrices.includes(token));
1361
1361
  const pricesFromChainlink = {};
1362
1362
  yield Promise.all(tokensWithChainlinkPrices.map((token) => __awaiter(void 0, void 0, void 0, function* () {
1363
1363
  try {
1364
- const price = yield getTokenPricePortfolio(token, provider, network);
1364
+ const price = yield getTokenPricePortfolio(token, provider, network, blockNumber);
1365
1365
  if (typeof price === 'string')
1366
1366
  pricesFromChainlink[token] = price;
1367
1367
  else if (typeof price === 'bigint')
@@ -1380,9 +1380,9 @@ const getTokensPricesForPortfolio = (tokens, provider, network) => __awaiter(voi
1380
1380
  });
1381
1381
  return pricesFromChainlink;
1382
1382
  });
1383
- const _getUserPositionsPortfolio = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () {
1383
+ 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') {
1384
1384
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1385
- const data = yield view.read.getUserPositions([user]);
1385
+ const data = yield view.read.getUserPositions([user], (0, viem_1.setViemBlockNumber)(blockNumber));
1386
1386
  const tokens = Array.from(new Set(data[1].map((vaultData) => {
1387
1387
  const vaultTokens = [(0, tokens_1.getAssetInfoByAddress)(vaultData.supplyToken0, network).symbol, (0, tokens_1.getAssetInfoByAddress)(vaultData.borrowToken0, network).symbol];
1388
1388
  if (vaultData.supplyToken1 && !(0, utils_1.compareAddresses)(constants_1.ZERO_ADDRESS, vaultData.supplyToken1))
@@ -1399,10 +1399,10 @@ const _getUserPositionsPortfolio = (provider, network, user) => __awaiter(void 0
1399
1399
  if (!tokens.includes('WBTC'))
1400
1400
  tokens.push('WBTC');
1401
1401
  const [tokenPrices, merklCampaigns] = yield Promise.all([
1402
- getTokensPricesForPortfolio(tokens, provider, network),
1402
+ getTokensPricesForPortfolio(tokens, provider, network, blockNumber),
1403
1403
  (0, merkl_1.getFluidMerklCampaigns)(network),
1404
1404
  ]);
1405
- const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); }))))
1405
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices, blockNumber); }))))
1406
1406
  .map(marketData => (marketData ? (0, merkl_1.attachFluidMerklIncentives)(marketData, merklCampaigns) : marketData));
1407
1407
  const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1408
1408
  return parsedMarketData.map((market, i) => ({
@@ -1411,12 +1411,13 @@ const _getUserPositionsPortfolio = (provider, network, user) => __awaiter(void 0
1411
1411
  })).filter(md => md.marketData !== undefined);
1412
1412
  });
1413
1413
  exports._getUserPositionsPortfolio = _getUserPositionsPortfolio;
1414
- const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () {
1414
+ /** `blockTimestamp` (unix seconds) is the historical block's timestamp when already known; otherwise it is read from the block. */
1415
+ 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) {
1415
1416
  const versions = (0, markets_1.getFluidVersionsDataForNetwork)(network);
1416
1417
  if (versions.length === 0)
1417
1418
  return {};
1418
1419
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1419
- const vaultsData = yield Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress])));
1420
+ const vaultsData = yield Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress], (0, viem_1.setViemBlockNumber)(blockNumber))));
1420
1421
  const tokens = Array.from(new Set(vaultsData.map((vaultData) => {
1421
1422
  const vaultTokens = [(0, tokens_1.getAssetInfoByAddress)(vaultData.supplyToken0, network).symbol, (0, tokens_1.getAssetInfoByAddress)(vaultData.borrowToken0, network).symbol];
1422
1423
  if (vaultData.supplyToken1 && !(0, utils_1.compareAddresses)(constants_1.ZERO_ADDRESS, vaultData.supplyToken1))
@@ -1431,10 +1432,12 @@ const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0,
1431
1432
  if (!tokens.includes('WBTC'))
1432
1433
  tokens.push('WBTC');
1433
1434
  const [tokenPrices, merklCampaigns] = yield Promise.all([
1434
- getTokensPricesForPortfolio(tokens, provider, network),
1435
- (0, merkl_1.getFluidMerklCampaigns)(network),
1435
+ getTokensPricesForPortfolio(tokens, provider, network, blockNumber),
1436
+ // Merkl rewards are keyed by time: a historical block resolves to its timestamp first (one RPC
1437
+ // call unless given, none for 'latest') so the rewards in force at that moment are attached.
1438
+ (0, viem_1.getBlockTimestamp)(provider, blockNumber, blockTimestamp).then((asOfTimestamp) => (0, merkl_1.getFluidMerklCampaigns)(network, asOfTimestamp)),
1436
1439
  ]);
1437
- const parsedMarketsData = yield Promise.all(vaultsData.map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); })));
1440
+ const parsedMarketsData = yield Promise.all(vaultsData.map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices, blockNumber); })));
1438
1441
  const marketsData = {};
1439
1442
  parsedMarketsData.forEach((marketData, i) => {
1440
1443
  if (!marketData)
@@ -1444,5 +1447,5 @@ const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0,
1444
1447
  return marketsData;
1445
1448
  });
1446
1449
  exports._getAllFluidMarketDataPortfolio = _getAllFluidMarketDataPortfolio;
1447
- const getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getAllFluidMarketDataPortfolio)((0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } }), network); });
1450
+ 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 (0, exports._getAllFluidMarketDataPortfolio)((0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } }), network, blockNumber, blockTimestamp); });
1448
1451
  exports.getAllFluidMarketDataPortfolio = getAllFluidMarketDataPortfolio;
@@ -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. Never throws —
24
- * on any failure it returns an empty map, so Merkl being down can't break market data.
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
@@ -70,23 +70,28 @@ const buildFluidMerklRewardMap = (opportunities, chainId) => {
70
70
  };
71
71
  exports.buildFluidMerklRewardMap = buildFluidMerklRewardMap;
72
72
  /**
73
- * Fetches live vault-scoped Fluid campaigns for the chain, keyed by vault address. Never throws —
74
- * on any failure it returns an empty map, so Merkl being down can't break market data.
73
+ * Fetches live vault-scoped Fluid campaigns for the chain, keyed by vault address. With
74
+ * `asOfTimestamp` (unix seconds) the campaigns and APRs are the ones Merkl had at that moment
75
+ * instead. Never throws — on any failure it returns an empty map, so Merkl being down can't break
76
+ * market data.
75
77
  */
76
- exports.getFluidMerklCampaigns = (0, memoizee_1.default)((chainId) => __awaiter(void 0, void 0, void 0, function* () {
78
+ exports.getFluidMerklCampaigns = (0, memoizee_1.default)((chainId, asOfTimestamp) => __awaiter(void 0, void 0, void 0, function* () {
77
79
  try {
78
- const opportunities = yield (0, merkl_1.fetchAllMerklOpportunities)({
80
+ const opportunities = yield (0, merkl_1.fetchMerklOpportunities)({
79
81
  mainProtocolId: 'fluid',
82
+ chainId: chainId.toString(),
80
83
  type: Object.values(FluidMerklOpportunityType).join(','),
81
84
  status: types_1.OpportunityStatus.LIVE,
82
- });
85
+ }, asOfTimestamp);
83
86
  return (0, exports.buildFluidMerklRewardMap)(opportunities, chainId);
84
87
  }
85
88
  catch (e) {
86
89
  console.error('Failed to fetch Fluid Merkl campaigns', e);
87
90
  return {};
88
91
  }
89
- }), { promise: true, maxAge: 60 * 1000 });
92
+ // memoizee keys on the declared arity, which excludes optional params — `length: 2` keeps the
93
+ // timestamp in the cache key so a historical lookup never serves (or is served by) the live one
94
+ }), { promise: true, maxAge: 60 * 1000, length: 2 });
90
95
  /**
91
96
  * Appends the vault's Merkl campaigns to its assets' incentive arrays — supply rewards on every
92
97
  * suppliable asset and borrow rewards on every borrowable one. Smart collateral/debt vaults hold
@@ -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;
@@ -48,34 +48,34 @@ const _getLiquityAccountBalances = (provider, network, block, addressMapping, ad
48
48
  exports._getLiquityAccountBalances = _getLiquityAccountBalances;
49
49
  const getLiquityAccountBalances = (provider, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getLiquityAccountBalances)((0, viem_1.getViemProvider)(provider, network), network, block, addressMapping, address); });
50
50
  exports.getLiquityAccountBalances = getLiquityAccountBalances;
51
- 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) {
52
- const res = yield viewContract.read.getDebtInFront([address, accumulatedSum, iterations]);
51
+ 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') {
52
+ const res = yield viewContract.read.getDebtInFront([address, accumulatedSum, iterations], (0, viem_1.setViemBlockNumber)(blockNumber));
53
53
  const debt = res[1].toString();
54
54
  const next = res[0];
55
55
  if (next === constants_1.ZERO_ADDRESS)
56
56
  return (0, tokens_1.assetAmountInEth)(debt, 'LUSD');
57
- return _getDebtInFront(viewContract, next, debt, iterations);
57
+ return _getDebtInFront(viewContract, next, debt, iterations, blockNumber);
58
58
  });
59
- const getDebtInFront = (provider, address) => __awaiter(void 0, void 0, void 0, function* () {
59
+ const getDebtInFront = (provider_1, address_1, ...args_1) => __awaiter(void 0, [provider_1, address_1, ...args_1], void 0, function* (provider, address, blockNumber = 'latest') {
60
60
  const client = (0, viem_1.getViemProvider)(provider, common_1.NetworkNumber.Eth);
61
61
  const viewContract = (0, contracts_1.LiquityViewContractViem)(client, common_1.NetworkNumber.Eth);
62
- return _getDebtInFront(viewContract, address);
62
+ return _getDebtInFront(viewContract, address, '0', 2000, blockNumber);
63
63
  });
64
64
  exports.getDebtInFront = getDebtInFront;
65
- const _getLiquityTroveInfo = (provider, network, address) => __awaiter(void 0, void 0, void 0, function* () {
65
+ 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') {
66
66
  const viewContract = (0, contracts_1.LiquityViewContractViem)(provider, network);
67
67
  const collSurplusPoolContract = (0, contracts_1.LiquityCollSurplusPoolContractViem)(provider, network);
68
68
  const troveManagerContract = (0, contracts_1.LiquityTroveManagerContractViem)(provider, network);
69
69
  const priceFeedContract = (0, contracts_1.LiquityPriceFeedContractViem)(provider, network);
70
70
  const activePoolContract = (0, contracts_1.LiquityActivePoolContractViem)(provider, network);
71
71
  const [troveInfo, collSurplusInfo, borrowingRateWithDecay, assetPrice, totalETH, totalLUSD, debtInFront,] = yield Promise.all([
72
- viewContract.read.getTroveInfo([address]),
73
- collSurplusPoolContract.read.getCollateral([address]),
74
- troveManagerContract.read.getBorrowingRateWithDecay(),
75
- priceFeedContract.read.fetchPrice(),
76
- activePoolContract.read.getETH(),
77
- activePoolContract.read.getLUSDDebt(),
78
- _getDebtInFront(viewContract, address),
72
+ viewContract.read.getTroveInfo([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
73
+ collSurplusPoolContract.read.getCollateral([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
74
+ troveManagerContract.read.getBorrowingRateWithDecay((0, viem_1.setViemBlockNumber)(blockNumber)),
75
+ priceFeedContract.read.fetchPrice((0, viem_1.setViemBlockNumber)(blockNumber)),
76
+ activePoolContract.read.getETH((0, viem_1.setViemBlockNumber)(blockNumber)),
77
+ activePoolContract.read.getLUSDDebt((0, viem_1.setViemBlockNumber)(blockNumber)),
78
+ _getDebtInFront(viewContract, address, '0', 2000, blockNumber),
79
79
  ]);
80
80
  const recoveryMode = troveInfo[6];
81
81
  const minCollateralRatio = recoveryMode ? exports.LIQUITY_RECOVERY_MODE_RATIO : exports.LIQUITY_NORMAL_MODE_RATIO;
@@ -110,20 +110,20 @@ const _getLiquityTroveInfo = (provider, network, address) => __awaiter(void 0, v
110
110
  return payload;
111
111
  });
112
112
  exports._getLiquityTroveInfo = _getLiquityTroveInfo;
113
- const getLiquityTroveInfo = (provider, network, address) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getLiquityTroveInfo)((0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } }), network, address); });
113
+ 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 (0, exports._getLiquityTroveInfo)((0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } }), network, address, blockNumber); });
114
114
  exports.getLiquityTroveInfo = getLiquityTroveInfo;
115
- const getLiquityStakingData = (provider, network, address) => __awaiter(void 0, void 0, void 0, function* () {
115
+ 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') {
116
116
  const lqtyStakingView = (0, contracts_1.LiquityLQTYStakingViem)(provider, network);
117
117
  const stabilityPoolView = (0, contracts_1.LiquityStabilityPoolViem)(provider, network);
118
118
  const [stakes, pendingETHGain, pendingLUSDGain, totalLQTYStakes, stabilityPoolETHGain, stabilityPoolLQTYGain, compoundedLUSDDeposit, totalLUSDDeposits,] = yield Promise.all([
119
- lqtyStakingView.read.stakes([address]),
120
- lqtyStakingView.read.getPendingETHGain([address]),
121
- lqtyStakingView.read.getPendingLUSDGain([address]),
122
- lqtyStakingView.read.totalLQTYStaked(),
123
- stabilityPoolView.read.getDepositorETHGain([address]),
124
- stabilityPoolView.read.getDepositorLQTYGain([address]),
125
- stabilityPoolView.read.getCompoundedLUSDDeposit([address]),
126
- stabilityPoolView.read.getTotalLUSDDeposits(),
119
+ lqtyStakingView.read.stakes([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
120
+ lqtyStakingView.read.getPendingETHGain([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
121
+ lqtyStakingView.read.getPendingLUSDGain([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
122
+ lqtyStakingView.read.totalLQTYStaked((0, viem_1.setViemBlockNumber)(blockNumber)),
123
+ stabilityPoolView.read.getDepositorETHGain([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
124
+ stabilityPoolView.read.getDepositorLQTYGain([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
125
+ stabilityPoolView.read.getCompoundedLUSDDeposit([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
126
+ stabilityPoolView.read.getTotalLUSDDeposits((0, viem_1.setViemBlockNumber)(blockNumber)),
127
127
  ]);
128
128
  const totalLUSDDeposited = (0, utils_1.getEthAmountForDecimals)(totalLUSDDeposits, 18);
129
129
  const totalLQTYStaked = (0, utils_1.getEthAmountForDecimals)(totalLQTYStakes, 18);