Onchain.Aave.Types.AggregatedReserveData (onchain_aave v0.2.0)

Copy Markdown View Source

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

FunctionArityDescriptionParam Kinds
from_raw1Convert 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

t()

@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

from_raw(arg)

@spec from_raw(tuple()) :: t()

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"
  }
}