# View Contracts

## View Contracts

Tydro has several view contracts to assist with querying onchain data.

### UiPoolDataProvider

Contract that returns an array of all reserve or user data for a particular market (for example, liquidity, token addresses, rate strategy), used by the [<mark style="color:blue;">Tydro Interface</mark>](https://tydro-page.webflow.io) to display Markets and Dashboard data. \
\
The [Utilities SDK](https://github.com/aave/aave-utilities) includes an interface to make calls to this contract, and functions to format the response for frontend use-cases

The source code is available on Aave's [<mark style="color:blue;">GitHub</mark>](https://github.com/aave-dao/aave-v3-origin/blob/main/src/contracts/helpers/UiPoolDataProviderV3.sol)<mark style="color:blue;">.</mark>

### View Methods

#### getReservesList

```
function getReservesList(IPoolAddressesProvider provider) public view override returns (address[] memory)
```

Returns the list of initialised reserves in the Pool associated with the given [provider](/developers/smart-contracts/pool-addresses-provider.md).

**Input Parameters:**

| Name     | Type                   | Description                                |
| -------- | ---------------------- | ------------------------------------------ |
| provider | IPoolAddressesProvider | The given provider for the associated pool |

**Return Values:**

| Type       | Description                                  |
| ---------- | -------------------------------------------- |
| address\[] | The list of initialised reserves in the Pool |

#### getReservesData

```
function getReservesData(IPoolAddressesProvider provider) public view override returns (AggregatedReserveData[] memory, BaseCurrencyInfo memory)
```

Returns BaseCurrencyInfo of the Pool and AggregatedReserveData\[] for all the initialised reserves in the Pool associated with the given [provider](/developers/smart-contracts/pool-addresses-provider.md).

**Input Parameters:**

| Name     | Type                   | Description                                |
| -------- | ---------------------- | ------------------------------------------ |
| provider | IPoolAddressesProvider | The given provider for the associated pool |

**Return Values:**

| Type                     | Description                   |
| ------------------------ | ----------------------------- |
| BaseCurrencyInfo         | The base currency information |
| AggregatedReserveData\[] | The aggregated reserve data   |

The BaseCurrencyInfo struct is composed of the following fields:

| Name                              | Type    | Description                                       |
| --------------------------------- | ------- | ------------------------------------------------- |
| marketReferenceCurrencyUnit       | uint256 | Reference aka base currency of the Tydro market   |
| marketReferenceCurrencyPriceInUsd | int256  | Price of reference aka base currency in USD       |
| networkBaseTokenPriceInUsd        | int256  | Price of native token of the network/chain in USD |
| networkBaseTokenPriceDecimals     | uint8   | Decimals of native token of the network/chain     |

The AggregatedReserveData struct is composed of the following fields:

| Name                           | Type    | Description                                                            |
| ------------------------------ | ------- | ---------------------------------------------------------------------- |
| underlyingAsset                | address | The address of the underlying asset of the reserve                     |
| name                           | string  | The name of the underlying reserve asset                               |
| symbol                         | string  | The symbol of the underlying reserve asset                             |
| decimals                       | uint256 | The number of decimals of the reserve                                  |
| baseLTVasCollateral            | uint256 | The ltv of the reserve                                                 |
| reserveLiquidationThreshold    | uint256 | The liquidation threshold of the reserve                               |
| reserveLiquidationBonus        | uint256 | The liquidation bonus of the resurve                                   |
| reserveFactor                  | uint256 | The reserve factor of the reserve                                      |
| usageAsCollateralEnabled       | bool    | true if the asset is enabled to be used as collateral, false otherwise |
| borrowingEnabled               | bool    | true if borrowing is enabled, false otherwise                          |
| isActive                       | bool    | true if reserve is active, false otherwise                             |
| isFrozen                       | bool    | true if reserve is frozen, false otherwise                             |
| BASE DATA                      |         |                                                                        |
| liquidityIndex                 | uint128 | The liquidity index of the reserve                                     |
| variableBorrowIndex            | uint128 | The variable borrow index of the reserve                               |
| liquidityRate                  | uint128 | The liquidity rate of the reserve                                      |
| variableBorrowRate             | uint128 | The variable borrow rate of the reserve                                |
| lastUpdateTimestamp            | uint40  | The timestamp of the last update of the reserve                        |
| aTokenAddress                  | address | The AToken address of the reserve                                      |
| variableDebtTokenAddress       | address | The VariableDebtToken address of the reserve                           |
| interestRateStrategyAddress    | address | The address of the Interest Rate strategy                              |
| availableLiquidity             | uint256 | The liquidity available                                                |
| totalScaledVariableDebt        | uint256 | The total scaled variable debt                                         |
| priceInMarketReferenceCurrency | uint256 | Price of reference aka base currency of Tydro market                   |
| priceOracle                    | address | The address of the price oracle used by the associated market          |
| variableRateSlope1             | uint256 | The variable rate slope                                                |
| variableRateSlope2             | uint256 | The variable rate slope                                                |
| baseVariableBorrowRate         | uint256 | The base variable borrow rate, expressed in ray                        |
| optimalUsageRatio              | uint256 | The optimal usage ratio                                                |
|                                |         |                                                                        |
| V3 ONLY                        |         |                                                                        |
| isPaused                       | bool    | true if the pool is paused, false otherwise                            |
| isSiloedBorrowing              | bool    | true if the asset is siloed for borrowing                              |
| accruedToTreasury              | uint128 | The amount of tokens accrued to treasury that is to be minted          |
| unbacked                       | uint128 | The amount of unbacked aTokens of the reserve                          |
| isolationModeTotalDebt         | uint128 | The outstanding debt borrowed against this asset in isolation mode     |
| flashLoanEnabled               | bool    | true is asset is available to borrow in flash loan transaction         |
| debtCeiling                    | uint256 | The debt ceiling of the reserve                                        |
|                                |         |                                                                        |
| debtCeilingDecimals            | uint256 | The debt ceiling decimals                                              |
| eModeCategoryId                | uint8   | The eMode id of the reserve                                            |
| borrowCap                      | uint256 | The borrow cap of the reserve                                          |
| supplyCap                      | uint256 | The supply cap of the reserve                                          |
| borrowableInIsolation          | bool    | true is asset available to borrow against isolated collateral assets   |
| v3.1                           |         |                                                                        |
| virtualAccActive               | bool    | true if virtual accounting is enabled for a reserve                    |
| virtualUnderlyingBalance       | uint128 | Balance of reserve if virtual accounting is used                       |

#### getUserReservesData

```
function getUserReservesData(IPoolAddressesProvider provider, address user) external view override returns (UserReserveData[] memory, uint8)
```

Returns UserReserveData\[] for all user reserves in the Pool associated with the given [provider](/developers/smart-contracts/pool-addresses-provider.md).

**Input Parameters:**

| Name     | Type                   | Description                                |
| -------- | ---------------------- | ------------------------------------------ |
| provider | IPoolAddressesProvider | The given provider for the associated pool |
| user     | address                | The address of the user                    |

#### UserReserveData

| Type               | Description           |
| ------------------ | --------------------- |
| UserReserveData\[] | The user reserve data |

The [UserReserveData](https://github.com/aave-dao/aave-v3-origin/blob/main/src/contracts/helpers/interfaces/IUiPoolDataProviderV3.sol) struct is composed of the following fields:

| Name                           | Type    | Description                                                                                  |
| ------------------------------ | ------- | -------------------------------------------------------------------------------------------- |
| underlyingAsset                | address | The address of the underlying asset supplied/borrowed                                        |
| scaledATokenBalance            | uint256 | The scaled balance of the aToken. scaledBalance = balance/liquidityIndex                     |
| usageAsCollateralEnabledOnUser | bool    | true if the supplied asset is enabled to be used as collateral, false otherwise              |
| scaledVariableDebt             | uint256 | The scaled balance of borrow position: (current balance = scaled balance \* liquidity index) |

#### getEModes

Returns an array of all available E-mode categories in the Pool associated with the [provider](/developers/smart-contracts/pool-addresses-provider.md).

```
function getEModes(IPoolAddressesProvider provider) external view returns (Emode[] memory)
```

**Input Parameters:**

| Name     | Type                   | Description                                                                     |
| -------- | ---------------------- | ------------------------------------------------------------------------------- |
| provider | IPoolAddressesProvider | The PoolAddressesProvider for the associated Pool to fetch EMode categories for |

**Return Parameters:**

| Name       | Type     | Description                               |
| ---------- | -------- | ----------------------------------------- |
| categories | Emode\[] | The list of E-Modes available in the pool |

**Emode**

The Emode struct is composed of the following fields:

| Name  | Type                    | Description                         |
| ----- | ----------------------- | ----------------------------------- |
| id    | uint8                   | The unique identifier of the E-Mode |
| eMode | DataTypes.EModeCategory | The E-Mode configuration details    |

**DataTypes.EModeCategory**

The EModeCategory struct is composed of the following fields:

| Name                 | Type    | Description                                             |
| -------------------- | ------- | ------------------------------------------------------- |
| ltv                  | uint16  | Loan-to-Value ratio for the E-Mode category             |
| liquidationThreshold | uint16  | The threshold at which liquidation is triggered         |
| liquidationBonus     | uint16  | The bonus applied during liquidation                    |
| collateralBitmap     | uint128 | Bitmap representing eligible collateral for this E-Mode |
| label                | string  | The label describing the E-Mode category                |
| borrowableBitmap     | uint128 | Bitmap representing borrowable assets for this E-Mode   |

### WalletBalanceProvider

Fetches tokens balances for all underlying tokens of Tydro reserves for one user address.

This contract is not used within the Tydro. It is an accessory contract used to reduce the number of calls towards the blockchain from the Tydro backend.

For getting ETH (native chain token) balance use MOCK\_ETH\_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE.

The source code is available on Aave's [GitHub](https://github.com/aave-dao/aave-v3-origin/blob/main/src/contracts/helpers/WalletBalanceProvider.sol).

### View Methods

#### balanceOf

```
function balanceOf(address user, address token) public view returns (uint256)
```

Checks the token balance of a wallet in a token contract. Returns the balance of the token for user (ETH included with MOCK\_ETH\_ADDRESS).

**Input Parameters:**

| Name  | Type    | Description              |
| ----- | ------- | ------------------------ |
| user  | address | The address of the user  |
| token | address | The address of the token |

**Return Values:**

| Type    | Description                                                             |
| ------- | ----------------------------------------------------------------------- |
| uint256 | The balance of the token for user. Returns 0 for a non-contract address |

#### batchBalanceOf

```
function batchBalanceOf(address[] calldata users, address[] calldata tokens) external view returns (uint256[] memory)
```

Returns balances for a list of users and tokens (ETH included with MOCK\_ETH\_ADDRESS).

**Input Parameters:**

| Name   | Type       | Description        |
| ------ | ---------- | ------------------ |
| users  | address\[] | The list of users  |
| tokens | address\[] | The list of tokens |

**Return Values:**

| Type       | Description                      |
| ---------- | -------------------------------- |
| uint256\[] | A list of balances for each user |

#### getUserWalletBalances

```
function getUserWalletBalances(address provider, address user) external view returns (address[] memory, uint256[] memory)
```

Provides balances of user wallet for all reserves available on the pool.

**Input Parameters:**

| Name     | Type    | Description                 |
| -------- | ------- | --------------------------- |
| provider | address | The address of the provider |
| user     | address | The address of the user     |

**Return Values:**

| Type       | Description                      |
| ---------- | -------------------------------- |
| address\[] | A list of user wallets           |
| uint256\[] | A list of balances for each user |

## UiIncentiveDataProviderV3

Contract that returns an array of all reserve incentives or user claimable rewards within a particular market, used by the Tydro Interface to display incentives data.

The Tydro Utilties SDK includes an interface to make calls to this contract, and functions to format the response for frontend use-cases.&#x20;

The source code is available on Aave's [GitHub](https://github.com/aave-dao/aave-v3-origin/blob/main/src/contracts/helpers/UiIncentiveDataProviderV3.sol).

### View Methods

**getFullReservesIncentiveData**

```
function getFullReservesIncentiveData(IPoolAddressesProvider provider, address user)    external    view    override    returns (AggregatedReserveIncentiveData[] memory, UserReserveIncentiveData[] memory)
```

Returns both AggregatedReserveIncentiveData\[] and UserReserveIncentiveData\[] for the given user for the pool associated with the given [provider](/developers/smart-contracts/pool-addresses-provider.md).

**Input Parameters:**

| Name     | Type                   | Description                                |
| -------- | ---------------------- | ------------------------------------------ |
| provider | IPoolAddressesProvider | The given provider for the associated pool |
| user     | address                | The address of the user                    |

**Return Values:**

| Type                              | Description                           |
| --------------------------------- | ------------------------------------- |
| AggregatedReserveIncentiveData\[] | The aggregated reserve incentive data |
| UserReserveIncentiveData\[]       | The user reserve incentive data       |

The AggregatedReserveIncentiveData struct is composed of the following fields:

| Name            | Type          | Description                                                                                               |
| --------------- | ------------- | --------------------------------------------------------------------------------------------------------- |
| underlyingAsset | address       | Address of the asset supplied/borrowed in Pool                                                            |
| aIncentiveData  | IncentiveData | Details of rewards distributed for supplying to Tydro Pool i.e. rewards for aToken holders                |
| vIncentiveData  | IncentiveData | Details of rewards distributed for variable debt borrowed from Tydro Pool i.e. rewards for vToken holders |

The UserReserveIncentiveData struct is composed of the following fields:

| Name                     | Type              | Description                                                                                             |
| ------------------------ | ----------------- | ------------------------------------------------------------------------------------------------------- |
| underlyingAsset          | address           | Address of the asset supplied/borrowed in Pool                                                          |
| aTokenIncentivesUserData | UserIncentiveData | Details of user rewards received for supplying to Tydro Pool i.e. rewards for aToken                    |
| vTokenIncentivesUserData | UserIncentiveData | Details of user rewards received for borrowing at variable rate from Tydro Pool i.e. rewards for vToken |

**getReservesIncentivesData**

```
function getReservesIncentivesData(IPoolAddressesProvider provider) external view override returns (AggregatedReserveIncentiveData[] memory)
```

Returns AggregatedReserveIncentiveData\[] for the pool associated with the given [provider](/developers/smart-contracts/pool-addresses-provider.md).

**Input Parameters:**

| Name     | Type                   | Description                                |
| -------- | ---------------------- | ------------------------------------------ |
| provider | IPoolAddressesProvider | The given provider for the associated pool |

**Return Values:**

| Type                              | Description                           |
| --------------------------------- | ------------------------------------- |
| AggregatedReserveIncentiveData\[] | The aggregated reserve incentive data |

The AggregatedReserveIncentiveData struct is composed of the following fields:

| Name            | Type          | Description                                                                                               |
| --------------- | ------------- | --------------------------------------------------------------------------------------------------------- |
| underlyingAsset | address       | Address of the asset supplied/borrowed in Pool                                                            |
| aIncentiveData  | IncentiveData | Details of rewards distributed for supplying to Tydro Pool i.e. rewards for aToken holders                |
| vIncentiveData  | IncentiveData | Details of rewards distributed for variable debt borrowed from Tydro Pool i.e. rewards for vToken holders |

**getUserReservesIncentivesData**

```
function getUserReservesIncentivesData(IPoolAddressesProvider provider, address user) external view override returns (UserReserveIncentiveData[] memory)
```

Returns the UserReserveIncentiveData\[] for the given user for the pool associated with the given [provider](/developers/smart-contracts/pool-addresses-provider.md).

**Input Parameters:**

| Name     | Type                   | Description                                |
| -------- | ---------------------- | ------------------------------------------ |
| provider | IPoolAddressesProvider | The given provider for the associated pool |

**Return Values:**

| Type                        | Description                     |
| --------------------------- | ------------------------------- |
| UserReserveIncentiveData\[] | The user reserve incentive data |

The UserReserveIncentiveData struct is composed of the following fields:

| Name                     | Type              | Description                                                                                             |
| ------------------------ | ----------------- | ------------------------------------------------------------------------------------------------------- |
| underlyingAsset          | address           | Address of the asset supplied/borrowed in Pool                                                          |
| aTokenIncentivesUserData | UserIncentiveData | Details of user rewards received for supplying to Tydro Pool i.e. rewards for aToken                    |
| vTokenIncentivesUserData | UserIncentiveData | Details of user rewards received for borrowing at variable rate from Tydro Pool i.e. rewards for vToken |

### TydroProtocolDataProvider

The TydroProtocolDataProvider is a peripheral contract to collect and pre-process information from the [Pool](/developers/smart-contracts/pool.md). This contract contains methods for querying token addresses, reserve parameters, and user account information. The methods of the PoolDataProvider are more granular than the UiPoolDataProvider, which queries data for reserve tokens or user balances simultaneously.

The source code is available on Aave's [<mark style="color:blue;">GitHub</mark>](https://github.com/aave-dao/aave-v3-origin/blob/main/src/contracts/helpers/AaveProtocolDataProvider.sol).

### View Methods

#### getAllReservesTokens

```
function getAllReservesTokens() external view returns (TokenData[] memory)
```

Returns a list of the existing reserves in the pool, pairs include the symbol and tokenAddress. Handles MKR and ETH in a different way since they do not have standard symbol functions.

**Return Values:**

| Type         | Description                                          |
| ------------ | ---------------------------------------------------- |
| TokenData\[] | The list of reserves, pairs of symbols and addresses |

The TokenData struct is composed of the following fields:

| Name         | Type    | Description                                 |
| ------------ | ------- | ------------------------------------------- |
| symbol       | string  | The symbol of the underlying reserve asset  |
| tokenAddress | address | The address of the underlying reserve asset |

#### getAllATokens

```
function getAllATokens() external view returns (TokenData[] memory)
```

Returns a list of the existing ATokens in the pool, pairs include the symbol and tokenAddress.

**Return Values:**

| Type         | Description                                         |
| ------------ | --------------------------------------------------- |
| TokenData\[] | The list of ATokens, pairs of symbols and addresses |

The TokenData struct is composed of the following fields:

| Name         | Type    | Description                          |
| ------------ | ------- | ------------------------------------ |
| symbol       | string  | The symbol of aToken of the reserve  |
| tokenAddress | address | The address of aToken of the reserve |

#### getReserveConfigurationData

```
function getReserveConfigurationData(address asset) external view returns (    uint256 decimals,    uint256 ltv,    uint256 liquidationThreshold,    uint256 liquidationBonus,    uint256 reserveFactor,    bool usageAsCollateralEnabled,    bool borrowingEnabled,    bool stableBorrowRateEnabled,    bool isActive,    bool isFrozen)
```

Returns the configuration data of the reserve as described below. Does not return borrow and supply caps, nor pause flag for compatibility.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Name                     | Type    | Description                                                 |
| ------------------------ | ------- | ----------------------------------------------------------- |
| decimals                 | uint256 | The number of decimals of the reserve                       |
| ltv                      | uint256 | The ltv of the reserve                                      |
| liquidationThreshold     | uint256 | The liquidation threshold of the reserve                    |
| liquidationBonus         | uint256 | The liquidation bonus of the reserve                        |
| reserveFactor            | uint256 | The reserve factor of the reserve                           |
| usageAsCollateralEnabled | bool    | true if the usage as collateral is enabled, false otherwise |
| borrowingEnabled         | bool    | true if borrowing is enabled, false otherwise               |
| stableBorrowRateEnabled  | bool    | Always false (deprecated)                                   |
| isActive                 | bool    | true if reserve is active, false otherwise                  |
| isFrozen                 | bool    | true if reserve is frozen, false otherwise                  |

#### getReserveCaps

```
function getReserveCaps(address asset) external view returns (uint256 borrowCap, uint256 supplyCap)
```

Returns the caps parameters of the reserve.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

#### Return Values:

| Name      | Type    | Description                   |
| --------- | ------- | ----------------------------- |
| borrowCap | uint256 | The borrow cap of the reserve |
| supplyCap | uint256 | The supply cap of the reserve |

#### getPaused

```
function getPaused(address asset) external view returns (bool isPaused)
```

Returns true if the pool isPaused.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Name     | Type | Description                                 |
| -------- | ---- | ------------------------------------------- |
| isPaused | bool | true if the pool is paused, false otherwise |

#### getSiloedBorrowing

```
function getSiloedBorrowing(address asset) external view override returns (bool)
```

Returns the siloed borrowing flag. It returns true if the asset is <mark style="color:blue;">siloed for borrowing.</mark>

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Type | Description                               |
| ---- | ----------------------------------------- |
| bool | true if the asset is siloed for borrowing |

#### getLiquidationProtocolFee

```
function getLiquidationProtocolFee(address asset) external view override returns (uint256)
```

Returns the protocol fee on the liquidation bonus.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Type    | Description                     |
| ------- | ------------------------------- |
| uint256 | The protocol fee on liquidation |

#### getUnbackedMintCap

```
function getUnbackedMintCap(address asset) external view override returns (uint256)
```

Returns the unbacked mint cap of the reserve.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Type    | Description                          |
| ------- | ------------------------------------ |
| uint256 | The unbacked mint cap of the reserve |

#### getDebtCeiling

```
function getDebtCeiling(address asset) external view override returns (uint256)
```

Returns the debt ceiling of the reserve.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Type    | Description                     |
| ------- | ------------------------------- |
| uint256 | The debt ceiling of the reserve |

#### getReserveData

```
function getReserveData(address asset) external view override returns (    uint256 unbacked,    uint256 accruedToTreasuryScaled,    uint256 totalAToken,    uint256 totalStableDebt,    uint256 totalVariableDebt,    uint256 liquidityRate,    uint256 variableBorrowRate,    uint256 stableBorrowRate,    uint256 averageStableBorrowRate,    uint256 liquidityIndex,    uint256 variableBorrowIndex,    uint40 lastUpdateTimestamp)
```

Returns the reserve data.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Name                    | Type    | Description                                                          |
| ----------------------- | ------- | -------------------------------------------------------------------- |
| unbacked                | uint256 | The amount of unbacked aTokens of the reserve                        |
| accruedToTreasuryScaled | uint256 | The scaled amount of tokens accrued to treasury that is to be minted |
| totalAToken             | uint256 | The total supply of the aToken                                       |
| totalStableDebt         | uint256 | The total stable debt of the reserve (deprecated)                    |
| totalVariableDebt       | uint256 | The total variable debt of the reserve                               |
| liquidityRate           | uint256 | The liquidity rate of the reserve                                    |
| variableBorrowRate      | uint256 | The variable borrow rate of the reserve                              |
| stableBorrowRate        | uint256 | The stable borrow rate of the reserve (deprecated)                   |
| averageStableBorrowRate | uint256 | The average stable borrow rate of the reserve (deprecated)           |
| liquidityIndex          | uint256 | The liquidity index of the reserve                                   |
| variableBorrowIndex     | uint256 | The variable borrow index of the reserve                             |
| lastUpdateTimestamp     | uint40  | The timestamp of the last update of the reserve                      |

#### getATokenTotalSupply

```
function getATokenTotalSupply(address asset) external view override returns (uint256)
```

Returns the total supply of aTokens for a given asset.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Type    | Description                    |
| ------- | ------------------------------ |
| uint256 | The total supply of the aToken |

#### getTotalDebt

```
function getTotalDebt(address asset) external view override returns (uint256)
```

Returns the total debt for a given asset.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Type    | Description                    |
| ------- | ------------------------------ |
| uint256 | The total borrows for an asset |

#### getUserReserveData

```
function getUserReserveData(address asset, address user) external view returns (    uint256 currentATokenBalance,    uint256 currentStableDebt,    uint256 currentVariableDebt,    uint256 principalStableDebt,    uint256 scaledVariableDebt,    uint256 stableBorrowRate,    uint256 liquidityRate,    uint40 stableRateLastUpdated,    bool usageAsCollateralEnabled)
```

Returns the following user reserve data.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |
| user  | address | The address of the user                            |

**Return Values:**

| Name                     | Type    | Description                                                           |
| ------------------------ | ------- | --------------------------------------------------------------------- |
| currentATokenBalance     | uint256 | The current AToken balance of the user                                |
| currentStableDebt        | uint256 | The current stable debt of the user (deprecated)                      |
| currentVariableDebt      | uint256 | The current variable debt of the user                                 |
| principalStableDebt      | uint256 | The principal stable debt of the user (deprecated)                    |
| scaledVariableDebt       | uint256 | The scaled variable debt of the user                                  |
| stableBorrowRate         | uint256 | The stable borrow rate of the user (deprecated)                       |
| liquidityRate            | uint256 | The liquidity rate of the reserve                                     |
| stableRateLastUpdated    | uint40  | The timestamp of the last update of the user stable rate (deprecated) |
| usageAsCollateralEnabled | bool    | true if the user is using the asset as collateral, else false         |

#### getReserveTokensAddresses

```
function getReserveTokensAddresses(address asset) external view override returns (    address aTokenAddress,    address stableDebtTokenAddress,    address variableDebtTokenAddress)
```

Returns the addresses of the aToken, stableDebtToken and variableDebtToken of the reserve.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Name                     | Type    | Description                                             |
| ------------------------ | ------- | ------------------------------------------------------- |
| aTokenAddress            | address | The AToken address of the reserve                       |
| stableDebtTokenAddress   | address | The StableDebtToken address of the reserve (deprecated) |
| variableDebtTokenAddress | address | The VariableDebtToken address of the reserve            |

#### getInterestRateStrategyAddress

```
function getInterestRateStrategyAddress(address asset) external view override returns (address irStrategyAddress)
```

Returns the address of the Interest Rate strategy.

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Name              | Type    | Description                               |
| ----------------- | ------- | ----------------------------------------- |
| irStrategyAddress | address | The address of the Interest Rate strategy |

#### getReserveDeficit

```
function getReserveDeficit(address asset) external view override returns (uint256)
```

**Input Parameters:**

| Name  | Type    | Description                                        |
| ----- | ------- | -------------------------------------------------- |
| asset | address | The address of the underlying asset of the reserve |

**Return Values:**

| Type    | Description                                                       |
| ------- | ----------------------------------------------------------------- |
| uint256 | Current reserve deficit from undercollateralized borrow positions |

### Pure Methods

**getDebtCeilingDecimals**

```
function getDebtCeilingDecimals() external pure override returns (uint256)
```

Returns the debt ceiling decimals.

**Return Values:**

| Type    | Description               |
| ------- | ------------------------- |
| uint256 | The debt ceiling decimals |

### LiquidationDataProvider

This contract is a utility for fetching and pre-processing liquidation-related parameters for a given user. It aggregates data from the underlying Pool and Price Oracle to determine a user’s position, collateral, borrow details, and liquidation limits according to the protocol parameters.

The source code is available on [<mark style="color:blue;">GitHub</mark>](https://github.com/bgd-labs/aave-v3-origin/blob/1f4df52c1be2633b720b3638a299d74b3d5dcbb7/src/contracts/helpers/LiquidationDataProvider.sol).

### View Methods

#### getUserPositionFullInfo

```
getUserPositionFullInfo(address user) public view override returns (UserPositionFullInfo memory)
```

Returns aggregated position information for a user including total collateral, total debt, available borrows, current liquidation threshold, loan-to-value (LTV), and health factor. All values are denominated in the base currency.

**Input Parameters:**

| Name | Type    | Description                                       |
| ---- | ------- | ------------------------------------------------- |
| user | address | The address of the user whose position is queried |

**Return Values:**

| Name                 | Type   | Description                                     |
| -------------------- | ------ | ----------------------------------------------- |
| UserPositionFullInfo | struct | The aggregated position information of the user |

The UserPositionFullInfo struct is composed of the following fields:

| Name                           | Type    | Description                          |
| ------------------------------ | ------- | ------------------------------------ |
| totalCollateralInBaseCurrency  | uint256 | Total collateral in base currency    |
| totalDebtInBaseCurrency        | uint256 | Total debt in base currency          |
| availableBorrowsInBaseCurrency | uint256 | Available borrows in base currency   |
| currentLiquidationThreshold    | uint256 | Current liquidation threshold        |
| ltv                            | uint256 | Loan-to-value ratio                  |
| healthFactor                   | uint256 | Health factor of the user’s position |

#### getCollateralFullInfo

```
getCollateralFullInfo(address user, address collateralAsset) external view override returns (CollateralFullInfo memory)
```

Returns detailed information regarding a user’s collateral for a given asset. The returned struct includes the asset’s unit (based on decimals), its current price (via the Price Oracle), the associated aToken address, the raw collateral balance, and its equivalent value in the base currency.

**Input Parameters:**

| Name            | Type    | Description                                                  |
| --------------- | ------- | ------------------------------------------------------------ |
| user            | address | The address of the user                                      |
| collateralAsset | address | The address of the collateral asset to fetch information for |

**Return Values:**

| Name               | Type   | Description                                             |
| ------------------ | ------ | ------------------------------------------------------- |
| CollateralFullInfo | struct | Detailed collateral information for the specified asset |

The CollateralFullInfo struct is composed of the following fields:

| Name                            | Type    | Description                                         |
| ------------------------------- | ------- | --------------------------------------------------- |
| assetUnit                       | uint256 | The unit value of the asset (10^decimals)           |
| price                           | uint256 | Current price of the asset from the Price Oracle    |
| aToken                          | address | Address of the aToken associated with the asset     |
| collateralBalance               | uint256 | The raw collateral balance of the user              |
| collateralBalanceInBaseCurrency | uint256 | Collateral balance denominated in the base currency |

#### getDebtFullInfo&#x20;

```
getDebtFullInfo(address user, address debtAsset) external view override returns (DebtFullInfo memory)
```

Returns detailed information regarding a user’s debt for a given asset. The returned struct includes the asset’s unit, current price, the associated variable debt token address, the debt balance, and its equivalent value in the base currency.

**Input Parameters:**

| Name      | Type    | Description                                            |
| --------- | ------- | ------------------------------------------------------ |
| user      | address | The address of the user                                |
| debtAsset | address | The address of the debt asset to fetch information for |

**Return Values:**

| Name         | Type   | Description                                       |
| ------------ | ------ | ------------------------------------------------- |
| DebtFullInfo | struct | Detailed debt information for the specified asset |

The DebtFullInfo struct is composed of the following fields:

| Name                      | Type    | Description                                                  |
| ------------------------- | ------- | ------------------------------------------------------------ |
| assetUnit                 | uint256 | The unit value of the asset (10^decimals)                    |
| price                     | uint256 | Current price of the asset from the Price Oracle             |
| variableDebtToken         | address | Address of the variable debt token associated with the asset |
| debtBalance               | uint256 | The raw debt balance of the user                             |
| debtBalanceInBaseCurrency | uint256 | Debt balance denominated in the base currency                |

#### getLiquidationInfo (without custom debt amount)

```
getLiquidationInfo(address user, address collateralAsset, address debtAsset) public view override returns (LiquidationInfo memory)
```

A convenience function that returns liquidation parameters for a user using the maximum possible debt liquidation amount. Internally, it calls the overloaded version with debtLiquidationAmount set to the maximum (type(uint256).max).

**Input Parameters:**

| Name            | Type    | Description                         |
| --------------- | ------- | ----------------------------------- |
| user            | address | The address of the user             |
| collateralAsset | address | The address of the collateral asset |
| debtAsset       | address | The address of the debt asset       |

**Return Values:**

| Name            | Type   | Description                                                        |
| --------------- | ------ | ------------------------------------------------------------------ |
| LiquidationInfo | struct | Detailed liquidation information for the specified user and assets |

The LiquidationInfo struct is composed of the following fields:

| Name                          | Type    | Description                                                          |
| ----------------------------- | ------- | -------------------------------------------------------------------- |
| userInfo                      | struct  | Aggregated position details of the user (UserPositionFullInfo above) |
| collateralInfo                | struct  | Detailed collateral information (CollateralFullInfo above)           |
| debtInfo                      | struct  | Detailed debt information (DebtFullInfo above)                       |
| maxCollateralToLiquidate      | uint256 | Maximum collateral that can be liquidated                            |
| maxDebtToLiquidate            | uint256 | Maximum debt that can be liquidated                                  |
| liquidationProtocolFee        | uint256 | Protocol fee applied on the liquidation bonus                        |
| amountToPassToLiquidationCall | uint256 | Adjusted debt amount for the liquidation call                        |

#### getLiquidationInfo (with custom debt liquidation amount)

```
getLiquidationInfo(address user, address collateralAsset, address debtAsset, uint256 debtLiquidationAmount) public view override returns (LiquidationInfo memory)
```

Returns comprehensive liquidation parameters for a user given a specific collateral asset and debt asset, considering a custom maximum debt liquidation amount. The function aggregates the user’s position, collateral and debt details, checks if liquidation conditions are met, and computes the optimal amounts for liquidation—including any applicable protocol fees.

**Input Parameters:**

| Name                  | Type    | Description                                                                            |
| --------------------- | ------- | -------------------------------------------------------------------------------------- |
| user                  | address | The address of the user                                                                |
| collateralAsset       | address | The address of the collateral asset to be liquidated                                   |
| debtAsset             | address | The address of the debt asset to be repaid                                             |
| debtLiquidationAmount | uint256 | The maximum debt amount that can be liquidated (if lower than the user’s debt balance) |

**Return Values:**

| Name            | Type   | Description                                                        |
| --------------- | ------ | ------------------------------------------------------------------ |
| LiquidationInfo | struct | Detailed liquidation information for the specified user and assets |

The LiquidationInfo struct is composed of the following fields:

| Name                          | Type    | Description                                                          |
| ----------------------------- | ------- | -------------------------------------------------------------------- |
| userInfo                      | struct  | Aggregated position details of the user (UserPositionFullInfo above) |
| collateralInfo                | struct  | Detailed collateral information (CollateralFullInfo above)           |
| debtInfo                      | struct  | Detailed debt information (DebtFullInfo above)                       |
| maxCollateralToLiquidate      | uint256 | Maximum collateral that can be liquidated                            |
| maxDebtToLiquidate            | uint256 | Maximum debt that can be liquidated                                  |
| liquidationProtocolFee        | uint256 | Protocol fee applied on the liquidation bonus                        |
| amountToPassToLiquidationCall | uint256 | Adjusted debt amount for the liquidation call                        |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tydro.com/developers/smart-contracts/view-contracts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
