@defisaver/positions-sdk 2.1.48 → 2.1.49-aave-v4-dev-1-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 (66) hide show
  1. package/cjs/aaveV4/index.d.ts +7 -0
  2. package/cjs/aaveV4/index.js +167 -0
  3. package/cjs/config/contracts.d.ts +1277 -0
  4. package/cjs/config/contracts.js +9 -0
  5. package/cjs/contracts.d.ts +23120 -0
  6. package/cjs/contracts.js +2 -1
  7. package/cjs/helpers/aaveV4Helpers/index.d.ts +9 -0
  8. package/cjs/helpers/aaveV4Helpers/index.js +57 -0
  9. package/cjs/helpers/index.d.ts +1 -0
  10. package/cjs/helpers/index.js +2 -1
  11. package/cjs/index.d.ts +2 -1
  12. package/cjs/index.js +3 -1
  13. package/cjs/markets/aave/marketAssets.js +1 -1
  14. package/cjs/markets/aaveV4/index.d.ts +7 -0
  15. package/cjs/markets/aaveV4/index.js +22 -0
  16. package/cjs/markets/index.d.ts +1 -0
  17. package/cjs/markets/index.js +3 -1
  18. package/cjs/moneymarket/moneymarketCommonService.js +1 -1
  19. package/cjs/portfolio/index.js +20 -0
  20. package/cjs/staking/staking.js +5 -1
  21. package/cjs/types/aaveV4.d.ts +129 -0
  22. package/cjs/types/aaveV4.js +11 -0
  23. package/cjs/types/index.d.ts +1 -0
  24. package/cjs/types/index.js +1 -0
  25. package/cjs/types/portfolio.d.ts +4 -0
  26. package/esm/aaveV4/index.d.ts +7 -0
  27. package/esm/aaveV4/index.js +158 -0
  28. package/esm/config/contracts.d.ts +1277 -0
  29. package/esm/config/contracts.js +8 -0
  30. package/esm/contracts.d.ts +23120 -0
  31. package/esm/contracts.js +1 -0
  32. package/esm/helpers/aaveV4Helpers/index.d.ts +9 -0
  33. package/esm/helpers/aaveV4Helpers/index.js +49 -0
  34. package/esm/helpers/index.d.ts +1 -0
  35. package/esm/helpers/index.js +1 -0
  36. package/esm/index.d.ts +2 -1
  37. package/esm/index.js +2 -1
  38. package/esm/markets/aave/marketAssets.js +1 -1
  39. package/esm/markets/aaveV4/index.d.ts +7 -0
  40. package/esm/markets/aaveV4/index.js +16 -0
  41. package/esm/markets/index.d.ts +1 -0
  42. package/esm/markets/index.js +1 -0
  43. package/esm/moneymarket/moneymarketCommonService.js +1 -1
  44. package/esm/portfolio/index.js +21 -1
  45. package/esm/staking/staking.js +5 -1
  46. package/esm/types/aaveV4.d.ts +129 -0
  47. package/esm/types/aaveV4.js +8 -0
  48. package/esm/types/index.d.ts +1 -0
  49. package/esm/types/index.js +1 -0
  50. package/esm/types/portfolio.d.ts +4 -0
  51. package/package.json +2 -2
  52. package/src/aaveV4/index.ts +169 -0
  53. package/src/config/contracts.ts +8 -0
  54. package/src/contracts.ts +3 -1
  55. package/src/helpers/aaveV4Helpers/index.ts +69 -0
  56. package/src/helpers/index.ts +1 -0
  57. package/src/index.ts +2 -0
  58. package/src/markets/aave/marketAssets.ts +1 -1
  59. package/src/markets/aaveV4/index.ts +19 -0
  60. package/src/markets/index.ts +1 -0
  61. package/src/moneymarket/moneymarketCommonService.ts +1 -1
  62. package/src/portfolio/index.ts +20 -0
  63. package/src/staking/staking.ts +3 -1
  64. package/src/types/aaveV4.ts +142 -0
  65. package/src/types/index.ts +2 -1
  66. package/src/types/portfolio.ts +4 -0
@@ -1318,4 +1318,12 @@ export const SkySavings = {
1318
1318
  } as const;
1319
1319
  export const YearnV3Vault = {
1320
1320
  "abi": [{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"totalAssets","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"totalDebt","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}]}]
1321
+ } as const;
1322
+ export const AaveV4View = {
1323
+ "abi": [{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"getHealthFactor","outputs":[{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_hub","type":"address"}],"name":"getHubAllAssetsData","outputs":[{"components":[{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"totalSupplied","type":"uint256"},{"internalType":"uint256","name":"totalDrawn","type":"uint256"},{"internalType":"uint256","name":"totalPremium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint256","name":"swept","type":"uint256"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint120","name":"drawnIndex","type":"uint120"},{"internalType":"uint96","name":"drawnRate","type":"uint96"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"address","name":"irStrategy","type":"address"},{"internalType":"address","name":"reinvestmentController","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"deficitRay","type":"uint256"}],"internalType":"structAaveV4View.HubAssetData[]","name":"hubAssetData","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_hub","type":"address"},{"internalType":"uint256","name":"_assetId","type":"uint256"}],"name":"getHubAssetData","outputs":[{"components":[{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"totalSupplied","type":"uint256"},{"internalType":"uint256","name":"totalDrawn","type":"uint256"},{"internalType":"uint256","name":"totalPremium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint256","name":"swept","type":"uint256"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint120","name":"drawnIndex","type":"uint120"},{"internalType":"uint96","name":"drawnRate","type":"uint96"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"address","name":"irStrategy","type":"address"},{"internalType":"address","name":"reinvestmentController","type":"address"},{"internalType":"address","name":"feeReceiver","type":"address"},{"internalType":"uint256","name":"deficitRay","type":"uint256"}],"internalType":"structAaveV4View.HubAssetData","name":"hubAssetData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"getLoanData","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"riskPremium","type":"uint256"},{"internalType":"uint256","name":"avgCollateralFactor","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"},{"internalType":"uint256","name":"totalCollateralInUsd","type":"uint256"},{"internalType":"uint256","name":"totalDebtInUsd","type":"uint256"},{"internalType":"uint256","name":"activeCollateralCount","type":"uint256"},{"internalType":"uint256","name":"borrowedCount","type":"uint256"},{"components":[{"internalType":"uint256","name":"reserveId","type":"uint256"},{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint256","name":"supplied","type":"uint256"},{"internalType":"uint256","name":"drawn","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint32","name":"maxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"liquidationFee","type":"uint16"},{"internalType":"bool","name":"isUsingAsCollateral","type":"bool"},{"internalType":"bool","name":"isBorrowing","type":"bool"}],"internalType":"structAaveV4View.UserReserveData[]","name":"reserves","type":"tuple[]"}],"internalType":"structAaveV4View.LoanData","name":"loanData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address[]","name":"_spokes","type":"address[]"}],"name":"getLoanDataForMultipleSpokes","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"riskPremium","type":"uint256"},{"internalType":"uint256","name":"avgCollateralFactor","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"},{"internalType":"uint256","name":"totalCollateralInUsd","type":"uint256"},{"internalType":"uint256","name":"totalDebtInUsd","type":"uint256"},{"internalType":"uint256","name":"activeCollateralCount","type":"uint256"},{"internalType":"uint256","name":"borrowedCount","type":"uint256"},{"components":[{"internalType":"uint256","name":"reserveId","type":"uint256"},{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint256","name":"supplied","type":"uint256"},{"internalType":"uint256","name":"drawn","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint32","name":"maxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"liquidationFee","type":"uint16"},{"internalType":"bool","name":"isUsingAsCollateral","type":"bool"},{"internalType":"bool","name":"isBorrowing","type":"bool"}],"internalType":"structAaveV4View.UserReserveData[]","name":"reserves","type":"tuple[]"}],"internalType":"structAaveV4View.LoanData[]","name":"loans","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"getLoanDataForMultipleUsers","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"riskPremium","type":"uint256"},{"internalType":"uint256","name":"avgCollateralFactor","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"},{"internalType":"uint256","name":"totalCollateralInUsd","type":"uint256"},{"internalType":"uint256","name":"totalDebtInUsd","type":"uint256"},{"internalType":"uint256","name":"activeCollateralCount","type":"uint256"},{"internalType":"uint256","name":"borrowedCount","type":"uint256"},{"components":[{"internalType":"uint256","name":"reserveId","type":"uint256"},{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint256","name":"supplied","type":"uint256"},{"internalType":"uint256","name":"drawn","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint32","name":"maxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"liquidationFee","type":"uint16"},{"internalType":"bool","name":"isUsingAsCollateral","type":"bool"},{"internalType":"bool","name":"isBorrowing","type":"bool"}],"internalType":"structAaveV4View.UserReserveData[]","name":"reserves","type":"tuple[]"}],"internalType":"structAaveV4View.LoanData[]","name":"loans","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"getLoanDataFull","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"riskPremium","type":"uint256"},{"internalType":"uint256","name":"avgCollateralFactor","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"},{"internalType":"uint256","name":"totalCollateralInUsd","type":"uint256"},{"internalType":"uint256","name":"totalDebtInUsd","type":"uint256"},{"internalType":"uint256","name":"activeCollateralCount","type":"uint256"},{"internalType":"uint256","name":"borrowedCount","type":"uint256"},{"components":[{"internalType":"uint256","name":"reserveId","type":"uint256"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bool","name":"isUsingAsCollateral","type":"bool"},{"internalType":"bool","name":"isBorrowing","type":"bool"},{"internalType":"bool","name":"reservePaused","type":"bool"},{"internalType":"bool","name":"reserveFrozen","type":"bool"},{"internalType":"bool","name":"borrowable","type":"bool"},{"internalType":"bool","name":"spokeActive","type":"bool"},{"internalType":"bool","name":"spokePaused","type":"bool"},{"internalType":"uint256","name":"userSupplied","type":"uint256"},{"internalType":"uint256","name":"userDrawn","type":"uint256"},{"internalType":"uint256","name":"userPremium","type":"uint256"},{"internalType":"uint256","name":"userTotalDebt","type":"uint256"},{"internalType":"uint24","name":"collateralRisk","type":"uint24"},{"internalType":"uint16","name":"userCollateralFactor","type":"uint16"},{"internalType":"uint32","name":"userMaxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"userLiquidationFee","type":"uint16"},{"internalType":"uint16","name":"latestCollateralFactor","type":"uint16"},{"internalType":"uint32","name":"latestMaxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"latestLiquidationFee","type":"uint16"},{"internalType":"address","name":"hub","type":"address"},{"internalType":"uint16","name":"hubAssetId","type":"uint16"},{"internalType":"uint256","name":"hubLiquidity","type":"uint256"},{"internalType":"uint96","name":"drawnRate","type":"uint96"},{"internalType":"uint120","name":"drawnIndex","type":"uint120"},{"internalType":"uint256","name":"spokeTotalSupplied","type":"uint256"},{"internalType":"uint256","name":"spokeTotalDrawn","type":"uint256"},{"internalType":"uint256","name":"spokeTotalPremium","type":"uint256"},{"internalType":"uint256","name":"spokeTotalDebt","type":"uint256"},{"internalType":"uint256","name":"spokeSupplyCap","type":"uint256"},{"internalType":"uint256","name":"spokeBorrowCap","type":"uint256"},{"internalType":"uint256","name":"spokeDeficitRay","type":"uint256"}],"internalType":"structAaveV4View.UserReserveDataFull[]","name":"reserves","type":"tuple[]"}],"internalType":"structAaveV4View.LoanDataWithFullReserves","name":"loanData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"uint256","name":"_reserveId","type":"uint256"}],"name":"getReserveData","outputs":[{"components":[{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"structAaveV4View.ReserveData","name":"reserveData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"uint256","name":"_reserveId","type":"uint256"}],"name":"getReserveDataFull","outputs":[{"components":[{"internalType":"address","name":"underlying","type":"address"},{"internalType":"address","name":"hub","type":"address"},{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bool","name":"frozen","type":"bool"},{"internalType":"bool","name":"borrowable","type":"bool"},{"internalType":"uint24","name":"collateralRisk","type":"uint24"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint32","name":"maxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"liquidationFee","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalSupplied","type":"uint256"},{"internalType":"uint256","name":"totalDrawn","type":"uint256"},{"internalType":"uint256","name":"totalPremium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"deficitRay","type":"uint256"},{"internalType":"bool","name":"spokeActive","type":"bool"},{"internalType":"bool","name":"spokePaused","type":"bool"}],"internalType":"structAaveV4View.ReserveDataFull","name":"reserveData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"uint256","name":"_reserveId","type":"uint256"}],"name":"getReservePrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"uint256[]","name":"_reserveIds","type":"uint256[]"}],"name":"getReservePrices","outputs":[{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"uint256[]","name":"_reserveIds","type":"uint256[]"}],"name":"getReservesData","outputs":[{"components":[{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"structAaveV4View.ReserveData[]","name":"reserveData","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"uint256[]","name":"_reserveIds","type":"uint256[]"}],"name":"getReservesDataFull","outputs":[{"components":[{"internalType":"address","name":"underlying","type":"address"},{"internalType":"address","name":"hub","type":"address"},{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bool","name":"frozen","type":"bool"},{"internalType":"bool","name":"borrowable","type":"bool"},{"internalType":"uint24","name":"collateralRisk","type":"uint24"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint32","name":"maxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"liquidationFee","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalSupplied","type":"uint256"},{"internalType":"uint256","name":"totalDrawn","type":"uint256"},{"internalType":"uint256","name":"totalPremium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"deficitRay","type":"uint256"},{"internalType":"bool","name":"spokeActive","type":"bool"},{"internalType":"bool","name":"spokePaused","type":"bool"}],"internalType":"structAaveV4View.ReserveDataFull[]","name":"reserveData","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"}],"name":"getSpokeData","outputs":[{"components":[{"internalType":"uint128","name":"targetHealthFactor","type":"uint128"},{"internalType":"uint64","name":"healthFactorForMaxBonus","type":"uint64"},{"internalType":"uint16","name":"liquidationBonusFactor","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint256","name":"oracleDecimals","type":"uint256"},{"internalType":"uint256","name":"reserveCount","type":"uint256"}],"internalType":"structAaveV4View.SpokeData","name":"spokeData","type":"tuple"},{"components":[{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"structAaveV4View.ReserveData[]","name":"reserves","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"}],"name":"getSpokeDataFull","outputs":[{"components":[{"internalType":"uint128","name":"targetHealthFactor","type":"uint128"},{"internalType":"uint64","name":"healthFactorForMaxBonus","type":"uint64"},{"internalType":"uint16","name":"liquidationBonusFactor","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint256","name":"oracleDecimals","type":"uint256"},{"internalType":"uint256","name":"reserveCount","type":"uint256"}],"internalType":"structAaveV4View.SpokeData","name":"spokeData","type":"tuple"},{"components":[{"internalType":"address","name":"underlying","type":"address"},{"internalType":"address","name":"hub","type":"address"},{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bool","name":"frozen","type":"bool"},{"internalType":"bool","name":"borrowable","type":"bool"},{"internalType":"uint24","name":"collateralRisk","type":"uint24"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint32","name":"maxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"liquidationFee","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"totalSupplied","type":"uint256"},{"internalType":"uint256","name":"totalDrawn","type":"uint256"},{"internalType":"uint256","name":"totalPremium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"deficitRay","type":"uint256"},{"internalType":"bool","name":"spokeActive","type":"bool"},{"internalType":"bool","name":"spokePaused","type":"bool"}],"internalType":"structAaveV4View.ReserveDataFull[]","name":"reserves","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_hub","type":"address"},{"internalType":"uint256","name":"_assetId","type":"uint256"}],"name":"getSpokesForAsset","outputs":[{"internalType":"address[]","name":"spokes","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spoke","type":"address"},{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256[]","name":"_reserveIds","type":"uint256[]"}],"name":"getUserReserveData","outputs":[{"components":[{"internalType":"uint256","name":"reserveId","type":"uint256"},{"internalType":"uint16","name":"assetId","type":"uint16"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint256","name":"supplied","type":"uint256"},{"internalType":"uint256","name":"drawn","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint16","name":"collateralFactor","type":"uint16"},{"internalType":"uint32","name":"maxLiquidationBonus","type":"uint32"},{"internalType":"uint16","name":"liquidationFee","type":"uint16"},{"internalType":"bool","name":"isUsingAsCollateral","type":"bool"},{"internalType":"bool","name":"isBorrowing","type":"bool"}],"internalType":"structAaveV4View.UserReserveData[]","name":"_userReserves","type":"tuple[]"}],"stateMutability":"view","type":"function"}],
1324
+ "networks": {
1325
+ "1": {
1326
+ "address": "0xF0D440dE7f82A1e598992A648E5Bfa5d69b8E3a9",
1327
+ }
1328
+ }
1321
1329
  } as const;
package/src/contracts.ts CHANGED
@@ -169,4 +169,6 @@ export const YearnViewContractViem = createViemContractFromConfigFunc('YearnView
169
169
 
170
170
  export const MakerDsrContractViem = createViemContractFromConfigFunc('MakerDsr');
171
171
 
172
- export const SkySavingsContractView = createViemContractFromConfigFunc('SkySavings');
172
+ export const SkySavingsContractView = createViemContractFromConfigFunc('SkySavings');
173
+
174
+ export const AaveV4ViewContractViem = createViemContractFromConfigFunc('AaveV4View');
@@ -0,0 +1,69 @@
1
+ import Dec from 'decimal.js';
2
+ import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
3
+ import {
4
+ AaveV4AggregatedPositionData, AaveV4AssetsData, AaveV4ReserveAssetData, AaveV4UsedReserveAsset, AaveV4UsedReserveAssets,
5
+ } from '../../types';
6
+ import { NetworkNumber } from '../../types/common';
7
+
8
+ export const aaveV4GetCollateralFactor = (assetData: AaveV4ReserveAssetData, usedAssetData: AaveV4UsedReserveAsset, useUserCollateralFactor: boolean = false): number => (useUserCollateralFactor ? usedAssetData.collateralFactor : assetData.collateralFactor);
9
+
10
+ export const aaveV4GetAggregatedPositionData = ({
11
+ usedAssets,
12
+ assetsData,
13
+ network,
14
+ useUserCollateralFactor = false,
15
+ }: {
16
+ usedAssets: AaveV4UsedReserveAssets,
17
+ assetsData: AaveV4AssetsData,
18
+ network: NetworkNumber,
19
+ useUserCollateralFactor?: boolean,
20
+ }): AaveV4AggregatedPositionData => {
21
+ const payload = {} as AaveV4AggregatedPositionData;
22
+ payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }: { isSupplied: boolean }) => isSupplied, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
23
+ payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }: { isSupplied: boolean, collateral: string }) => isSupplied && collateral, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
24
+ payload.borrowLimitUsd = getAssetsTotal(
25
+ usedAssets,
26
+ ({ isSupplied, collateral }: { isSupplied: boolean, collateral: string }) => isSupplied && collateral,
27
+ ({ symbol, suppliedUsd, reserveId }: { symbol: string, suppliedUsd: string, reserveId: number }) => new Dec(suppliedUsd).mul(aaveV4GetCollateralFactor(assetsData[`${symbol}-${reserveId}`], usedAssets[`${symbol}-${reserveId}`], useUserCollateralFactor)),
28
+ );
29
+ payload.liquidationLimitUsd = payload.borrowLimitUsd;
30
+ payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ borrowedUsd }: { borrowedUsd: string }) => borrowedUsd);
31
+ payload.drawnUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ drawnUsd }: { drawnUsd: string }) => drawnUsd);
32
+ payload.premiumUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ premiumUsd }: { premiumUsd: string }) => premiumUsd);
33
+ const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
34
+ payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
35
+ payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
36
+ payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
37
+ payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
38
+ payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
39
+ const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
40
+ payload.leveragedType = leveragedType;
41
+ payload.leveragedAsset = leveragedAsset;
42
+ payload.liquidationPrice = '';
43
+ if (leveragedType !== '') {
44
+ const leveragedAssetData = Object.values(assetsData).find((asset) => asset.symbol === leveragedAsset);
45
+ let assetPrice = leveragedAssetData?.price || '0';
46
+ if (leveragedType === 'lsd-leverage') {
47
+ // Treat ETH like a stablecoin in a long stETH position
48
+ const ethPrice = Object.values(assetsData).find((asset) => asset.symbol === 'ETH')?.price || '0';
49
+ payload.leveragedLsdAssetRatio = new Dec(leveragedAssetData?.price || '0').div(ethPrice).toDP(18).toString();
50
+ assetPrice = new Dec(assetPrice).div(ethPrice).toString();
51
+ }
52
+ payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
53
+ }
54
+ payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
55
+ payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
56
+ // payload.healthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
57
+ payload.minHealthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowLimitUsd).toDP(4).toString();
58
+
59
+ // TODO: Re-implement netApy calculation
60
+ // const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({
61
+ // usedAssets,
62
+ // assetsData,
63
+ // optionalData: { healthRatio: payload.healthRatio },
64
+ // });
65
+ payload.netApy = '0';
66
+ payload.incentiveUsd = '0';
67
+ payload.totalInterestUsd = '0';
68
+ return payload;
69
+ };
@@ -8,3 +8,4 @@ export * as llamaLendHelpers from './llamaLendHelpers';
8
8
  export * as liquityV2Helpers from './liquityV2Helpers';
9
9
  export * as eulerV2Helpers from './eulerHelpers';
10
10
  export * as fluidHelpers from './fluidHelpers';
11
+ export * as aaveV4Helpers from './aaveV4Helpers';
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import './setup';
2
2
 
3
3
  import * as fluid from './fluid';
4
+ import * as aaveV4 from './aaveV4';
4
5
  import * as aaveV3 from './aaveV3';
5
6
  import * as aaveV2 from './aaveV2';
6
7
  import * as compoundV3 from './compoundV3';
@@ -27,6 +28,7 @@ export * from './types';
27
28
  export {
28
29
  aaveV2,
29
30
  aaveV3,
31
+ aaveV4,
30
32
  compoundV2,
31
33
  compoundV3,
32
34
  spark,
@@ -20,7 +20,7 @@ export const aaveV3AssetsDefaultMarketBase = ['ETH', 'cbETH', 'USDbC', 'wstETH',
20
20
 
21
21
  export const aaveV3AssetsDefaultMarketLinea = ['ETH', 'USDC', 'weETH', 'ezETH', 'USDT', 'wstETH', 'wrsETH', 'WBTC', 'mUSD'];
22
22
 
23
- export const aaveV3AssetsDefaultMarketPlasma = ['ETH', 'USDT', 'sUSDe', 'USDe', 'weETH', 'XAUt', 'PT USDe Jan', 'PT sUSDe Jan', 'wrsETH', 'wstETH', 'syrupUSDT', 'XPL'];
23
+ export const aaveV3AssetsDefaultMarketPlasma = ['ETH', 'USDT', 'sUSDe', 'USDe', 'weETH', 'XAUt', 'PT USDe Jan', 'PT sUSDe Jan', 'wrsETH', 'wstETH', 'syrupUSDT', 'XPL', 'PT USDe Apr', 'PT sUSDe Apr'];
24
24
 
25
25
  // @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
26
26
  export const aaveV3AssetsDefaultMarket = {
@@ -0,0 +1,19 @@
1
+ import { AaveV4SpokeInfo, AaveV4SpokesType } from '../../types';
2
+ import { NetworkNumber } from '../../types/common';
3
+
4
+ export const AAVE_V4_CORE_SPOKE = (networkId: NetworkNumber): AaveV4SpokeInfo => ({
5
+ chainIds: [NetworkNumber.Eth],
6
+ label: 'Core Spoke',
7
+ value: AaveV4SpokesType.AaveV4CoreSpoke,
8
+ url: 'core',
9
+ address: '0xBa97c5E52cd5BC3D7950Ae70779F8FfE92d40CdC',
10
+ hubs: [
11
+ '0xaD905aD5EA5B98cD50AE40Cfe368344686a21366',
12
+ ],
13
+ });
14
+
15
+ export const AaveV4Spokes = (networkId: NetworkNumber) => ({
16
+ [AaveV4SpokesType.AaveV4CoreSpoke]: AAVE_V4_CORE_SPOKE(networkId),
17
+ }) as const;
18
+
19
+ export const getAaveV4SpokeTypeInfo = (type: AaveV4SpokesType, network?: NetworkNumber) => ({ ...AaveV4Spokes(network ?? NetworkNumber.Eth) }[type]);
@@ -23,3 +23,4 @@ export { EulerV2Markets } from './euler';
23
23
  export {
24
24
  FluidMarkets, getFluidVersionsDataForNetwork, getFluidMarketInfoById, getFTokenAddress, getFluidMarketInfoByAddress,
25
25
  } from './fluid';
26
+ export { AaveV4Spokes } from './aaveV4';
@@ -24,7 +24,7 @@ export const STABLE_ASSETS = [
24
24
  'DAI', 'USDC', 'USDT', 'TUSD', 'USDP', 'GUSD', 'BUSD', 'SUSD', 'FRAX', 'LUSD', 'USDC.e', 'GHO', 'sDAI', 'USDA',
25
25
  'USDe', 'sUSDe', 'USDS', 'sUSDS', 'USR', 'EURC', 'BOLD', 'BOLD Legacy', 'RLUSD', 'PT sUSDe July', 'PT eUSDe May',
26
26
  'USDtb', 'eUSDe', 'PT USDe July', 'PT eUSDe Aug', 'PT sUSDe Sep', 'PT USDe Sep', 'PT sUSDe Nov', 'PT USDe Nov', 'PT sUSDe Jan', 'PT USDe Jan',
27
- 'PT sUSDe Feb', 'PT USDe Feb',
27
+ 'PT sUSDe Feb', 'PT USDe Feb', 'PT USDe Apr', 'PT sUSDe Apr',
28
28
  ];
29
29
 
30
30
  export const isLeveragedPos = (usedAssets: MMUsedAssets, dustLimit = 5) => {
@@ -2,6 +2,7 @@ import Dec from 'decimal.js';
2
2
  import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
3
3
  import {
4
4
  AaveMarkets,
5
+ AaveV4Spokes,
5
6
  CompoundMarkets,
6
7
  CrvUsdMarkets,
7
8
  EulerV2Markets,
@@ -14,6 +15,7 @@ import { _getMorphoBlueAccountData, _getMorphoBlueMarketData, getMorphoEarn } fr
14
15
  import {
15
16
  AaveV2MarketData,
16
17
  AaveV3MarketData,
18
+ AaveV4SpokeData,
17
19
  AaveVersions,
18
20
  CdpInfo,
19
21
  CompoundV2MarketsData,
@@ -49,6 +51,7 @@ import { fetchSparkAirdropRewards, fetchSparkRewards } from '../claiming/spark';
49
51
  import { fetchMorphoBlueRewards } from '../claiming/morphoBlue';
50
52
  import { getKingRewards } from '../claiming/king';
51
53
  import { fetchEthenaAirdropRewards } from '../claiming/ethena';
54
+ import { _getAaveV4AccountData, _getAaveV4SpokeData } from '../aaveV4';
52
55
 
53
56
  export async function getPortfolioData(provider: EthereumProvider, network: NetworkNumber, defaultProvider: EthereumProvider, addresses: EthAddress[], summerFiAddresses: EthAddress[]): Promise<{
54
57
  positions: PortfolioPositionsData;
@@ -71,6 +74,7 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
71
74
  const llamaLendMarkets = [NetworkNumber.Eth, NetworkNumber.Arb].includes(network) ? Object.values(LlamaLendMarkets(network)).filter((market) => market.chainIds.includes(network)) : [];
72
75
  const liquityV2Markets = [NetworkNumber.Eth].includes(network) ? Object.values(LiquityV2Markets(network)) : [];
73
76
  const liquityV2MarketsStaking = [NetworkNumber.Eth].includes(network) ? Object.values(LiquityV2Markets(network)).filter(market => !market.isLegacy) : [];
77
+ const aaveV4Spokes = Object.values(AaveV4Spokes(network)).filter((market) => market.chainIds.includes(network));
74
78
 
75
79
  const client = getViemProvider(provider, network, {
76
80
  batch: {
@@ -98,6 +102,7 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
98
102
  const crvUsdMarketsData: Record<string, CrvUSDGlobalMarketData> = {};
99
103
  const llamaLendMarketsData: Record<string, LlamaLendGlobalMarketData> = {};
100
104
  const liquityV2MarketsData: Record<string, LiquityV2MarketData> = {};
105
+ const aaveV4SpokesData: Record<string, AaveV4SpokeData> = {};
101
106
 
102
107
  const markets = {
103
108
  morphoMarketsData,
@@ -110,6 +115,7 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
110
115
  crvUsdMarketsData,
111
116
  llamaLendMarketsData,
112
117
  liquityV2MarketsData,
118
+ aaveV4SpokesData,
113
119
  };
114
120
 
115
121
  const positions: PortfolioPositionsData = {};
@@ -120,6 +126,7 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
120
126
  for (const address of allAddresses) {
121
127
  positions[address.toLowerCase() as EthAddress] = {
122
128
  aaveV3: {},
129
+ aaveV4: {},
123
130
  morphoBlue: {},
124
131
  compoundV3: {},
125
132
  spark: {},
@@ -188,6 +195,10 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
188
195
  const marketData = await _getAaveV3MarketData(client, network, market);
189
196
  aaveV3MarketsData[market.value] = marketData;
190
197
  }),
198
+ ...aaveV4Spokes.map(async (spoke) => {
199
+ const spokeData = await _getAaveV4SpokeData(client, network, spoke);
200
+ aaveV4SpokesData[spoke.value] = spokeData;
201
+ }),
191
202
  ...aaveV2Markets.map(async (market) => {
192
203
  const marketData = await _getAaveV2MarketsData(client, network, market);
193
204
  aaveV2MarketsData[market.value] = marketData;
@@ -441,6 +452,15 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
441
452
  positions[address.toLowerCase() as EthAddress].aaveV3[market.value] = { error: `Error fetching AaveV3 account data for address ${address} on market ${market.value}`, data: null };
442
453
  }
443
454
  })).flat(),
455
+ ...aaveV4Spokes.map((spoke) => allAddresses.map(async (address) => {
456
+ try {
457
+ const accData = await _getAaveV4AccountData(client, network, aaveV4SpokesData[spoke.value], address);
458
+ if (new Dec(accData.suppliedUsd).gt(0)) positions[address.toLowerCase() as EthAddress].aaveV4[spoke.value] = { error: '', data: accData };
459
+ } catch (error) {
460
+ console.error(`Error fetching AaveV4 account data for address ${address} on spoke ${spoke.value}:`, error);
461
+ positions[address.toLowerCase() as EthAddress].aaveV4[spoke.value] = { error: `Error fetching AaveV4 account data for address ${address} on spoke ${spoke.value}`, data: null };
462
+ }
463
+ })).flat(),
444
464
  ...morphoMarkets.map((market) => addresses.map(async (address) => {
445
465
  try {
446
466
  const [accDataPromise, earnDataPromise] = await Promise.allSettled([
@@ -64,7 +64,7 @@ export const STAKING_ASSETS = [
64
64
  'cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH',
65
65
  'ezETH', 'ETHx', 'rsETH', 'pufETH', 'wrsETH', 'wsuperOETHb', 'sUSDS', 'tETH', 'PT sUSDe Sep', 'PT USDe Sep',
66
66
  'PT sUSDe Nov', 'PT USDe Nov', 'PT USDe Jan', 'PT sUSDe Jan', 'wrsETH', 'wstETH', 'syrupUSDT', 'syrupUSDC', 'wstUSR',
67
- 'PT sUSDe Feb', 'PT USDe Feb',
67
+ 'PT sUSDe Feb', 'PT USDe Feb', 'PT USDe Apr', 'PT sUSDe Apr',
68
68
  ];
69
69
 
70
70
  export const getStakingApy = memoize(async (asset: string, network: number = NetworkNumber.Eth) => {
@@ -99,6 +99,8 @@ export const getStakingApy = memoize(async (asset: string, network: number = Net
99
99
  if (asset === 'wstUSR') return await getApyFromDfsApi('wstUSR');
100
100
  if (asset === 'PT sUSDe Feb') return await getApyFromDfsApi('PT sUSDe Feb', network);
101
101
  if (asset === 'PT USDe Feb') return await getApyFromDfsApi('PT USDe Feb', network);
102
+ if (asset === 'PT sUSDe Apr') return await getApyFromDfsApi('PT sUSDe Apr', network);
103
+ if (asset === 'PT USDe Apr') return await getApyFromDfsApi('PT USDe Apr', network);
102
104
  } catch (e) {
103
105
  console.error(`Failed to fetch APY for ${asset}`);
104
106
  }
@@ -0,0 +1,142 @@
1
+ import { EthAddress, IncentiveData, NetworkNumber } from './common';
2
+
3
+ export enum AaveV4SpokesType {
4
+ AaveV4CoreSpoke = 'aave_v4_core_spoke',
5
+ }
6
+
7
+ export enum AaveV4HubsType {
8
+ AaveV4CoreHub = 'aave_v4_core_hub',
9
+ }
10
+
11
+ export interface AaveV4SpokeInfo {
12
+ chainIds: NetworkNumber[],
13
+ label: string,
14
+ value: AaveV4SpokesType,
15
+ url: string,
16
+ address: EthAddress,
17
+ hubs: EthAddress[],
18
+ }
19
+
20
+ export interface AaveV4HubAssetOnChainData {
21
+ assetId: number,
22
+ drawnRate: bigint,
23
+ }
24
+
25
+ export interface AaveV4HubOnChainData {
26
+ assets: Record<number, AaveV4HubAssetOnChainData>,
27
+ }
28
+
29
+ export interface AaveV4ReserveAssetOnChain {
30
+ underlying: EthAddress,
31
+ hub: EthAddress,
32
+ assetId: number,
33
+ decimals: number,
34
+ paused: boolean,
35
+ frozen: boolean,
36
+ borrowable: boolean,
37
+ collateralRisk: number,
38
+ collateralFactor: number,
39
+ maxLiquidationBonus: number,
40
+ liquidationFee: number,
41
+ price: bigint,
42
+ totalSupplied: bigint,
43
+ totalDrawn: bigint,
44
+ totalPremium: bigint,
45
+ totalDebt: bigint,
46
+ supplyCap: bigint,
47
+ borrowCap: bigint,
48
+ deficitRay: bigint,
49
+ spokeActive: boolean,
50
+ spokePaused: boolean
51
+ }
52
+
53
+ export interface AaveV4ReserveAssetData {
54
+ symbol: string,
55
+ underlying: EthAddress,
56
+ hub: EthAddress,
57
+ assetId: number,
58
+ reserveId: number,
59
+ paused: boolean,
60
+ frozen: boolean,
61
+ borrowable: boolean,
62
+ collateralRisk: number,
63
+ collateralFactor: number,
64
+ liquidationFee: number,
65
+ price: string,
66
+ totalSupplied: string,
67
+ totalDrawn: string,
68
+ totalPremium: string,
69
+ totalDebt: string,
70
+ supplyCap: string,
71
+ borrowCap: string,
72
+ spokeActive: boolean,
73
+ spokePaused: boolean,
74
+ drawnRate: string,
75
+ supplyRate: string,
76
+ supplyIncentives: IncentiveData[];
77
+ borrowIncentives: IncentiveData[];
78
+ canBeBorrowed: boolean;
79
+ canBeSupplied: boolean;
80
+ canBeWithdrawn: boolean;
81
+ canBePayBacked: boolean;
82
+ utilization: string;
83
+ }
84
+
85
+ export type AaveV4AssetsData = Record<string, AaveV4ReserveAssetData>;
86
+
87
+ export interface AaveV4SpokeData {
88
+ assetsData: AaveV4AssetsData,
89
+ oracle: EthAddress,
90
+ oracleDecimals: number,
91
+ address: EthAddress,
92
+ }
93
+
94
+ export interface AaveV4UsedReserveAsset {
95
+ symbol: string,
96
+ assetId: number,
97
+ reserveId: number,
98
+ supplied: string,
99
+ suppliedUsd: string,
100
+ drawn: string,
101
+ drawnUsd: string,
102
+ premium: string,
103
+ premiumUsd: string,
104
+ borrowed: string,
105
+ borrowedUsd: string,
106
+ isSupplied: boolean,
107
+ isBorrowed: boolean,
108
+ collateral: boolean,
109
+ collateralFactor: number,
110
+ }
111
+
112
+ export interface AaveV4AggregatedPositionData {
113
+ suppliedUsd: string,
114
+ suppliedCollateralUsd: string,
115
+ borrowLimitUsd: string,
116
+ liquidationLimitUsd: string,
117
+ borrowedUsd: string,
118
+ drawnUsd: string,
119
+ premiumUsd: string,
120
+ leftToBorrowUsd: string,
121
+ ratio: string,
122
+ collRatio: string,
123
+ liqRatio: string,
124
+ liqPercent: string,
125
+ leveragedType: string,
126
+ leveragedAsset: string,
127
+ liquidationPrice: string,
128
+ leveragedLsdAssetRatio?: string,
129
+ minCollRatio: string,
130
+ collLiquidationRatio: string,
131
+ minHealthRatio: string,
132
+ netApy: string,
133
+ incentiveUsd: string,
134
+ totalInterestUsd: string,
135
+ }
136
+
137
+ export type AaveV4UsedReserveAssets = Record<string, AaveV4UsedReserveAsset>;
138
+
139
+ export interface AaveV4AccountData extends AaveV4AggregatedPositionData {
140
+ usedAssets: AaveV4UsedReserveAssets,
141
+ healthFactor: string,
142
+ }
@@ -12,4 +12,5 @@ export * from './fluid';
12
12
  export * from './portfolio';
13
13
  export * from './merit';
14
14
  export * from './merkl';
15
- export * from './savings';
15
+ export * from './savings';
16
+ export * from './aaveV4';
@@ -1,4 +1,5 @@
1
1
  import { AaveV2PositionData, AaveV3PositionData, AaveVersions } from './aave';
2
+ import { AaveV4AccountData, AaveV4SpokesType } from './aaveV4';
2
3
  import { EthAddress } from './common';
3
4
  import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
4
5
  import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
@@ -54,6 +55,9 @@ export interface PortfolioPositionsDataForAddress {
54
55
  [key: string]: FluidVaultData;
55
56
  };
56
57
  };
58
+ aaveV4: {
59
+ [key in AaveV4SpokesType]?: PortfolioProtocolData<AaveV4AccountData>;
60
+ };
57
61
  }
58
62
 
59
63
  export interface PortfolioPositionsData {