Typed struct for Aave V3 AggregatedReserveData from getReservesData.
Wraps the 40 values per reserve into named fields with appropriate conversions.
Conversion Philosophy
Fields with fixed, universal scales are converted to Decimal.t():
- Basis points (10^4) →
Math.to_ltv/1(risk params, liquidation bonus) - Ray (10^27) →
Math.to_ray/1(indices, interest rates)
Fields with context-dependent scales stay as raw integers:
- Token amounts (depend on per-token
decimals) - Prices (depend on
BaseCurrencyInfo) - Caps, ceilings, timestamps
Addresses are checksummed via Address.checksum!/1.
Field Groups
Identity (4): underlying_asset, name, symbol, decimals Risk params (4, basis points): base_ltv_as_collateral, reserve_liquidation_threshold, reserve_liquidation_bonus, reserve_factor Flags (8, booleans): usage_as_collateral_enabled, borrowing_enabled, is_active, is_frozen, is_paused, is_siloed_borrowing, flash_loan_enabled, borrowable_in_isolation Indices (2, ray): liquidity_index, variable_borrow_index Rates (6, ray): liquidity_rate, variable_borrow_rate, variable_rate_slope1, variable_rate_slope2, base_variable_borrow_rate, optimal_usage_ratio Timestamp (1, raw): last_update_timestamp Addresses (4): a_token_address, variable_debt_token_address, interest_rate_strategy_address, price_oracle Amounts (4, raw integers): available_liquidity, total_scaled_variable_debt, accrued_to_treasury, isolation_mode_total_debt Price (1, raw): price_in_market_reference_currency Caps (4, raw): debt_ceiling, debt_ceiling_decimals, borrow_cap, supply_cap Additional (2, raw): virtual_underlying_balance, deficit
API Functions
| Function | Arity | Description | Param Kinds |
|---|---|---|---|
from_raw | 1 | Convert raw AggregatedReserveData tuple from getReservesData into a typed struct. | raw: exchange_data |
Summary
Functions
Convert raw AggregatedReserveData tuple from getReservesData into a typed struct.
Types
@type t() :: %Onchain.Aave.Types.AggregatedReserveData{ a_token_address: String.t(), accrued_to_treasury: non_neg_integer(), available_liquidity: non_neg_integer(), base_ltv_as_collateral: Decimal.t(), base_variable_borrow_rate: Decimal.t(), borrow_cap: non_neg_integer(), borrowable_in_isolation: boolean(), borrowing_enabled: boolean(), debt_ceiling: non_neg_integer(), debt_ceiling_decimals: non_neg_integer(), decimals: non_neg_integer(), deficit: non_neg_integer(), flash_loan_enabled: boolean(), interest_rate_strategy_address: String.t(), is_active: boolean(), is_frozen: boolean(), is_paused: boolean(), is_siloed_borrowing: boolean(), isolation_mode_total_debt: non_neg_integer(), last_update_timestamp: non_neg_integer(), liquidity_index: Decimal.t(), liquidity_rate: Decimal.t(), name: String.t(), optimal_usage_ratio: Decimal.t(), price_in_market_reference_currency: non_neg_integer(), price_oracle: String.t(), reserve_factor: Decimal.t(), reserve_liquidation_bonus: Decimal.t(), reserve_liquidation_threshold: Decimal.t(), supply_cap: non_neg_integer(), symbol: String.t(), total_scaled_variable_debt: non_neg_integer(), underlying_asset: String.t(), usage_as_collateral_enabled: boolean(), variable_borrow_index: Decimal.t(), variable_borrow_rate: Decimal.t(), variable_debt_token_address: String.t(), variable_rate_slope1: Decimal.t(), variable_rate_slope2: Decimal.t(), virtual_underlying_balance: non_neg_integer() }
Functions
Convert raw AggregatedReserveData tuple from getReservesData into a typed struct.
Parameters
raw- 40-element tuple matching the Aave V3 AggregatedReserveData Solidity struct (exchange_data)
Returns
%AggregatedReserveData{} with converted fields (struct)
# descripex:contract
%{
params: %{
raw: %{
description: "40-element tuple matching the Aave V3 AggregatedReserveData Solidity struct",
source: "Onchain.Aave.UiPoolDataProvider.get_reserves_data/1",
kind: :exchange_data
}
},
returns: %{
type: :struct,
description: "%AggregatedReserveData{} with converted fields"
}
}