@defisaver/positions-sdk 2.1.79 → 2.1.82

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 (75) hide show
  1. package/cjs/aaveV4/index.d.ts +7 -0
  2. package/cjs/aaveV4/index.js +243 -0
  3. package/cjs/aaveV4/lend.d.ts +55 -0
  4. package/cjs/aaveV4/lend.js +131 -0
  5. package/cjs/config/contracts.d.ts +1551 -0
  6. package/cjs/config/contracts.js +9 -0
  7. package/cjs/contracts.d.ts +32741 -0
  8. package/cjs/contracts.js +2 -1
  9. package/cjs/eulerV2/index.d.ts +1 -2
  10. package/cjs/eulerV2/index.js +4 -5
  11. package/cjs/helpers/aaveV4Helpers/index.d.ts +25 -0
  12. package/cjs/helpers/aaveV4Helpers/index.js +233 -0
  13. package/cjs/helpers/index.d.ts +1 -0
  14. package/cjs/helpers/index.js +2 -1
  15. package/cjs/index.d.ts +2 -1
  16. package/cjs/index.js +3 -1
  17. package/cjs/markets/aaveV4/index.d.ts +34 -0
  18. package/cjs/markets/aaveV4/index.js +182 -0
  19. package/cjs/markets/index.d.ts +1 -0
  20. package/cjs/markets/index.js +3 -1
  21. package/cjs/moneymarket/moneymarketCommonService.js +1 -1
  22. package/cjs/portfolio/index.js +20 -0
  23. package/cjs/services/utils.d.ts +1 -1
  24. package/cjs/services/utils.js +3 -3
  25. package/cjs/types/aaveV4.d.ts +159 -0
  26. package/cjs/types/aaveV4.js +22 -0
  27. package/cjs/types/index.d.ts +1 -0
  28. package/cjs/types/index.js +1 -0
  29. package/cjs/types/portfolio.d.ts +4 -0
  30. package/esm/aaveV4/index.d.ts +7 -0
  31. package/esm/aaveV4/index.js +200 -0
  32. package/esm/aaveV4/lend.d.ts +55 -0
  33. package/esm/aaveV4/lend.js +124 -0
  34. package/esm/config/contracts.d.ts +1551 -0
  35. package/esm/config/contracts.js +8 -0
  36. package/esm/contracts.d.ts +32741 -0
  37. package/esm/contracts.js +1 -0
  38. package/esm/eulerV2/index.d.ts +1 -2
  39. package/esm/eulerV2/index.js +5 -6
  40. package/esm/helpers/aaveV4Helpers/index.d.ts +25 -0
  41. package/esm/helpers/aaveV4Helpers/index.js +221 -0
  42. package/esm/helpers/index.d.ts +1 -0
  43. package/esm/helpers/index.js +1 -0
  44. package/esm/index.d.ts +2 -1
  45. package/esm/index.js +2 -1
  46. package/esm/markets/aaveV4/index.d.ts +34 -0
  47. package/esm/markets/aaveV4/index.js +161 -0
  48. package/esm/markets/index.d.ts +1 -0
  49. package/esm/markets/index.js +1 -0
  50. package/esm/moneymarket/moneymarketCommonService.js +1 -1
  51. package/esm/portfolio/index.js +21 -1
  52. package/esm/services/utils.d.ts +1 -1
  53. package/esm/services/utils.js +1 -1
  54. package/esm/types/aaveV4.d.ts +159 -0
  55. package/esm/types/aaveV4.js +19 -0
  56. package/esm/types/index.d.ts +1 -0
  57. package/esm/types/index.js +1 -0
  58. package/esm/types/portfolio.d.ts +4 -0
  59. package/package.json +2 -2
  60. package/src/aaveV4/index.ts +221 -0
  61. package/src/aaveV4/lend.ts +185 -0
  62. package/src/config/contracts.ts +8 -0
  63. package/src/contracts.ts +2 -0
  64. package/src/eulerV2/index.ts +12 -7
  65. package/src/helpers/aaveV4Helpers/index.ts +291 -0
  66. package/src/helpers/index.ts +1 -0
  67. package/src/index.ts +2 -0
  68. package/src/markets/aaveV4/index.ts +191 -0
  69. package/src/markets/index.ts +6 -1
  70. package/src/moneymarket/moneymarketCommonService.ts +1 -1
  71. package/src/portfolio/index.ts +20 -0
  72. package/src/services/utils.ts +1 -1
  73. package/src/types/aaveV4.ts +175 -0
  74. package/src/types/index.ts +2 -1
  75. package/src/types/portfolio.ts +4 -0
@@ -1323,3 +1323,11 @@ export const SkySavings = {
1323
1323
  export const YearnV3Vault = {
1324
1324
  "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"}]}]
1325
1325
  } as const;
1326
+ export const AaveV4View = {
1327
+ "abi": [{"inputs":[{"internalType":"address","name":"_eoa","type":"address"},{"internalType":"address","name":"_proxy","type":"address"},{"internalType":"address","name":"_spoke","type":"address"}],"name":"getEOAApprovalsAndBalances","outputs":[{"components":[{"internalType":"address","name":"eoa","type":"address"},{"internalType":"address","name":"proxy","type":"address"},{"internalType":"address","name":"spoke","type":"address"},{"internalType":"bool","name":"giverPositionManagerEnabled","type":"bool"},{"internalType":"bool","name":"takerPositionManagerEnabled","type":"bool"},{"internalType":"bool","name":"configPositionManagerEnabled","type":"bool"},{"internalType":"bool","name":"canSetUsingAsCollateral","type":"bool"},{"internalType":"bool","name":"canUpdateUserRiskPremium","type":"bool"},{"internalType":"bool","name":"canUpdateUserDynamicConfig","type":"bool"},{"components":[{"internalType":"uint256","name":"reserveId","type":"uint256"},{"internalType":"address","name":"underlying","type":"address"},{"internalType":"uint256","name":"delegateeBorrowApproval","type":"uint256"},{"internalType":"uint256","name":"delegateeWithdrawApproval","type":"uint256"},{"internalType":"uint256","name":"eoaReserveBalance","type":"uint256"}],"internalType":"struct AaveV4View.EOAReserveApprovalData[]","name":"reserveApprovals","type":"tuple[]"}],"internalType":"struct AaveV4View.EOAApprovalData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"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":"totalDrawnShares","type":"uint256"},{"internalType":"uint256","name":"totalPremiumShares","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":"struct AaveV4View.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":"totalDrawnShares","type":"uint256"},{"internalType":"uint256","name":"totalPremiumShares","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":"struct AaveV4View.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":"totalDebtInUsdRay","type":"uint256"},{"internalType":"uint256","name":"activeCollateralCount","type":"uint256"},{"internalType":"uint256","name":"borrowCount","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":"struct AaveV4View.UserReserveData[]","name":"reserves","type":"tuple[]"}],"internalType":"struct AaveV4View.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":"totalDebtInUsdRay","type":"uint256"},{"internalType":"uint256","name":"activeCollateralCount","type":"uint256"},{"internalType":"uint256","name":"borrowCount","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":"struct AaveV4View.UserReserveData[]","name":"reserves","type":"tuple[]"}],"internalType":"struct AaveV4View.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":"totalDebtInUsdRay","type":"uint256"},{"internalType":"uint256","name":"activeCollateralCount","type":"uint256"},{"internalType":"uint256","name":"borrowCount","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":"struct AaveV4View.UserReserveData[]","name":"reserves","type":"tuple[]"}],"internalType":"struct AaveV4View.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":"totalDebtInUsdRay","type":"uint256"},{"internalType":"uint256","name":"activeCollateralCount","type":"uint256"},{"internalType":"uint256","name":"borrowCount","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":"spokeHalted","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":"struct AaveV4View.UserReserveDataFull[]","name":"reserves","type":"tuple[]"}],"internalType":"struct AaveV4View.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":"struct AaveV4View.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":"spokeHalted","type":"bool"}],"internalType":"struct AaveV4View.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":"struct AaveV4View.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":"spokeHalted","type":"bool"}],"internalType":"struct AaveV4View.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":"struct AaveV4View.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":"struct AaveV4View.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":"struct AaveV4View.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":"spokeHalted","type":"bool"}],"internalType":"struct AaveV4View.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"}],"name":"getTokenizationSpokeData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"spoke","type":"address"},{"internalType":"bool","name":"spokeActive","type":"bool"},{"internalType":"bool","name":"spokeHalted","type":"bool"},{"internalType":"uint256","name":"spokeDepositCap","type":"uint256"},{"internalType":"uint256","name":"spokeTotalAssets","type":"uint256"},{"internalType":"uint256","name":"spokeTotalShares","type":"uint256"},{"internalType":"address","name":"hub","type":"address"},{"internalType":"uint256","name":"hubLiquidity","type":"uint256"},{"internalType":"uint96","name":"hubDrawnRate","type":"uint96"},{"internalType":"uint256","name":"convertToShares","type":"uint256"},{"internalType":"uint256","name":"convertToAssets","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"userSuppliedAssets","type":"uint256"},{"internalType":"uint256","name":"userSuppliedShares","type":"uint256"}],"internalType":"struct AaveV4View.TokenizationSpokeData","name":"spokeData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_spokes","type":"address[]"},{"internalType":"address","name":"_user","type":"address"}],"name":"getTokenizationSpokesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"spoke","type":"address"},{"internalType":"bool","name":"spokeActive","type":"bool"},{"internalType":"bool","name":"spokeHalted","type":"bool"},{"internalType":"uint256","name":"spokeDepositCap","type":"uint256"},{"internalType":"uint256","name":"spokeTotalAssets","type":"uint256"},{"internalType":"uint256","name":"spokeTotalShares","type":"uint256"},{"internalType":"address","name":"hub","type":"address"},{"internalType":"uint256","name":"hubLiquidity","type":"uint256"},{"internalType":"uint96","name":"hubDrawnRate","type":"uint96"},{"internalType":"uint256","name":"convertToShares","type":"uint256"},{"internalType":"uint256","name":"convertToAssets","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"userSuppliedAssets","type":"uint256"},{"internalType":"uint256","name":"userSuppliedShares","type":"uint256"}],"internalType":"struct AaveV4View.TokenizationSpokeData[]","name":"spokeData","type":"tuple[]"}],"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":"struct AaveV4View.UserReserveData[]","name":"_userReserves","type":"tuple[]"}],"stateMutability":"view","type":"function"}],
1328
+ "networks": {
1329
+ "1": {
1330
+ "address": "0x274C0f0164A82B8771145651A8331A909c939e42",
1331
+ }
1332
+ }
1333
+ } as const;
package/src/contracts.ts CHANGED
@@ -179,3 +179,5 @@ export const YearnViewContractViem = createViemContractFromConfigFunc('YearnView
179
179
  export const MakerDsrContractViem = createViemContractFromConfigFunc('MakerDsr');
180
180
 
181
181
  export const SkySavingsContractView = createViemContractFromConfigFunc('SkySavings');
182
+
183
+ export const AaveV4ViewContractViem = createViemContractFromConfigFunc('AaveV4View');
@@ -1,12 +1,13 @@
1
1
  import Dec from 'decimal.js';
2
2
  import { assetAmountInEth, getAssetInfoByAddress } from '@defisaver/tokens';
3
3
  import { Client } from 'viem';
4
- import {
5
- EthAddress, EthereumProvider, IncentiveKind, NetworkNumber,
6
- } from '../types/common';
7
4
  import { getStakingApy, STAKING_ASSETS } from '../staking';
8
5
  import {
9
- compareAddresses, getEthAmountForDecimals, isMaxuint, wethToEth, wethToEthByAddress,
6
+ compareAddresses,
7
+ getEthAmountForDecimals,
8
+ isMaxUint,
9
+ wethToEth,
10
+ wethToEthByAddress,
10
11
  } from '../services/utils';
11
12
  import {
12
13
  EulerV2AssetData,
@@ -17,6 +18,10 @@ import {
17
18
  EulerV2PositionData,
18
19
  EulerV2UsedAssets,
19
20
  EulerV2VaultType,
21
+ EthAddress,
22
+ EthereumProvider,
23
+ IncentiveKind,
24
+ NetworkNumber,
20
25
  } from '../types';
21
26
  import {
22
27
  getEulerV2AggregatedData,
@@ -80,7 +85,7 @@ export const _getEulerV2MarketsData = async (provider: Client, network: NetworkN
80
85
  collateralFactor: new Dec(collateral.borrowLTV).div(10_000).toString(),
81
86
  totalBorrow: getEthAmountForDecimals(collateral.totalBorrows.toString(), decimals), // parse
82
87
  cash: getEthAmountForDecimals(collateral.cash.toString(), decimals),
83
- supplyCap: isMaxuint(collateral.supplyCap.toString()) ? collateral.supplyCap.toString() : getEthAmountForDecimals(collateral.supplyCap.toString(), decimals),
88
+ supplyCap: isMaxUint(collateral.supplyCap.toString()) ? collateral.supplyCap.toString() : getEthAmountForDecimals(collateral.supplyCap.toString(), decimals),
84
89
  borrowCap: '0',
85
90
  price: isInUSD ? assetAmountInEth(collateral.assetPriceInUnit.toString()) : new Dec(assetAmountInEth(collateral.assetPriceInUnit.toString())).mul(usdPrice).toString(), // 1e18 -> price in unitOfAccount (so it could be USD or any other token)
86
91
  canBeBorrowed: false,
@@ -128,8 +133,8 @@ export const _getEulerV2MarketsData = async (provider: Client, network: NetworkN
128
133
  decimals,
129
134
  totalBorrow: getEthAmountForDecimals(data.totalBorrows.toString(), decimals), // parse
130
135
  cash: getEthAmountForDecimals(data.cash.toString(), decimals),
131
- supplyCap: isMaxuint(data.supplyCap.toString()) ? data.supplyCap.toString() : getEthAmountForDecimals(data.supplyCap.toString(), decimals),
132
- borrowCap: isMaxuint(data.supplyCap.toString()) ? data.borrowCap.toString() : getEthAmountForDecimals(data.borrowCap.toString(), decimals),
136
+ supplyCap: isMaxUint(data.supplyCap.toString()) ? data.supplyCap.toString() : getEthAmountForDecimals(data.supplyCap.toString(), decimals),
137
+ borrowCap: isMaxUint(data.supplyCap.toString()) ? data.borrowCap.toString() : getEthAmountForDecimals(data.borrowCap.toString(), decimals),
133
138
  price: isInUSD ? assetAmountInEth(data.assetPriceInUnit.toString()) : new Dec(assetAmountInEth(data.assetPriceInUnit.toString())).mul(usdPrice).toString(), // 1e18 -> price in unitOfAccount (so it could be USD or any other token)
134
139
  sortIndex: 0,
135
140
  canBeBorrowed: true,
@@ -0,0 +1,291 @@
1
+ import Dec from 'decimal.js';
2
+ import {
3
+ aprToApy,
4
+ calcLeverageLiqPrice,
5
+ getAssetsTotal,
6
+ STABLE_ASSETS,
7
+ } from '../../moneymarket';
8
+ import { calculateInterestEarned } from '../../staking';
9
+ import {
10
+ AaveV4AggregatedPositionData,
11
+ AaveV4AssetsData,
12
+ AaveV4ReserveAssetData,
13
+ AaveV4UsedReserveAsset,
14
+ AaveV4UsedReserveAssets,
15
+ LeverageType,
16
+ NetworkNumber,
17
+ } from '../../types';
18
+
19
+ export const calcUserRiskPremiumBps = (usedAssets: AaveV4UsedReserveAssets, assetsData: AaveV4AssetsData): number => {
20
+ type CollateralInfo = { riskBps: number; valueUsd: Dec };
21
+ type DebtInfo = { valueUsd: Dec };
22
+
23
+ const collaterals: CollateralInfo[] = [];
24
+ const debts: DebtInfo[] = [];
25
+
26
+ Object.entries(usedAssets).forEach(([identifier, asset]) => {
27
+ const reserveData = assetsData[identifier];
28
+ if (!reserveData) return;
29
+
30
+ const borrowedUsdDec = new Dec(asset.borrowedUsd || '0');
31
+ if (asset.isBorrowed && borrowedUsdDec.gt(0)) {
32
+ debts.push({ valueUsd: borrowedUsdDec });
33
+ }
34
+
35
+ const suppliedUsdDec = new Dec(asset.suppliedUsd || '0');
36
+ const isActiveCollateral = asset.collateral
37
+ && asset.isSupplied
38
+ && asset.collateralFactor > 0
39
+ && suppliedUsdDec.gt(0);
40
+
41
+ if (isActiveCollateral) {
42
+ // collateralRisk is stored as a fraction (e.g. 0.25), convert back to bps
43
+ const riskBps = new Dec(reserveData.collateralRisk).mul(10000).toNumber();
44
+ collaterals.push({
45
+ riskBps,
46
+ valueUsd: suppliedUsdDec,
47
+ });
48
+ }
49
+ });
50
+
51
+ const totalDebtUsd = debts.reduce((sum, d) => sum.add(d.valueUsd), new Dec(0));
52
+
53
+ if (totalDebtUsd.lte(0)) {
54
+ return 0;
55
+ }
56
+
57
+ // sort by risk ASC, value DESC
58
+ collaterals.sort((a, b) => {
59
+ if (a.riskBps !== b.riskBps) return a.riskBps - b.riskBps;
60
+ return b.valueUsd.comparedTo(a.valueUsd);
61
+ });
62
+
63
+ let debtLeftToCover = totalDebtUsd;
64
+ let numerator = new Dec(0); // sum(coveredUsd * riskBps)
65
+ let coveredDebt = new Dec(0); // sum(coveredUsd)
66
+
67
+ collaterals.forEach(({ riskBps, valueUsd }) => {
68
+ if (debtLeftToCover.lte(0)) return;
69
+
70
+ const coveredUsd = Dec.min(valueUsd, debtLeftToCover);
71
+
72
+ numerator = numerator.add(coveredUsd.mul(riskBps));
73
+ coveredDebt = coveredDebt.add(coveredUsd);
74
+
75
+ debtLeftToCover = debtLeftToCover.sub(coveredUsd);
76
+ });
77
+
78
+ if (coveredDebt.lte(0)) {
79
+ return 0;
80
+ }
81
+
82
+ const riskPremiumBps = numerator.div(coveredDebt);
83
+ return riskPremiumBps.toNumber();
84
+ };
85
+
86
+ export const getApyAfterValuesEstimation = (
87
+ usedAssets: AaveV4UsedReserveAssets,
88
+ assetsData: AaveV4AssetsData,
89
+ ): Record<string, { borrowRate: string; supplyRate: string }> => {
90
+ const riskPremiumBps = calcUserRiskPremiumBps(usedAssets, assetsData);
91
+ const riskPremiumFraction = new Dec(riskPremiumBps).div(10000); // bps to fraction
92
+
93
+ const result: Record<string, { borrowRate: string; supplyRate: string }> = {};
94
+
95
+ Object.entries(assetsData).forEach(([identifier, assetData]) => {
96
+ const drawnRate = new Dec(assetData.drawnRate);
97
+ const baseBorrowApr = drawnRate.mul(100);
98
+ // finalBorrowRate = baseBorrowRate * (1 + riskPremiumFraction)
99
+ const userBorrowApr = baseBorrowApr.mul(new Dec(1).add(riskPremiumFraction));
100
+
101
+ result[identifier] = {
102
+ borrowRate: aprToApy(userBorrowApr.toString()),
103
+ // Supply rate is market-level (not user-specific), use existing value
104
+ supplyRate: assetData.supplyRate,
105
+ };
106
+ });
107
+
108
+ return result;
109
+ };
110
+
111
+ export const calculateNetApyAaveV4 = ({
112
+ usedAssets,
113
+ assetsData,
114
+ }: {
115
+ usedAssets: AaveV4UsedReserveAssets,
116
+ assetsData: AaveV4AssetsData,
117
+ }) => {
118
+ const riskPremiumBps = calcUserRiskPremiumBps(usedAssets, assetsData);
119
+ const riskPremiumFraction = new Dec(riskPremiumBps).div(10000);
120
+
121
+ const sumValues = Object.entries(usedAssets).reduce((_acc, [identifier, usedAsset]) => {
122
+ const acc = { ..._acc };
123
+ const assetData = assetsData[identifier];
124
+ if (!assetData) return acc;
125
+
126
+ if (usedAsset.isSupplied) {
127
+ const amount = usedAsset.suppliedUsd;
128
+ acc.suppliedUsd = new Dec(acc.suppliedUsd).add(amount).toString();
129
+ const supplyInterest = calculateInterestEarned(amount, assetData.supplyRate, 'year', true);
130
+ acc.supplyInterest = new Dec(acc.supplyInterest).add(supplyInterest.toString()).toString();
131
+
132
+ if (assetData.supplyIncentives) {
133
+ for (const supplyIncentive of assetData.supplyIncentives) {
134
+ const incentiveInterest = calculateInterestEarned(amount, supplyIncentive.apy, 'year', true);
135
+ acc.incentiveUsd = new Dec(acc.incentiveUsd).add(incentiveInterest).toString();
136
+ }
137
+ }
138
+ }
139
+
140
+ if (usedAsset.isBorrowed) {
141
+ const amount = usedAsset.borrowedUsd;
142
+ acc.borrowedUsd = new Dec(acc.borrowedUsd).add(amount).toString();
143
+ // User borrow rate = baseRate * (1 + riskPremiumFraction)
144
+ const drawnRate = new Dec(assetData.drawnRate);
145
+ const baseBorrowApr = drawnRate.mul(100);
146
+ const userBorrowApr = baseBorrowApr.mul(new Dec(1).add(riskPremiumFraction));
147
+ const userBorrowRate = aprToApy(userBorrowApr.toString());
148
+ const borrowInterest = calculateInterestEarned(amount, userBorrowRate, 'year', true);
149
+ acc.borrowInterest = new Dec(acc.borrowInterest).sub(borrowInterest.toString()).toString();
150
+
151
+ if (assetData.borrowIncentives) {
152
+ for (const borrowIncentive of assetData.borrowIncentives) {
153
+ const incentiveInterest = calculateInterestEarned(amount, borrowIncentive.apy, 'year', true);
154
+ acc.incentiveUsd = new Dec(acc.incentiveUsd).add(incentiveInterest).toString();
155
+ }
156
+ }
157
+ }
158
+
159
+ return acc;
160
+ }, {
161
+ borrowInterest: '0', supplyInterest: '0', incentiveUsd: '0', borrowedUsd: '0', suppliedUsd: '0',
162
+ });
163
+
164
+ const {
165
+ borrowedUsd, suppliedUsd, borrowInterest, supplyInterest, incentiveUsd,
166
+ } = sumValues;
167
+
168
+ const totalInterestUsd = new Dec(borrowInterest).add(supplyInterest).add(incentiveUsd).toString();
169
+ const balance = new Dec(suppliedUsd).sub(borrowedUsd);
170
+ const netApy = balance.isZero() ? '0' : new Dec(totalInterestUsd).div(balance).times(100).toString();
171
+
172
+ return { netApy, totalInterestUsd, incentiveUsd };
173
+ };
174
+
175
+ export const aaveV4GetCollateralFactor = (assetData: AaveV4ReserveAssetData, usedAssetData: AaveV4UsedReserveAsset, useUserCollateralFactor: boolean = false): number => (useUserCollateralFactor ? usedAssetData.collateralFactor : assetData.collateralFactor);
176
+
177
+ export const isLeveragedPosAaveV4 = (usedAssets: AaveV4UsedReserveAssets, dustLimit = 5) => {
178
+ let borrowUnstable = 0;
179
+ let supplyStable = 0;
180
+ let borrowStable = 0;
181
+ let supplyUnstable = 0;
182
+ let longAsset = '';
183
+ let shortAsset = '';
184
+ Object.values(usedAssets).forEach(({
185
+ symbol, suppliedUsd, borrowedUsd, collateral, reserveId,
186
+ }) => {
187
+ const spokeAsset = `${symbol}-${reserveId}`;
188
+ const isSupplied = (+suppliedUsd) > dustLimit; // ignore dust like <limit leftover supply
189
+ const isBorrowed = (+borrowedUsd) > dustLimit; // ignore dust like <limit leftover supply
190
+ if (isSupplied && STABLE_ASSETS.includes(symbol) && collateral) supplyStable += 1;
191
+ if (isBorrowed && STABLE_ASSETS.includes(symbol)) borrowStable += 1;
192
+ if (isBorrowed && !STABLE_ASSETS.includes(symbol)) {
193
+ borrowUnstable += 1;
194
+ shortAsset = spokeAsset;
195
+ }
196
+ if (isSupplied && !STABLE_ASSETS.includes(symbol) && collateral) {
197
+ supplyUnstable += 1;
198
+ longAsset = spokeAsset;
199
+ }
200
+ });
201
+ const isLong = borrowStable > 0 && borrowUnstable === 0 && supplyUnstable === 1 && supplyStable === 0;
202
+ const isShort = supplyStable > 0 && supplyUnstable === 0 && borrowUnstable === 1 && borrowStable === 0;
203
+ const isVolatilePair = supplyUnstable === 1 && borrowUnstable === 1 && supplyStable === 0 && borrowStable === 0;
204
+ if (isLong) {
205
+ return {
206
+ leveragedType: LeverageType.Long,
207
+ leveragedAsset: longAsset,
208
+ };
209
+ }
210
+ if (isShort) {
211
+ return {
212
+ leveragedType: LeverageType.Short,
213
+ leveragedAsset: shortAsset,
214
+ };
215
+ }
216
+ if (isVolatilePair) {
217
+ return {
218
+ leveragedType: LeverageType.VolatilePair,
219
+ leveragedAsset: longAsset,
220
+ };
221
+ }
222
+ return {
223
+ leveragedType: LeverageType.None,
224
+ leveragedAsset: '',
225
+ };
226
+ };
227
+
228
+ export const aaveV4GetAggregatedPositionData = ({
229
+ usedAssets,
230
+ assetsData,
231
+ network,
232
+ useUserCollateralFactor = false,
233
+ }: {
234
+ usedAssets: AaveV4UsedReserveAssets,
235
+ assetsData: AaveV4AssetsData,
236
+ network: NetworkNumber,
237
+ useUserCollateralFactor?: boolean,
238
+ }): AaveV4AggregatedPositionData => {
239
+ const payload = {} as AaveV4AggregatedPositionData;
240
+ payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }: { isSupplied: boolean }) => isSupplied, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
241
+ payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }: { isSupplied: boolean, collateral: string }) => isSupplied && collateral, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
242
+ payload.borrowLimitUsd = getAssetsTotal(
243
+ usedAssets,
244
+ ({ isSupplied, collateral }: { isSupplied: boolean, collateral: string }) => isSupplied && collateral,
245
+ ({ symbol, suppliedUsd, reserveId }: { symbol: string, suppliedUsd: string, reserveId: number }) => new Dec(suppliedUsd).mul(aaveV4GetCollateralFactor(assetsData[`${symbol}-${reserveId}`], usedAssets[`${symbol}-${reserveId}`], useUserCollateralFactor)),
246
+ );
247
+ payload.liquidationLimitUsd = payload.borrowLimitUsd;
248
+ payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ borrowedUsd }: { borrowedUsd: string }) => borrowedUsd);
249
+ payload.drawnUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ drawnUsd }: { drawnUsd: string }) => drawnUsd);
250
+ payload.premiumUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ premiumUsd }: { premiumUsd: string }) => premiumUsd);
251
+ const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
252
+ payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
253
+ payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
254
+ payload.minRatio = '100';
255
+ payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
256
+ payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
257
+ payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
258
+ const { leveragedType, leveragedAsset } = isLeveragedPosAaveV4(usedAssets);
259
+ payload.leveragedType = leveragedType;
260
+ payload.leveragedAsset = leveragedAsset;
261
+ payload.liquidationPrice = '';
262
+ if (leveragedType !== '') {
263
+ const leveragedAssetData = assetsData[leveragedAsset];
264
+ let assetPrice = leveragedAssetData?.price || '0';
265
+ if (leveragedType === LeverageType.VolatilePair) {
266
+ const borrowedAsset = (Object.values(usedAssets) as AaveV4UsedReserveAsset[]).find(({ borrowedUsd }: { borrowedUsd: string }) => +borrowedUsd > 0);
267
+ const borrowedAssetPrice = assetsData[`${borrowedAsset!.symbol}-${borrowedAsset!.reserveId}`].price;
268
+ const leveragedAssetPrice = assetsData[leveragedAsset].price;
269
+ const isReverse = new Dec(leveragedAssetPrice).lt(borrowedAssetPrice);
270
+ if (isReverse) {
271
+ payload.leveragedType = LeverageType.VolatilePairReverse;
272
+ payload.currentVolatilePairRatio = new Dec(borrowedAssetPrice).div(leveragedAssetPrice).toDP(18).toString();
273
+ assetPrice = new Dec(borrowedAssetPrice).div(assetPrice).toString();
274
+ } else {
275
+ assetPrice = new Dec(assetPrice).div(borrowedAssetPrice).toString();
276
+ payload.currentVolatilePairRatio = new Dec(leveragedAssetPrice).div(borrowedAssetPrice).toDP(18).toString();
277
+ }
278
+ }
279
+ payload.liquidationPrice = calcLeverageLiqPrice(payload.leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
280
+ }
281
+ payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
282
+ payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
283
+ payload.healthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
284
+ payload.minHealthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowLimitUsd).toDP(4).toString();
285
+
286
+ const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApyAaveV4({ usedAssets, assetsData });
287
+ payload.netApy = netApy;
288
+ payload.incentiveUsd = incentiveUsd;
289
+ payload.totalInterestUsd = totalInterestUsd;
290
+ return payload;
291
+ };
@@ -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,