@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
@@ -1,14 +1,14 @@
1
1
  import { Client } from 'viem';
2
2
  import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
3
3
  import { AaveMarketInfo, AaveV2AssetsData, AaveV2PositionData } from '../types';
4
- export declare const _getAaveV2MarketsData: (provider: Client, network: NetworkNumber, selectedMarket: AaveMarketInfo) => Promise<{
4
+ export declare const _getAaveV2MarketsData: (provider: Client, network: NetworkNumber, selectedMarket: AaveMarketInfo, blockNumber?: Blockish) => Promise<{
5
5
  assetsData: AaveV2AssetsData;
6
6
  }>;
7
- export declare const getAaveV2MarketsData: (provider: EthereumProvider, network: NetworkNumber, selectedMarket: AaveMarketInfo) => Promise<{
7
+ export declare const getAaveV2MarketsData: (provider: EthereumProvider, network: NetworkNumber, selectedMarket: AaveMarketInfo, blockNumber?: Blockish) => Promise<{
8
8
  assetsData: AaveV2AssetsData;
9
9
  }>;
10
10
  export declare const _getAaveV2AccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
11
11
  export declare const getAaveV2AccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
12
- export declare const _getAaveV2AccountData: (provider: Client, network: NetworkNumber, address: EthAddress, assetsData: AaveV2AssetsData, market: AaveMarketInfo) => Promise<AaveV2PositionData>;
13
- export declare const getAaveV2AccountData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, assetsData: AaveV2AssetsData, market: AaveMarketInfo) => Promise<AaveV2PositionData>;
12
+ export declare const _getAaveV2AccountData: (provider: Client, network: NetworkNumber, address: EthAddress, assetsData: AaveV2AssetsData, market: AaveMarketInfo, blockNumber?: Blockish) => Promise<AaveV2PositionData>;
13
+ export declare const getAaveV2AccountData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, assetsData: AaveV2AssetsData, market: AaveMarketInfo, blockNumber?: Blockish) => Promise<AaveV2PositionData>;
14
14
  export declare const getAaveV2FullPositionData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, market: AaveMarketInfo) => Promise<AaveV2PositionData>;
@@ -26,13 +26,13 @@ const aave_1 = require("../markets/aave");
26
26
  const aaveHelpers_1 = require("../helpers/aaveHelpers");
27
27
  const priceService_1 = require("../services/priceService");
28
28
  const viem_1 = require("../services/viem");
29
- const _getAaveV2MarketsData = (provider, network, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
29
+ const _getAaveV2MarketsData = (provider_1, network_1, selectedMarket_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, selectedMarket_1, ...args_1], void 0, function* (provider, network, selectedMarket, blockNumber = 'latest') {
30
30
  const _addresses = selectedMarket.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a)).address);
31
31
  const loanInfoContract = (0, contracts_1.AaveLoanInfoV2ContractViem)(provider, network);
32
32
  const marketAddress = selectedMarket.providerAddress;
33
33
  const [loanInfo, ethPrice] = yield Promise.all([
34
- loanInfoContract.read.getFullTokensInfo([marketAddress, _addresses]),
35
- (0, priceService_1.getEthPrice)(provider),
34
+ loanInfoContract.read.getFullTokensInfo([marketAddress, _addresses], (0, viem_1.setViemBlockNumber)(blockNumber)),
35
+ (0, priceService_1.getEthPrice)(provider, blockNumber),
36
36
  ]);
37
37
  const markets = loanInfo
38
38
  .map((market, i) => ({
@@ -91,7 +91,7 @@ const _getAaveV2MarketsData = (provider, network, selectedMarket) => __awaiter(v
91
91
  return { assetsData: payload };
92
92
  });
93
93
  exports._getAaveV2MarketsData = _getAaveV2MarketsData;
94
- const getAaveV2MarketsData = (provider, network, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getAaveV2MarketsData)((0, viem_1.getViemProvider)(provider, network), network, selectedMarket); });
94
+ const getAaveV2MarketsData = (provider_1, network_1, selectedMarket_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, selectedMarket_1, ...args_1], void 0, function* (provider, network, selectedMarket, blockNumber = 'latest') { return (0, exports._getAaveV2MarketsData)((0, viem_1.getViemProvider)(provider, network), network, selectedMarket, blockNumber); });
95
95
  exports.getAaveV2MarketsData = getAaveV2MarketsData;
96
96
  const _getAaveV2AccountBalances = (provider, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () {
97
97
  var _a;
@@ -107,14 +107,14 @@ const _getAaveV2AccountBalances = (provider, network, block, addressMapping, add
107
107
  exports._getAaveV2AccountBalances = _getAaveV2AccountBalances;
108
108
  const getAaveV2AccountBalances = (provider, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getAaveV2AccountBalances)((0, viem_1.getViemProvider)(provider, network), network, block, addressMapping, address); });
109
109
  exports.getAaveV2AccountBalances = getAaveV2AccountBalances;
110
- const _getAaveV2AccountData = (provider, network, address, assetsData, market) => __awaiter(void 0, void 0, void 0, function* () {
110
+ const _getAaveV2AccountData = (provider_1, network_1, address_1, assetsData_1, market_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, address_1, assetsData_1, market_1, ...args_1], void 0, function* (provider, network, address, assetsData, market, blockNumber = 'latest') {
111
111
  if (!address)
112
112
  throw new Error('Address is required');
113
113
  let payload = Object.assign(Object.assign({}, aaveV3_1.EMPTY_AAVE_DATA), { lastUpdated: Date.now() });
114
114
  const loanInfoContract = (0, contracts_1.AaveLoanInfoV2ContractViem)(provider, network);
115
115
  const marketAddress = market.providerAddress;
116
116
  const _addresses = market.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a)).address);
117
- const loanInfo = yield loanInfoContract.read.getTokenBalances([marketAddress, address, _addresses]);
117
+ const loanInfo = yield loanInfoContract.read.getTokenBalances([marketAddress, address, _addresses], (0, viem_1.setViemBlockNumber)(blockNumber));
118
118
  const usedAssets = {};
119
119
  loanInfo.forEach((_tokenInfo, i) => {
120
120
  const asset = market.assets[i];
@@ -176,7 +176,7 @@ const _getAaveV2AccountData = (provider, network, address, assetsData, market) =
176
176
  return payload;
177
177
  });
178
178
  exports._getAaveV2AccountData = _getAaveV2AccountData;
179
- const getAaveV2AccountData = (provider, network, address, assetsData, market) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getAaveV2AccountData)((0, viem_1.getViemProvider)(provider, network), network, address, assetsData, market); });
179
+ const getAaveV2AccountData = (provider_1, network_1, address_1, assetsData_1, market_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, address_1, assetsData_1, market_1, ...args_1], void 0, function* (provider, network, address, assetsData, market, blockNumber = 'latest') { return (0, exports._getAaveV2AccountData)((0, viem_1.getViemProvider)(provider, network), network, address, assetsData, market, blockNumber); });
180
180
  exports.getAaveV2AccountData = getAaveV2AccountData;
181
181
  const getAaveV2FullPositionData = (provider, network, address, market) => __awaiter(void 0, void 0, void 0, function* () {
182
182
  const marketData = yield (0, exports.getAaveV2MarketsData)(provider, network, market);
@@ -6,8 +6,9 @@ import { getMerkleCampaigns } from './merkl';
6
6
  export declare const aaveV3EmodeCategoriesMapping: (extractedState: any, usedAssets: AaveV3UsedAssets) => {
7
7
  [key: number]: EModeCategoryDataMapping;
8
8
  };
9
- export declare function _getAaveV3MarketData(provider: Client, network: NetworkNumber, market: AaveMarketInfo, blockNumber?: 'latest' | number): Promise<AaveV3MarketData>;
10
- export declare function getAaveV3MarketData(provider: EthereumProvider, network: NetworkNumber, market: AaveMarketInfo, blockNumber?: 'latest' | number): Promise<AaveV3MarketData>;
9
+ /** `blockTimestamp` (unix seconds) is the historical block's timestamp when already known; otherwise it is read from the block. */
10
+ export declare function _getAaveV3MarketData(provider: Client, network: NetworkNumber, market: AaveMarketInfo, blockNumber?: 'latest' | number, blockTimestamp?: number): Promise<AaveV3MarketData>;
11
+ export declare function getAaveV3MarketData(provider: EthereumProvider, network: NetworkNumber, market: AaveMarketInfo, blockNumber?: 'latest' | number, blockTimestamp?: number): Promise<AaveV3MarketData>;
11
12
  export declare const EMPTY_AAVE_DATA: {
12
13
  usedAssets: {};
13
14
  suppliedUsd: string;
@@ -76,7 +77,7 @@ export declare const getAaveV3AccountData: (provider: EthereumProvider, network:
76
77
  export declare const getAaveV3FullPositionData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, market: AaveMarketInfo) => Promise<AaveV3PositionData>;
77
78
  export declare const REWARDABLE_ASSETS: readonly ["0x028171bCA77440897B824Ca71D1c56caC55b68A3", "0x6C3c78838c761c6Ac7bE9F59fe808ea2A6E4379d", "0xD37EE7e4f452C6638c96536e68090De8cBcdb583", "0x279AF5b99540c1A3A7E3CDd326e19659401eF99e", "0xBcca60bB61934080951369a648Fb03DF4F96263C", "0x619beb58998eD2278e08620f97007e1116D5D25b", "0x3Ed3B47Dd13EC9a98b44e6204A523E766B225811", "0x531842cEbbdD378f8ee36D171d6cC9C4fcf475Ec", "0x9ff58f4fFB29fA2266Ab25e75e2A8b3503311656", "0x9c39809Dec7F95F5e0713634a4D0701329B3b4d2", "0x030bA81f1c18d280636F32af80b9AAd02Cf0854e", "0xF63B34710400CAd3e044cFfDcAb00a0f32E33eCf", "0xa06bC25B5805d5F8d82847D191Cb4Af5A3e873E0", "0x0b8f12b1788BFdE65Aa1ca52E3e9F3Ba401be16D", "0x6C5024Cd4F8A59110119C56f8933403A539555EB", "0xdC6a3Ab17299D9C2A412B0e0a4C1f55446AE0817", "0x5165d24277cD063F5ac44Efd447B27025e888f37", "0x7EbD09022Be45AD993BAA1CEc61166Fcc8644d97", "0xF256CC7847E919FAc9B808cC216cAc87CCF2f47a", "0xfAFEDF95E21184E3d880bd56D4806c4b8d31c69A", "0xB9D7CB55f463405CDfBe4E90a6D2Df01C2B92BF1", "0x5BdB050A92CADcCfCDcCCBFC17204a1C9cC0Ab73", "0xc713e5E149D5D0715DcD1c156a020976e7E56B88", "0xba728eAd5e496BE00DCF66F650b6d7758eCB50f8", "0x101cc05f4A51C0319f570d5E146a8C625198e636", "0x01C0eb1f8c6F1C1bF74ae028697ce7AA2a8b0E92", "0xc9BC48c72154ef3e5425641a3c747242112a46AF", "0xB5385132EE8321977FfF44b60cDE9fE9AB0B4e6b", "0x272F97b7a56a387aE942350bBC7Df5700f8a4576", "0x13210D4Fe0d5402bd7Ecbc4B5bC5cFcA3b71adB0", "0x2e8f4bdbe3d47d7d7de490437aea9915d930f1a3", "0xfdb93b3b10936cf81fa59a02a7523b6e2149b2b7", "0xA361718326c15715591c299427c62086F69923D9", "0xbA429f7011c9fa04cDd46a2Da24dc0FF0aC6099c", "0xd4937682df3C8aEF4FE912A96A74121C0829E664", "0xfE8F19B17fFeF0fDbfe2671F248903055AFAA8Ca", "0x683923dB55Fead99A79Fa01A27EeC3cB19679cC3", "0xC2e10006AccAb7B45D9184FcF5b7EC7763f5BaAe", "0x8dAE6Cb04688C62d939ed9B68d32Bc62e49970b1", "0x00ad8eBF64F141f1C81e9f8f792d3d1631c6c684", "0x6F634c6135D2EBD550000ac92F494F9CB8183dAe", "0x4dDff5885a67E4EffeC55875a3977D7E60F82ae0"];
78
79
  export declare const fetchYearlyMeritApyForStakingGho: () => Promise<string>;
79
- export declare const getStakeAaveData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<{
80
+ export declare const getStakeAaveData: (provider: Client, network: NetworkNumber, address: EthAddress, blockNumber?: Blockish) => Promise<{
80
81
  activatedCooldown: string;
81
82
  activatedCooldownAmount: string;
82
83
  stkAaveRewardsBalance: string;
@@ -61,8 +61,9 @@ const aaveV3EmodeCategoriesMapping = (extractedState, usedAssets) => {
61
61
  return categoriesMapping;
62
62
  };
63
63
  exports.aaveV3EmodeCategoriesMapping = aaveV3EmodeCategoriesMapping;
64
+ /** `blockTimestamp` (unix seconds) is the historical block's timestamp when already known; otherwise it is read from the block. */
64
65
  function _getAaveV3MarketData(provider_1, network_1, market_1) {
65
- return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest') {
66
+ return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest', blockTimestamp) {
66
67
  var _a;
67
68
  const _addresses = market.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.getWrappedNativeAssetFromUnwrapped)(a), network).address);
68
69
  const loanInfoContract = (0, contracts_1.AaveV3ViewContractViem)(provider, network);
@@ -75,12 +76,15 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
75
76
  ? Array.from({ length: Math.ceil(_addresses.length / addressesPerRequest) }, (_, index) => _addresses.slice(index * addressesPerRequest, (index + 1) * addressesPerRequest))
76
77
  : [_addresses];
77
78
  const loanInfoPromise = Promise.all(addressChunks.map((addresses) => loanInfoContract.read.getFullTokensInfo([marketAddress, addresses], (0, viem_1.setViemBlockNumber)(blockNumber)))).then((loanInfoChunks) => loanInfoChunks.flat());
79
+ // Merkl rewards are keyed by time, so a historical block resolves to its timestamp first (one
80
+ // RPC call unless given, none for 'latest') and the rewards in force at that moment are attached.
81
+ const merkleRewardsPromise = (0, viem_1.getBlockTimestamp)(provider, blockNumber, blockTimestamp).then((asOfTimestamp) => (0, merkl_1.getMerkleCampaigns)(network, asOfTimestamp));
78
82
  // eslint-disable-next-line prefer-const
79
83
  let [loanInfo, eModesInfo, rewardInfo, merkleRewardsMap, meritRewardsMap] = yield Promise.all([
80
84
  loanInfoPromise,
81
85
  loanInfoContract.read.getAllEmodes([marketAddress], (0, viem_1.setViemBlockNumber)(blockNumber)),
82
86
  networksWithIncentives.includes(network) ? aaveIncentivesContract.read.getReservesIncentivesData([marketAddress], (0, viem_1.setViemBlockNumber)(blockNumber)) : null,
83
- (0, merkl_1.getMerkleCampaigns)(network),
87
+ merkleRewardsPromise,
84
88
  (0, merit_1.getMeritCampaigns)(network, market.value),
85
89
  ]);
86
90
  // same break logic as view contract
@@ -319,8 +323,8 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
319
323
  });
320
324
  }
321
325
  function getAaveV3MarketData(provider_1, network_1, market_1) {
322
- return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest') {
323
- return _getAaveV3MarketData((0, viem_1.getViemProvider)(provider, network), network, market, blockNumber);
326
+ return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest', blockTimestamp) {
327
+ return _getAaveV3MarketData((0, viem_1.getViemProvider)(provider, network), network, market, blockNumber, blockTimestamp);
324
328
  });
325
329
  }
326
330
  exports.EMPTY_AAVE_DATA = {
@@ -726,18 +730,18 @@ const fetchYearlyMeritApyForStakingGho = () => __awaiter(void 0, void 0, void 0,
726
730
  }
727
731
  });
728
732
  exports.fetchYearlyMeritApyForStakingGho = fetchYearlyMeritApyForStakingGho;
729
- const getStakeAaveData = (provider, network, address) => __awaiter(void 0, void 0, void 0, function* () {
733
+ const getStakeAaveData = (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') {
730
734
  const stkGhoAddress = (0, tokens_1.getAssetInfo)('stkGHO').address;
731
735
  const stkAaveAddress = (0, tokens_1.getAssetInfo)('stkAAVE').address;
732
736
  const AaveIncentivesController = (0, contracts_1.AaveIncentivesControllerViem)(provider, network);
733
737
  const stkAAVE = (0, contracts_1.StkAAVEViem)(provider, network);
734
738
  const stkGHO = (0, contracts_1.createViemContractFromConfigFunc)('Erc20', stkGhoAddress)(provider, network);
735
739
  const [aaveRewardsBalance, emissionsPerSecond, stkAAVEBalance, stkAAVETotalSupply, stkGHOBalance, ghoMeritApy, sgho] = yield Promise.all([
736
- AaveIncentivesController.read.getRewardsBalance([exports.REWARDABLE_ASSETS, address]),
737
- stkAAVE.read.assets([stkAaveAddress]),
738
- stkAAVE.read.balanceOf([address]),
739
- stkAAVE.read.totalSupply(),
740
- stkGHO.read.balanceOf([address]),
740
+ AaveIncentivesController.read.getRewardsBalance([exports.REWARDABLE_ASSETS, address], (0, viem_1.setViemBlockNumber)(blockNumber)),
741
+ stkAAVE.read.assets([stkAaveAddress], (0, viem_1.setViemBlockNumber)(blockNumber)),
742
+ stkAAVE.read.balanceOf([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
743
+ stkAAVE.read.totalSupply((0, viem_1.setViemBlockNumber)(blockNumber)),
744
+ stkGHO.read.balanceOf([address], (0, viem_1.setViemBlockNumber)(blockNumber)),
741
745
  (0, exports.fetchYearlyMeritApyForStakingGho)(),
742
746
  (0, sgho_1.getSghoData)(network, address),
743
747
  ]);
@@ -5,4 +5,8 @@ export declare const getAaveUnderlyingSymbol: (_symbol?: string) => string;
5
5
  * USDC -> USDC
6
6
  */
7
7
  export declare const formatAaveAsset: (_symbol: string) => string;
8
- export declare const getMerkleCampaigns: (chainId: NetworkNumber) => Promise<MerkleRewardMap>;
8
+ /**
9
+ * Live Merkl reward campaigns for Aave V3 on the chain, keyed by aToken. With `asOfTimestamp` (unix
10
+ * seconds) the campaigns and APRs are the ones Merkl had at that moment instead.
11
+ */
12
+ export declare const getMerkleCampaigns: (chainId: NetworkNumber, asOfTimestamp?: number) => Promise<MerkleRewardMap>;
@@ -39,12 +39,17 @@ const formatAaveAsset = (_symbol) => {
39
39
  return _symbol;
40
40
  };
41
41
  exports.formatAaveAsset = formatAaveAsset;
42
- const getMerkleCampaigns = (chainId) => __awaiter(void 0, void 0, void 0, function* () {
42
+ /**
43
+ * Live Merkl reward campaigns for Aave V3 on the chain, keyed by aToken. With `asOfTimestamp` (unix
44
+ * seconds) the campaigns and APRs are the ones Merkl had at that moment instead.
45
+ */
46
+ const getMerkleCampaigns = (chainId, asOfTimestamp) => __awaiter(void 0, void 0, void 0, function* () {
43
47
  try {
44
- const opportunities = yield (0, merkl_1.fetchAllMerklOpportunities)({
48
+ const opportunities = yield (0, merkl_1.fetchMerklOpportunities)({
45
49
  mainProtocolId: 'aave',
50
+ chainId: chainId.toString(),
46
51
  status: types_1.OpportunityStatus.LIVE,
47
- });
52
+ }, asOfTimestamp);
48
53
  const relevantOpportunities = opportunities
49
54
  .filter((o) => o.chainId === chainId)
50
55
  .filter((o) => o.status === types_1.OpportunityStatus.LIVE);
@@ -2,8 +2,9 @@ import { Client } from 'viem';
2
2
  import { AaveV4AccountData, AaveV4SpokeData, AaveV4SpokeInfo, EthAddress, EthereumProvider, NetworkNumber, Blockish, PositionBalances } from '../types';
3
3
  export * as lend from './lend';
4
4
  export { getAaveV4MerkleCampaigns } from './merkl';
5
- export declare function _getAaveV4SpokeData(provider: Client, network: NetworkNumber, market: AaveV4SpokeInfo, blockNumber?: 'latest' | number): Promise<AaveV4SpokeData>;
6
- export declare function getAaveV4SpokeData(provider: EthereumProvider, network: NetworkNumber, spoke: AaveV4SpokeInfo, blockNumber?: 'latest' | number): Promise<AaveV4SpokeData>;
5
+ /** `blockTimestamp` (unix seconds) is the historical block's timestamp when already known; otherwise it is read from the block. */
6
+ export declare function _getAaveV4SpokeData(provider: Client, network: NetworkNumber, market: AaveV4SpokeInfo, blockNumber?: 'latest' | number, blockTimestamp?: number): Promise<AaveV4SpokeData>;
7
+ export declare function getAaveV4SpokeData(provider: EthereumProvider, network: NetworkNumber, spoke: AaveV4SpokeInfo, blockNumber?: 'latest' | number, blockTimestamp?: number): Promise<AaveV4SpokeData>;
7
8
  export declare function _getAaveV4AccountData(provider: Client, network: NetworkNumber, spokeData: AaveV4SpokeData, address: EthAddress, blockNumber?: 'latest' | number): Promise<AaveV4AccountData>;
8
9
  /** Shared raw read; no spoke metadata or market enrichment. */
9
10
  export declare const _getAaveV4LoanBalances: (provider: Client, network: NetworkNumber, block: Blockish, address: EthAddress, spoke: EthAddress) => Promise<{
@@ -39,4 +40,4 @@ export declare const _getAaveV4AccountHasAnyBalance: (provider: Client, network:
39
40
  export declare function getAaveV4AccountData(provider: EthereumProvider, network: NetworkNumber, marketData: AaveV4SpokeData, address: EthAddress, blockNumber?: 'latest' | number): Promise<any>;
40
41
  export declare const _getAaveV4AccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, spokeAddress: EthAddress, spokeData?: AaveV4SpokeData) => Promise<PositionBalances>;
41
42
  export declare const getAaveV4AccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, spokeAddress: EthAddress, spokeData?: AaveV4SpokeData) => Promise<PositionBalances>;
42
- export declare function getAaveV4UnderlyingFromReserveId(provider: EthereumProvider, network: NetworkNumber, spoke: EthAddress, reserveId: number): Promise<any>;
43
+ export declare function getAaveV4UnderlyingFromReserveId(provider: EthereumProvider, network: NetworkNumber, spoke: EthAddress, reserveId: number, blockNumber?: Blockish): Promise<any>;
@@ -65,8 +65,8 @@ const merkl_1 = require("./merkl");
65
65
  exports.lend = __importStar(require("./lend"));
66
66
  var merkl_2 = require("./merkl");
67
67
  Object.defineProperty(exports, "getAaveV4MerkleCampaigns", { enumerable: true, get: function () { return merkl_2.getAaveV4MerkleCampaigns; } });
68
- const fetchHubData = (viewContract, hubAddress) => __awaiter(void 0, void 0, void 0, function* () {
69
- const hubData = yield viewContract.read.getHubAllAssetsData([hubAddress]);
68
+ const fetchHubData = (viewContract_1, hubAddress_1, ...args_1) => __awaiter(void 0, [viewContract_1, hubAddress_1, ...args_1], void 0, function* (viewContract, hubAddress, blockNumber = 'latest') {
69
+ const hubData = yield viewContract.read.getHubAllAssetsData([hubAddress], (0, viem_1.setViemBlockNumber)(blockNumber));
70
70
  return {
71
71
  assets: hubData.reduce((acc, assetOnChainData) => {
72
72
  acc[assetOnChainData.assetId] = {
@@ -188,18 +188,21 @@ const formatReserveAsset = (reserveAsset, hubAsset, reserveId, oracleDecimals, n
188
188
  liquidityFee: liquidityFee.toString(),
189
189
  });
190
190
  });
191
+ /** `blockTimestamp` (unix seconds) is the historical block's timestamp when already known; otherwise it is read from the block. */
191
192
  function _getAaveV4SpokeData(provider_1, network_1, market_1) {
192
- return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest') {
193
+ return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest', blockTimestamp) {
193
194
  const viewContract = (0, contracts_1.AaveV4ViewContractViem)(provider, network, blockNumber);
194
195
  const hubsData = {};
195
196
  const loadHubData = (hubAddress) => __awaiter(this, void 0, void 0, function* () {
196
- hubsData[hubAddress.toLowerCase()] = yield fetchHubData(viewContract, hubAddress);
197
+ hubsData[hubAddress.toLowerCase()] = yield fetchHubData(viewContract, hubAddress, blockNumber);
197
198
  });
198
199
  // market.hubs is only a prefetch hint (lets known hubs load in parallel with the spoke data), so
199
200
  // failures are tolerated here — any hub the reserves actually reference is (re)fetched below.
200
201
  const [spokeData, merklCampaigns] = yield Promise.all([
201
- viewContract.read.getSpokeDataFull([market.address]),
202
- (0, merkl_1.getAaveV4MerkleCampaigns)(network),
202
+ viewContract.read.getSpokeDataFull([market.address], (0, viem_1.setViemBlockNumber)(blockNumber)),
203
+ // Merkl rewards are keyed by time: a historical block resolves to its timestamp first (one RPC
204
+ // call unless given, none for 'latest') so the rewards in force at that moment are attached.
205
+ (0, viem_1.getBlockTimestamp)(provider, blockNumber, blockTimestamp).then((asOfTimestamp) => (0, merkl_1.getAaveV4MerkleCampaigns)(network, asOfTimestamp)),
203
206
  ...market.hubs.map((hubAddress) => loadHubData(hubAddress).catch(() => { })),
204
207
  ]);
205
208
  // The on-chain reserves are the source of truth for which hubs the spoke uses — fetch any hub
@@ -229,14 +232,14 @@ function _getAaveV4SpokeData(provider_1, network_1, market_1) {
229
232
  });
230
233
  }
231
234
  function getAaveV4SpokeData(provider_1, network_1, spoke_1) {
232
- return __awaiter(this, arguments, void 0, function* (provider, network, spoke, blockNumber = 'latest') {
233
- return _getAaveV4SpokeData((0, viem_1.getViemProvider)(provider, network), network, spoke, blockNumber);
235
+ return __awaiter(this, arguments, void 0, function* (provider, network, spoke, blockNumber = 'latest', blockTimestamp) {
236
+ return _getAaveV4SpokeData((0, viem_1.getViemProvider)(provider, network), network, spoke, blockNumber, blockTimestamp);
234
237
  });
235
238
  }
236
239
  function _getAaveV4AccountData(provider_1, network_1, spokeData_1, address_1) {
237
240
  return __awaiter(this, arguments, void 0, function* (provider, network, spokeData, address, blockNumber = 'latest') {
238
241
  const viewContract = (0, contracts_1.AaveV4ViewContractViem)(provider, network, blockNumber);
239
- const loanData = yield viewContract.read.getLoanData([spokeData.address, address]);
242
+ const loanData = yield viewContract.read.getLoanData([spokeData.address, address], (0, viem_1.setViemBlockNumber)(blockNumber));
240
243
  const healthFactorFromContract = new decimal_js_1.default(loanData.healthFactor.toString());
241
244
  const healthFactor = (0, utils_1.isMaxUint)(healthFactorFromContract.toString()) ? 'Infinity' : healthFactorFromContract.div(1e18).toString();
242
245
  const usedAssets = loanData.reserves.reduce((acc, usedReserveAsset) => {
@@ -309,7 +312,7 @@ const _getAaveV4AccountHasAnyBalance = (provider, network, block, address, spoke
309
312
  return false;
310
313
  const blockNumber = block === 'latest' ? 'latest' : Number(block);
311
314
  const viewContract = (0, contracts_1.AaveV4ViewContractViem)(provider, network, blockNumber);
312
- const loanData = yield viewContract.read.getLoanData([spokeAddress, address]);
315
+ const loanData = yield viewContract.read.getLoanData([spokeAddress, address], (0, viem_1.setViemBlockNumber)(blockNumber));
313
316
  const reserves = (loanData === null || loanData === void 0 ? void 0 : loanData.reserves) || [];
314
317
  return reserves.some((reserveAsset) => {
315
318
  var _a, _b, _c, _d, _e, _f, _g, _h;
@@ -364,13 +367,13 @@ const getAaveV4AccountBalances = (provider, network, block, addressMapping, addr
364
367
  return (0, exports._getAaveV4AccountBalances)((0, viem_1.getViemProvider)(provider, network), network, block, addressMapping, address, spokeAddress, spokeData);
365
368
  });
366
369
  exports.getAaveV4AccountBalances = getAaveV4AccountBalances;
367
- const _getAaveV4UnderlyingFromReserveId = (provider, network, spoke, reserveId) => __awaiter(void 0, void 0, void 0, function* () {
368
- const viewContract = (0, contracts_1.AaveV4ViewContractViem)(provider, network);
369
- const reserveData = yield viewContract.read.getReserveData([spoke, BigInt(reserveId)]);
370
+ const _getAaveV4UnderlyingFromReserveId = (provider_1, network_1, spoke_1, reserveId_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, spoke_1, reserveId_1, ...args_1], void 0, function* (provider, network, spoke, reserveId, blockNumber = 'latest') {
371
+ const viewContract = (0, contracts_1.AaveV4ViewContractViem)(provider, network, blockNumber);
372
+ const reserveData = yield viewContract.read.getReserveData([spoke, BigInt(reserveId)], (0, viem_1.setViemBlockNumber)(blockNumber));
370
373
  return reserveData.underlying;
371
374
  });
372
- function getAaveV4UnderlyingFromReserveId(provider, network, spoke, reserveId) {
373
- return __awaiter(this, void 0, void 0, function* () {
374
- return _getAaveV4UnderlyingFromReserveId((0, viem_1.getViemProvider)(provider, network), network, spoke, reserveId);
375
+ function getAaveV4UnderlyingFromReserveId(provider_1, network_1, spoke_1, reserveId_1) {
376
+ return __awaiter(this, arguments, void 0, function* (provider, network, spoke, reserveId, blockNumber = 'latest') {
377
+ return _getAaveV4UnderlyingFromReserveId((0, viem_1.getViemProvider)(provider, network), network, spoke, reserveId, blockNumber);
375
378
  });
376
379
  }
@@ -1,6 +1,14 @@
1
1
  import { AaveV4MerklRewardMap, AaveV4ReserveAssetData, MerklOpportunity, NetworkNumber } from '../types';
2
- export declare const buildAaveV4MerklRewardMap: (opportunities: MerklOpportunity[], chainId: NetworkNumber) => AaveV4MerklRewardMap;
3
- export declare const getAaveV4MerkleCampaigns: (chainId: NetworkNumber) => Promise<AaveV4MerklRewardMap>;
2
+ /**
3
+ * `asOfTimestamp` (unix seconds, defaults to now) decides which of an opportunity's campaigns count
4
+ * as running, so historical opportunity lists are judged at their own moment rather than today's.
5
+ */
6
+ export declare const buildAaveV4MerklRewardMap: (opportunities: MerklOpportunity[], chainId: NetworkNumber, asOfTimestamp?: number) => AaveV4MerklRewardMap;
7
+ /**
8
+ * Live Aave V4 Merkl reward campaigns for the chain, split by hub/spoke scope. With `asOfTimestamp`
9
+ * (unix seconds) the campaigns and APRs are the ones Merkl had at that moment instead.
10
+ */
11
+ export declare const getAaveV4MerkleCampaigns: (chainId: NetworkNumber, asOfTimestamp?: number) => Promise<AaveV4MerklRewardMap>;
4
12
  /**
5
13
  * Returns a copy of the asset with scope-specific incentive arrays pre-combined with the asset's
6
14
  * intrinsic (staking) incentives, so each surface can render base yield + the rewards that apply to it.
@@ -45,7 +45,11 @@ const buildIncentive = (opportunity) => {
45
45
  description: opportunity.description || `Eligible for ${token} rewards through Merkl.`,
46
46
  };
47
47
  };
48
- const buildAaveV4MerklRewardMap = (opportunities, chainId) => {
48
+ /**
49
+ * `asOfTimestamp` (unix seconds, defaults to now) decides which of an opportunity's campaigns count
50
+ * as running, so historical opportunity lists are judged at their own moment rather than today's.
51
+ */
52
+ const buildAaveV4MerklRewardMap = (opportunities, chainId, asOfTimestamp = Date.now() / 1000) => {
49
53
  const result = { hub: {}, spoke: {} };
50
54
  const endByCampaignId = {};
51
55
  opportunities.forEach((o) => {
@@ -63,7 +67,7 @@ const buildAaveV4MerklRewardMap = (opportunities, chainId) => {
63
67
  .forEach((o) => {
64
68
  var _a, _b, _c;
65
69
  const side = o.action === types_1.OpportunityAction.BORROW ? types_1.IncentiveSide.Borrow : types_1.IncentiveSide.Supply;
66
- const now = Date.now() / 1000;
70
+ const now = asOfTimestamp;
67
71
  const methods = (_a = o.campaigns) === null || _a === void 0 ? void 0 : _a.filter((c) => (c.startTimestamp === undefined || c.startTimestamp <= now)
68
72
  && (c.endTimestamp === undefined || c.endTimestamp > now)).map((c) => { var _a, _b; return (_b = (_a = c.params) === null || _a === void 0 ? void 0 : _a.distributionMethodParameters) === null || _b === void 0 ? void 0 : _b.distributionMethod; });
69
73
  // An opportunity-level APR cannot be split between simultaneous net and additive campaigns.
@@ -142,15 +146,20 @@ const buildAaveV4MerklRewardMap = (opportunities, chainId) => {
142
146
  return result;
143
147
  };
144
148
  exports.buildAaveV4MerklRewardMap = buildAaveV4MerklRewardMap;
145
- const getAaveV4MerkleCampaigns = (chainId) => __awaiter(void 0, void 0, void 0, function* () {
149
+ /**
150
+ * Live Aave V4 Merkl reward campaigns for the chain, split by hub/spoke scope. With `asOfTimestamp`
151
+ * (unix seconds) the campaigns and APRs are the ones Merkl had at that moment instead.
152
+ */
153
+ const getAaveV4MerkleCampaigns = (chainId, asOfTimestamp) => __awaiter(void 0, void 0, void 0, function* () {
146
154
  try {
147
- const opportunities = yield (0, merkl_1.fetchAllMerklOpportunities)({
155
+ const opportunities = yield (0, merkl_1.fetchMerklOpportunities)({
148
156
  mainProtocolId: 'aave',
157
+ chainId: chainId.toString(),
149
158
  type: 'AAVE_V4_HUB_SUPPLY,AAVE_V4_HUB_BORROW,AAVE_V4_SPOKE_SUPPLY,AAVE_V4_SPOKE_BORROW,AAVE_V4_HUB_NET_LENDING,AAVE_V4_HUB_NET_BORROWING,AAVE_V4_SPOKE_NET_LENDING,AAVE_V4_SPOKE_NET_BORROWING',
150
159
  status: types_1.OpportunityStatus.LIVE,
151
160
  campaigns: 'true',
152
- });
153
- return (0, exports.buildAaveV4MerklRewardMap)(opportunities, chainId);
161
+ }, asOfTimestamp);
162
+ return (0, exports.buildAaveV4MerklRewardMap)(opportunities, chainId, asOfTimestamp);
154
163
  }
155
164
  catch (e) {
156
165
  console.error('Failed to fetch Aave V4 Merkle campaigns', e);
@@ -1,6 +1,6 @@
1
1
  import { Client } from 'viem';
2
- import { EthAddress, NetworkNumber } from '../types';
2
+ import { Blockish, EthAddress, NetworkNumber } from '../types';
3
3
  import { ClaimableToken, MerklRewardsClaimableToken } from '../types/claiming';
4
- export declare function getUnclaimedRewardsForAllMarkets(provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress): Promise<ClaimableToken[]>;
4
+ export declare function getUnclaimedRewardsForAllMarkets(provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress, blockNumber?: Blockish): Promise<ClaimableToken[]>;
5
5
  export declare function getMerklUnclaimedRewards(account: EthAddress, network: NetworkNumber): Promise<MerklRewardsClaimableToken[]>;
6
6
  export declare function getMeritUnclaimedRewards(account: EthAddress, network: NetworkNumber): Promise<ClaimableToken[]>;
@@ -19,6 +19,7 @@ const decimal_js_1 = __importDefault(require("decimal.js"));
19
19
  const claiming_1 = require("../types/claiming");
20
20
  const contracts_1 = require("../contracts");
21
21
  const utils_1 = require("../services/utils");
22
+ const viem_1 = require("../services/viem");
22
23
  const aaveHelpers_1 = require("../helpers/aaveHelpers");
23
24
  const mapAaveRewardsToClaimableTokens = (aaveRewards, marketAddress, walletAddress) => aaveRewards.map(reward => ({
24
25
  symbol: reward.symbol,
@@ -34,10 +35,10 @@ const mapAaveRewardsToClaimableTokens = (aaveRewards, marketAddress, walletAddre
34
35
  isAaveToken: reward.symbol.startsWith('a'),
35
36
  },
36
37
  }));
37
- function getUnclaimedRewardsForAllMarkets(provider, network, walletAddress, marketAddress) {
38
- return __awaiter(this, void 0, void 0, function* () {
38
+ function getUnclaimedRewardsForAllMarkets(provider_1, network_1, walletAddress_1, marketAddress_1) {
39
+ return __awaiter(this, arguments, void 0, function* (provider, network, walletAddress, marketAddress, blockNumber = 'latest') {
39
40
  const contract = (0, contracts_1.AaveIncentiveDataProviderV3ContractViem)(provider, network);
40
- const tokensData = yield contract.read.getUserReservesIncentivesData([marketAddress, walletAddress]);
41
+ const tokensData = yield contract.read.getUserReservesIncentivesData([marketAddress, walletAddress], (0, viem_1.setViemBlockNumber)(blockNumber));
41
42
  const allTokensDataArrays = tokensData.reduce((acc, val) => {
42
43
  acc.push(val.aTokenIncentivesUserData.userRewardsInformation);
43
44
  acc.push(val.vTokenIncentivesUserData.userRewardsInformation);
@@ -51,7 +52,7 @@ function getUnclaimedRewardsForAllMarkets(provider, network, walletAddress, mark
51
52
  // array of rewards for each market (aToken/vToken)
52
53
  // reward can be any token like wstETH, but also aToken like aWETH
53
54
  const aaveRewardsController = (0, contracts_1.AaveRewardsControllerViem)(provider, network);
54
- const rewardsPerAAsset = yield Promise.all(allATokens.map((token) => aaveRewardsController.read.getAllUserRewards([[token], walletAddress])));
55
+ const rewardsPerAAsset = yield Promise.all(allATokens.map((token) => aaveRewardsController.read.getAllUserRewards([[token], walletAddress], (0, viem_1.setViemBlockNumber)(blockNumber))));
55
56
  // match amounts to token symbol, parse decimal amounts
56
57
  const rewardsPerAAssetWithInfo = rewardsPerAAsset.map((rewardForAAsset, aaIndex) => {
57
58
  const rewardsList = rewardForAAsset[0];
@@ -1,4 +1,4 @@
1
1
  import { Client } from 'viem';
2
- import { EthAddress, NetworkNumber } from '../types/common';
2
+ import { Blockish, EthAddress, NetworkNumber } from '../types/common';
3
3
  export declare const fetchKingRewards: (walletAddress: EthAddress) => Promise<any>;
4
- export declare const getKingRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, any[]>>;
4
+ export declare const getKingRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[], blockNumber?: Blockish) => Promise<Record<string, any[]>>;
@@ -16,6 +16,7 @@ exports.getKingRewards = exports.fetchKingRewards = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const tokens_1 = require("@defisaver/tokens");
18
18
  const contracts_1 = require("../contracts");
19
+ const viem_1 = require("../services/viem");
19
20
  const claiming_1 = require("../types/claiming");
20
21
  const fetchKingRewards = (walletAddress) => __awaiter(void 0, void 0, void 0, function* () {
21
22
  try {
@@ -30,13 +31,13 @@ const fetchKingRewards = (walletAddress) => __awaiter(void 0, void 0, void 0, fu
30
31
  }
31
32
  });
32
33
  exports.fetchKingRewards = fetchKingRewards;
33
- const getKingRewards = (provider, network, walletAddresses) => __awaiter(void 0, void 0, void 0, function* () {
34
+ const getKingRewards = (provider_1, network_1, walletAddresses_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, walletAddresses_1, ...args_1], void 0, function* (provider, network, walletAddresses, blockNumber = 'latest') {
34
35
  // Fetch all API data in parallel (these are external API calls, can't be batched with multicall)
35
36
  const apiDataPromises = walletAddresses.map(address => (0, exports.fetchKingRewards)(address));
36
37
  const apiDataArray = yield Promise.all(apiDataPromises);
37
38
  // Batch all contract calls using multicall
38
39
  const contract = (0, contracts_1.UUPSViem)(provider, network);
39
- const cumulativePromises = walletAddresses.map(address => contract.read.cumulativeClaimed([address]));
40
+ const cumulativePromises = walletAddresses.map(address => contract.read.cumulativeClaimed([address], (0, viem_1.setViemBlockNumber)(blockNumber)));
40
41
  const cumulativeResults = yield Promise.all(cumulativePromises);
41
42
  // Process results
42
43
  const results = {};
@@ -1,6 +1,6 @@
1
1
  import { Client } from 'viem';
2
- import { EthAddress, NetworkNumber } from '../types/common';
2
+ import { Blockish, EthAddress, NetworkNumber } from '../types/common';
3
3
  import { SparkRewardsClaimableToken } from '../types/claiming';
4
4
  export declare const fetchSpkAirdropRewards: (walletAddress: EthAddress) => Promise<any>;
5
- export declare const fetchSparkAirdropRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, any[]>>;
6
- export declare const fetchSparkRewards: (provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress) => Promise<SparkRewardsClaimableToken[]>;
5
+ export declare const fetchSparkAirdropRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[], blockNumber?: Blockish) => Promise<Record<string, any[]>>;
6
+ export declare const fetchSparkRewards: (provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress, blockNumber?: Blockish) => Promise<SparkRewardsClaimableToken[]>;
@@ -18,6 +18,7 @@ const decimal_js_1 = __importDefault(require("decimal.js"));
18
18
  const contracts_1 = require("../contracts");
19
19
  const claiming_1 = require("../types/claiming");
20
20
  const utils_1 = require("../services/utils");
21
+ const viem_1 = require("../services/viem");
21
22
  const IGNITION_REWARDS = '0xCBA0C0a2a0B6Bb11233ec4EA85C5bFfea33e724d';
22
23
  const PFL3_REWARDS = '0x7ac96180C4d6b2A328D3a19ac059D0E7Fc3C6d41';
23
24
  const fetchSpkAirdropRewards = (walletAddress) => __awaiter(void 0, void 0, void 0, function* () {
@@ -33,17 +34,17 @@ const fetchSpkAirdropRewards = (walletAddress) => __awaiter(void 0, void 0, void
33
34
  }
34
35
  });
35
36
  exports.fetchSpkAirdropRewards = fetchSpkAirdropRewards;
36
- const getCumulativeClaimedSpkAirdrop = (provider, network, data) => __awaiter(void 0, void 0, void 0, function* () {
37
+ const getCumulativeClaimedSpkAirdrop = (provider_1, network_1, data_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, data_1, ...args_1], void 0, function* (provider, network, data, blockNumber = 'latest') {
37
38
  const contractIgnition = (0, contracts_1.createViemContractFromConfigFunc)('SparkAirdrop', IGNITION_REWARDS)(provider, network);
38
39
  const contractPFL = (0, contracts_1.createViemContractFromConfigFunc)('SparkAirdrop', PFL3_REWARDS)(provider, network);
39
40
  const cumulativeAmounts = yield Promise.all(data.map((airdrop) => {
40
41
  const { user, tokenAddress, epoch, type, } = airdrop;
41
42
  const contract = type === claiming_1.SparkAirdropType.SPARK_IGNITION ? contractIgnition : contractPFL;
42
- return contract.read.cumulativeClaimed([user, tokenAddress, BigInt(epoch)]);
43
+ return contract.read.cumulativeClaimed([user, tokenAddress, BigInt(epoch)], (0, viem_1.setViemBlockNumber)(blockNumber));
43
44
  }));
44
45
  return cumulativeAmounts.map((amount, i) => (0, tokens_1.assetAmountInEth)(amount.toString(), (0, tokens_1.getAssetInfoByAddress)(data[i].tokenAddress).symbol).toString());
45
46
  });
46
- const fetchSparkAirdropRewards = (provider, network, walletAddresses) => __awaiter(void 0, void 0, void 0, function* () {
47
+ const fetchSparkAirdropRewards = (provider_1, network_1, walletAddresses_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, walletAddresses_1, ...args_1], void 0, function* (provider, network, walletAddresses, blockNumber = 'latest') {
47
48
  // Fetch all API data in parallel (these are external API calls, can't be batched with multicall)
48
49
  const apiDataPromises = walletAddresses.map(address => (0, exports.fetchSpkAirdropRewards)(address));
49
50
  const apiDataArray = yield Promise.all(apiDataPromises);
@@ -74,7 +75,7 @@ const fetchSparkAirdropRewards = (provider, network, walletAddresses) => __await
74
75
  });
75
76
  }
76
77
  // Batch all contract calls
77
- const cumulativeClaimedAmounts = yield getCumulativeClaimedSpkAirdrop(provider, network, contractCallsData);
78
+ const cumulativeClaimedAmounts = yield getCumulativeClaimedSpkAirdrop(provider, network, contractCallsData, blockNumber);
78
79
  // Process results
79
80
  const results = {};
80
81
  let contractCallIndex = 0;
@@ -114,9 +115,9 @@ const fetchSparkAirdropRewards = (provider, network, walletAddresses) => __await
114
115
  return results;
115
116
  });
116
117
  exports.fetchSparkAirdropRewards = fetchSparkAirdropRewards;
117
- const fetchSparkRewards = (provider, network, walletAddress, marketAddress) => __awaiter(void 0, void 0, void 0, function* () {
118
+ const fetchSparkRewards = (provider_1, network_1, walletAddress_1, marketAddress_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, walletAddress_1, marketAddress_1, ...args_1], void 0, function* (provider, network, walletAddress, marketAddress, blockNumber = 'latest') {
118
119
  const contract = (0, contracts_1.SparkIncentiveDataProviderContractViem)(provider, network);
119
- const tokensData = yield contract.read.getUserReservesIncentivesData([marketAddress, walletAddress]);
120
+ const tokensData = yield contract.read.getUserReservesIncentivesData([marketAddress, walletAddress], (0, viem_1.setViemBlockNumber)(blockNumber));
120
121
  const allTokensDataArrays = tokensData.reduce((acc, val) => {
121
122
  acc.push(val.aTokenIncentivesUserData.userRewardsInformation);
122
123
  acc.push(val.vTokenIncentivesUserData.userRewardsInformation);
@@ -129,7 +130,7 @@ const fetchSparkRewards = (provider, network, walletAddress, marketAddress) => _
129
130
  }, []);
130
131
  const rewardsPerAAsset = yield Promise.all(allATokens.map((token) => {
131
132
  const sparkRewardsContract = (0, contracts_1.SparkRewardsControllerViem)(provider, network);
132
- return sparkRewardsContract.read.getAllUserRewards([[token], walletAddress]);
133
+ return sparkRewardsContract.read.getAllUserRewards([[token], walletAddress], (0, viem_1.setViemBlockNumber)(blockNumber));
133
134
  }));
134
135
  // match amounts to token symbol, parse decimal amounts
135
136
  const rewardsPerAAssetWithInfo = rewardsPerAAsset.map((rewardForAAsset, aaIndex) => {
@@ -1,5 +1,5 @@
1
1
  import { Client } from 'viem';
2
- import { EthAddress, NetworkNumber } from '../types';
2
+ import { Blockish, EthAddress, NetworkNumber } from '../types';
3
3
  import { UniswapAirdropClaimableToken } from '../types/claiming';
4
4
  export declare const fetchUniswapRewardsData: (walletAddress: EthAddress) => Promise<any>;
5
- export declare const getUniswapRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, UniswapAirdropClaimableToken[]>>;
5
+ export declare const getUniswapRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[], blockNumber?: Blockish) => Promise<Record<string, UniswapAirdropClaimableToken[]>>;
@@ -15,6 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.getUniswapRewards = exports.fetchUniswapRewardsData = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const tokens_1 = require("@defisaver/tokens");
18
+ const viem_1 = require("../services/viem");
18
19
  const contracts_1 = require("../contracts");
19
20
  const claiming_1 = require("../types/claiming");
20
21
  const EMPTY_DATA = (walletAddress) => ({
@@ -35,13 +36,13 @@ const fetchUniswapRewardsData = (walletAddress) => __awaiter(void 0, void 0, voi
35
36
  }
36
37
  });
37
38
  exports.fetchUniswapRewardsData = fetchUniswapRewardsData;
38
- const getUniswapRewards = (provider, network, walletAddresses) => __awaiter(void 0, void 0, void 0, function* () {
39
+ const getUniswapRewards = (provider_1, network_1, walletAddresses_1, ...args_1) => __awaiter(void 0, [provider_1, network_1, walletAddresses_1, ...args_1], void 0, function* (provider, network, walletAddresses, blockNumber = 'latest') {
39
40
  // Fetch all API data in parallel (these are external API calls, can't be batched with multicall)
40
41
  const apiDataPromises = walletAddresses.map(address => (0, exports.fetchUniswapRewardsData)(address));
41
42
  const apiDataArray = yield Promise.all(apiDataPromises);
42
43
  // Batch all contract calls using multicall
43
44
  const contract = (0, contracts_1.UniswapTokenDistributorViem)(provider, network);
44
- const cumulativePromises = apiDataArray.map(data => (data.index ? contract.read.isClaimed([data.index]) : Promise.resolve(false)));
45
+ const cumulativePromises = apiDataArray.map(data => (data.index ? contract.read.isClaimed([data.index], (0, viem_1.setViemBlockNumber)(blockNumber)) : Promise.resolve(false)));
45
46
  const cumulativeResults = yield Promise.all(cumulativePromises);
46
47
  // Process results
47
48
  const results = {};
@@ -1,8 +1,8 @@
1
1
  import { Client } from 'viem';
2
2
  import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
3
3
  import { CompoundV2AssetsData, CompoundV2MarketsData, CompoundV2PositionData } from '../types';
4
- export declare const _getCompoundV2MarketsData: (provider: Client, network: NetworkNumber) => Promise<CompoundV2MarketsData>;
5
- export declare const getCompoundV2MarketsData: (provider: EthereumProvider, network: NetworkNumber) => Promise<CompoundV2MarketsData>;
4
+ export declare const _getCompoundV2MarketsData: (provider: Client, network: NetworkNumber, blockNumber?: Blockish) => Promise<CompoundV2MarketsData>;
5
+ export declare const getCompoundV2MarketsData: (provider: EthereumProvider, network: NetworkNumber, blockNumber?: Blockish) => Promise<CompoundV2MarketsData>;
6
6
  export declare const EMPTY_COMPOUND_DATA: {
7
7
  usedAssets: {};
8
8
  suppliedUsd: string;
@@ -19,6 +19,6 @@ export declare const EMPTY_COMPOUND_DATA: {
19
19
  };
20
20
  export declare const _getCompoundV2AccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, tokens?: EthAddress[]) => Promise<PositionBalances>;
21
21
  export declare const getCompoundV2AccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
22
- export declare const _getCompoundV2AccountData: (provider: Client, network: NetworkNumber, address: EthAddress, assetsData: CompoundV2AssetsData) => Promise<CompoundV2PositionData>;
23
- export declare const getCompoundV2AccountData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, assetsData: CompoundV2AssetsData) => Promise<CompoundV2PositionData>;
22
+ export declare const _getCompoundV2AccountData: (provider: Client, network: NetworkNumber, address: EthAddress, assetsData: CompoundV2AssetsData, blockNumber?: Blockish) => Promise<CompoundV2PositionData>;
23
+ export declare const getCompoundV2AccountData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, assetsData: CompoundV2AssetsData, blockNumber?: Blockish) => Promise<CompoundV2PositionData>;
24
24
  export declare const getCompoundV2FullPositionData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress) => Promise<CompoundV2PositionData>;