Aave V4 Spoke read operations.
Reads are scoped to a caller-supplied Spoke contract. Reserve and user
structs are decoded into Onchain.Aave.V4.Types structs; numeric values
remain in their contract units (asset units, BPS, WAD, or RAY).
Errors pass through from address validation and Onchain.Contract.call/5.
API Functions
| Function | Arity | Description | Param Kinds |
|---|---|---|---|
max_user_reserves_limit | 2 | Fetch the maximum collateral and borrow reserve count per user. | spoke: value, opts: value |
oracle | 2 | Fetch the Spoke oracle address. | spoke: value, opts: value |
get_liquidation_logic | 2 | Fetch the liquidation logic library address. | spoke: value, opts: value |
position_manager? | 4 | Fetch whether a position manager is active and approved by a user. | spoke: value, user: value, position_manager: value, opts: value |
position_manager_active? | 3 | Fetch whether governance has activated a position manager. | spoke: value, position_manager: value, opts: value |
get_liquidation_bonus | 5 | Fetch the liquidation bonus for a user's reserve at a health factor. | spoke: value, reserve_id: value, user: value, health_factor: value, opts: value |
get_user_last_risk_premium | 3 | Fetch the risk premium from a user's last position update. | spoke: value, user: value, opts: value |
get_user_account_data | 3 | Fetch a user's typed per-Spoke health and account summary. | spoke: value, user: value, opts: value |
get_user_position | 4 | Fetch a user's typed position for one Spoke reserve. | spoke: value, reserve_id: value, user: value, opts: value |
get_user_debt | 4 | Fetch a user's drawn and premium debt for a Spoke reserve. | spoke: value, reserve_id: value, user: value, opts: value |
get_user_premium_debt_ray | 4 | Fetch a user's RAY-scaled premium debt for a Spoke reserve. | spoke: value, reserve_id: value, user: value, opts: value |
get_user_total_debt | 4 | Fetch a user's total debt for a Spoke reserve. | spoke: value, reserve_id: value, user: value, opts: value |
get_user_supplied_shares | 4 | Fetch a user's supplied shares for a Spoke reserve. | spoke: value, reserve_id: value, user: value, opts: value |
get_user_supplied_assets | 4 | Fetch a user's supplied assets for a Spoke reserve. | spoke: value, reserve_id: value, user: value, opts: value |
get_user_reserve_status | 4 | Fetch whether a user uses a reserve as collateral and borrows it. | spoke: value, reserve_id: value, user: value, opts: value |
get_dynamic_reserve_config | 4 | Fetch a typed dynamic configuration version for a Spoke reserve. | spoke: value, reserve_id: value, dynamic_config_key: value, opts: value |
get_reserve_config | 3 | Fetch typed static configuration for a Spoke reserve. | spoke: value, reserve_id: value, opts: value |
get_reserve | 3 | Fetch typed metadata and flags for a Spoke reserve. | spoke: value, reserve_id: value, opts: value |
get_reserve_id | 4 | Resolve a Hub asset to its Spoke-local reserve id. | spoke: value, hub: value, asset_id: value, opts: value |
get_reserve_debt | 3 | Fetch drawn and premium debt for a Spoke reserve. | spoke: value, reserve_id: value, opts: value |
get_reserve_total_debt | 3 | Fetch the total reserve debt for a Spoke reserve. | spoke: value, reserve_id: value, opts: value |
get_reserve_supplied_shares | 3 | Fetch the total supplied shares for a Spoke reserve. | spoke: value, reserve_id: value, opts: value |
get_reserve_supplied_assets | 3 | Fetch the total supplied assets for a Spoke reserve. | spoke: value, reserve_id: value, opts: value |
get_reserve_count | 2 | Fetch the number of reserves listed on the Spoke. | spoke: value, opts: value |
get_liquidation_config | 2 | Fetch the Spoke liquidation thresholds and bonus factor. | spoke: value, opts: value |
Summary
Functions
Fetch a typed dynamic configuration version for a Spoke reserve.
Fetch the liquidation bonus for a user's reserve at a health factor.
Fetch the Spoke liquidation thresholds and bonus factor.
Fetch the liquidation logic library address.
Fetch typed metadata and flags for a Spoke reserve.
Fetch typed static configuration for a Spoke reserve.
Fetch the number of reserves listed on the Spoke.
Fetch drawn and premium debt for a Spoke reserve.
Resolve a Hub asset to its Spoke-local reserve id.
Fetch the total supplied assets for a Spoke reserve.
Fetch the total supplied shares for a Spoke reserve.
Fetch the total reserve debt for a Spoke reserve.
Fetch a user's typed per-Spoke health and account summary.
Fetch a user's drawn and premium debt for a Spoke reserve.
Fetch the risk premium from a user's last position update.
Fetch a user's typed position for one Spoke reserve.
Fetch a user's RAY-scaled premium debt for a Spoke reserve.
Fetch whether a user uses a reserve as collateral and borrows it.
Fetch a user's supplied assets for a Spoke reserve.
Fetch a user's supplied shares for a Spoke reserve.
Fetch a user's total debt for a Spoke reserve.
Fetch the maximum collateral and borrow reserve count per user.
Fetch the Spoke oracle address.
Fetch whether a position manager is active and approved by a user.
Fetch whether governance has activated a position manager.
Types
Functions
@spec get_dynamic_reserve_config( address(), non_neg_integer(), non_neg_integer(), keyword() ) :: result(Onchain.Aave.V4.Types.SpokeDynamicReserveConfig.t())
Fetch a typed dynamic configuration version for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)dynamic_config_key- Dynamic configuration version key (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, SpokeDynamicReserveConfig.t()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value},
dynamic_config_key: %{
description: "Dynamic configuration version key",
kind: :value
}
},
returns: %{type: "{:ok, SpokeDynamicReserveConfig.t()} | {:error, term()}"}
}
@spec get_liquidation_bonus( address(), non_neg_integer(), address(), non_neg_integer(), keyword() ) :: result(non_neg_integer())
Fetch the liquidation bonus for a user's reserve at a health factor.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)user- User address (value)health_factor- Health factor in WAD (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
user: %{description: "User address", kind: :value},
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
health_factor: %{description: "Health factor in WAD", kind: :value},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, non_neg_integer()} | {:error, term()}"}
}
@spec get_liquidation_config( address(), keyword() ) :: result(Onchain.Aave.V4.Types.SpokeLiquidationConfig.t())
Fetch the Spoke liquidation thresholds and bonus factor.
Parameters
spoke- Spoke contract address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, SpokeLiquidationConfig.t()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value}
},
returns: %{type: "{:ok, SpokeLiquidationConfig.t()} | {:error, term()}"}
}
Fetch the liquidation logic library address.
Parameters
spoke- Spoke contract address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, String.t()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value}
},
returns: %{type: "{:ok, String.t()} | {:error, term()}"}
}
@spec get_reserve(address(), non_neg_integer(), keyword()) :: result(Onchain.Aave.V4.Types.SpokeReserveData.t())
Fetch typed metadata and flags for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, SpokeReserveData.t()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, SpokeReserveData.t()} | {:error, term()}"}
}
@spec get_reserve_config(address(), non_neg_integer(), keyword()) :: result(Onchain.Aave.V4.Types.SpokeReserveConfig.t())
Fetch typed static configuration for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, SpokeReserveConfig.t()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, SpokeReserveConfig.t()} | {:error, term()}"}
}
@spec get_reserve_count( address(), keyword() ) :: result(non_neg_integer())
Fetch the number of reserves listed on the Spoke.
Parameters
spoke- Spoke contract address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value}
},
returns: %{type: "{:ok, non_neg_integer()} | {:error, term()}"}
}
@spec get_reserve_debt(address(), non_neg_integer(), keyword()) :: result({non_neg_integer(), non_neg_integer()})
Fetch drawn and premium debt for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, {non_neg_integer(), non_neg_integer()}} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{
type: "{:ok, {non_neg_integer(), non_neg_integer()}} | {:error, term()}"
}
}
@spec get_reserve_id(address(), address(), non_neg_integer(), keyword()) :: result(non_neg_integer())
Resolve a Hub asset to its Spoke-local reserve id.
Parameters
spoke- Spoke contract address (value)hub- Hub contract address (value)asset_id- Hub-local asset identifier (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
hub: %{description: "Hub contract address", kind: :value},
asset_id: %{description: "Hub-local asset identifier", kind: :value},
spoke: %{description: "Spoke contract address", kind: :value}
},
returns: %{type: "{:ok, non_neg_integer()} | {:error, term()}"}
}
@spec get_reserve_supplied_assets(address(), non_neg_integer(), keyword()) :: result(non_neg_integer())
Fetch the total supplied assets for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, non_neg_integer()} | {:error, term()}"}
}
@spec get_reserve_total_debt(address(), non_neg_integer(), keyword()) :: result(non_neg_integer())
Fetch the total reserve debt for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, non_neg_integer()} | {:error, term()}"}
}
@spec get_user_account_data(address(), address(), keyword()) :: result(Onchain.Aave.V4.Types.SpokeUserData.t())
Fetch a user's typed per-Spoke health and account summary.
Parameters
spoke- Spoke contract address (value)user- User address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, SpokeUserData.t()} | {:error, term()})
# descripex:contract
%{
params: %{
user: %{description: "User address", kind: :value},
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value}
},
returns: %{type: "{:ok, SpokeUserData.t()} | {:error, term()}"}
}
@spec get_user_debt(address(), non_neg_integer(), address(), keyword()) :: result({non_neg_integer(), non_neg_integer()})
Fetch a user's drawn and premium debt for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)user- User address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, {non_neg_integer(), non_neg_integer()}} | {:error, term()})
# descripex:contract
%{
params: %{
user: %{description: "User address", kind: :value},
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{
type: "{:ok, {non_neg_integer(), non_neg_integer()}} | {:error, term()}"
}
}
@spec get_user_position(address(), non_neg_integer(), address(), keyword()) :: result(Onchain.Aave.V4.Types.SpokeUserPosition.t())
Fetch a user's typed position for one Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)user- User address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, SpokeUserPosition.t()} | {:error, term()})
# descripex:contract
%{
params: %{
user: %{description: "User address", kind: :value},
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, SpokeUserPosition.t()} | {:error, term()}"}
}
@spec get_user_reserve_status(address(), non_neg_integer(), address(), keyword()) :: result({boolean(), boolean()})
Fetch whether a user uses a reserve as collateral and borrows it.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)user- User address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, {boolean(), boolean()}} | {:error, term()})
# descripex:contract
%{
params: %{
user: %{description: "User address", kind: :value},
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, {boolean(), boolean()}} | {:error, term()}"}
}
@spec get_user_supplied_assets(address(), non_neg_integer(), address(), keyword()) :: result(non_neg_integer())
Fetch a user's supplied assets for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)user- User address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
user: %{description: "User address", kind: :value},
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, non_neg_integer()} | {:error, term()}"}
}
@spec get_user_total_debt(address(), non_neg_integer(), address(), keyword()) :: result(non_neg_integer())
Fetch a user's total debt for a Spoke reserve.
Parameters
spoke- Spoke contract address (value)reserve_id- Spoke-local reserve identifier (value)user- User address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
user: %{description: "User address", kind: :value},
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
reserve_id: %{description: "Spoke-local reserve identifier", kind: :value}
},
returns: %{type: "{:ok, non_neg_integer()} | {:error, term()}"}
}
@spec max_user_reserves_limit( address(), keyword() ) :: result(non_neg_integer())
Fetch the maximum collateral and borrow reserve count per user.
Parameters
spoke- Spoke contract address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, non_neg_integer()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value}
},
returns: %{type: "{:ok, non_neg_integer()} | {:error, term()}"}
}
Fetch the Spoke oracle address.
Parameters
spoke- Spoke contract address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, String.t()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value}
},
returns: %{type: "{:ok, String.t()} | {:error, term()}"}
}
Fetch whether a position manager is active and approved by a user.
Parameters
spoke- Spoke contract address (value)user- User address (value)position_manager- Position manager address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, boolean()} | {:error, term()})
# descripex:contract
%{
params: %{
user: %{description: "User address", kind: :value},
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
position_manager: %{description: "Position manager address", kind: :value}
},
returns: %{type: "{:ok, boolean()} | {:error, term()}"}
}
Fetch whether governance has activated a position manager.
Parameters
spoke- Spoke contract address (value)position_manager- Position manager address (value)opts- Options: :rpc_url, :timeout, :block (default:[], value)
Returns
({:ok, boolean()} | {:error, term()})
# descripex:contract
%{
params: %{
opts: %{
default: [],
description: "Options: :rpc_url, :timeout, :block",
kind: :value
},
spoke: %{description: "Spoke contract address", kind: :value},
position_manager: %{description: "Position manager address", kind: :value}
},
returns: %{type: "{:ok, boolean()} | {:error, term()}"}
}