# AaveV3Lender

## POOL

```solidity
contract IPool POOL
```

The AAVE pool retrieved from the pool provider.

## ADDRESS\_PROVIDER

```solidity
contract IPoolAddressesProvider ADDRESS_PROVIDER
```

The AAVE pool address provider.

## constructor

```solidity
constructor(address addressesProvider) public
```

contract's constructor

### Parameters

| Name              | Type    | Description                        |
| ----------------- | ------- | ---------------------------------- |
| addressesProvider | address | address of AAVE's address provider |

## \_approveLender

```solidity
function _approveLender(contract IERC20 token, uint256 amount) internal
```

allows this contract to approve the POOL to transfer some underlying asset on its behalf

*this is a necessary step prior to supplying tokens to the POOL or to repay a debt*

### Parameters

| Name   | Type            | Description                                         |
| ------ | --------------- | --------------------------------------------------- |
| token  | contract IERC20 | the underlying asset for which approval is required |
| amount | uint256         | the approval amount                                 |

## \_exitMarket

```solidity
function _exitMarket(contract IERC20 underlying) internal
```

prevents the POOL from using some underlying as collateral

*this call will revert if removing the asset from collateral would put the account into a liquidation state*

### Parameters

| Name       | Type            | Description                               |
| ---------- | --------------- | ----------------------------------------- |
| underlying | contract IERC20 | the token one wishes to remove collateral |

## \_enterMarkets

```solidity
function _enterMarkets(contract IERC20[] underlyings) internal
```

allows the POOL to use some underlying tokens as collateral

*when supplying a token for the first time, it is automatically set as possible collateral so there is no need to call this function for it.*

### Parameters

| Name        | Type               | Description                               |
| ----------- | ------------------ | ----------------------------------------- |
| underlyings | contract IERC20\[] | the token one wishes to add as collateral |

## overlying

```solidity
function overlying(contract IERC20 asset) public view returns (contract IERC20 aToken)
```

convenience function to obtain the overlying of a given asset

### Parameters

| Name  | Type            | Description          |
| ----- | --------------- | -------------------- |
| asset | contract IERC20 | the underlying asset |

### Return Values

| Name   | Type            | Description         |
| ------ | --------------- | ------------------- |
| aToken | contract IERC20 | the overlying asset |

## \_redeem

```solidity
function _redeem(contract IERC20 token, uint256 amount, address to) internal returns (uint256 redeemed)
```

redeems funds from the pool

### Parameters

| Name   | Type            | Description                                                    |
| ------ | --------------- | -------------------------------------------------------------- |
| token  | contract IERC20 | the asset one is trying to redeem                              |
| amount | uint256         | of assets one wishes to redeem                                 |
| to     | address         | is the address where the redeemed assets should be transferred |

### Return Values

| Name     | Type    | Description                                       |
| -------- | ------- | ------------------------------------------------- |
| redeemed | uint256 | the amount of asset that were transferred to `to` |

## \_supply

```solidity
function _supply(contract IERC20 token, uint256 amount, address onBehalf, bool noRevert) internal returns (bytes32)
```

supplies funds to the pool

### Parameters

| Name     | Type            | Description                                                                                       |
| -------- | --------------- | ------------------------------------------------------------------------------------------------- |
| token    | contract IERC20 | the asset one is supplying                                                                        |
| amount   | uint256         | of assets to be transferred to the pool                                                           |
| onBehalf | address         | address of the account whose collateral is being supplied to and which will receive the overlying |
| noRevert | bool            | does not revert if supplies throws                                                                |

### Return Values

| Name | Type    | Description                  |
| ---- | ------- | ---------------------------- |
| \[0] | bytes32 | reason for revert from Aave. |

## \_claimRewards

```solidity
function _claimRewards(address[] assets, address to) internal returns (address[] rewardsList, uint256[] claimedAmounts)
```

rewards claiming.

### Parameters

| Name   | Type       | Description                                        |
| ------ | ---------- | -------------------------------------------------- |
| assets | address\[] | list of overlying for which one is claiming awards |
| to     | address    | whom the rewards should be sent                    |

### Return Values

| Name           | Type       | Description                                  |
| -------------- | ---------- | -------------------------------------------- |
| rewardsList    | address\[] | the address of assets that have been claimed |
| claimedAmounts | uint256\[] | the amount of assets that have been claimed  |

## checkAsset

```solidity
function checkAsset(contract IERC20 asset) public view returns (bool)
```

verifies whether an asset can be supplied on pool

### Parameters

| Name  | Type            | Description                 |
| ----- | --------------- | --------------------------- |
| asset | contract IERC20 | the asset one wants to lend |

### Return Values

| Name | Type | Description                               |
| ---- | ---- | ----------------------------------------- |
| \[0] | bool | true if the asset can be supplied on pool |


---

# 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.mangrove.exchange/dev/strat-lib/technical-references/api-preferences/strats/src/strategies/integrations/aavev3lender.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.
