---
description: The Aave Arc repository can be found on Github.
---

# Protocol Overview

## Main Protocol Actors

### Permission Admins

Only certain entities have the ability to '**whitelist'** wallet addresses in Aave Arc. These are the `permissionAdmins` that can grant permission to KYC-approved users for the specific role in Aave Arc.

"Permission Admins" are selected via Aave Governance and are responsible to conduct KYC/AML compliance on the entities or individuals interested to participate in Aave Arc.

### Permissioned Users

Only those individuals/entities with Ethereum wallet addresses that have been “whitelisted” by a Permission Admin to act in one or more valid role (enumerated👇🏻) have permission to participate in an Aave Arc pool.

{% hint style="info" %}
💡 Permissioned Users' roles in Aave Arc can only be modified by the whitelister who onboarded the user/address into the market and not by other whitelisters.
{% endhint %}

#### **Permission-ed Roles**

* `0: Depositor`
* `1: Borrower`
* `2: Liquidator`
* `3: Stable Rate Manager`

## Main Contracts

### [PermissionManager](contracts-interacting-with-protocol/permissionmanager)

Implements the basic whitelisting functions for the actors in the permissioned market. This contract is interacted by&#x20;

* **whitlister:** for adding/removing users in permissioned roles
* **governance**: adding/removing permission admins

### [PermissionedLendingPool](../contracts-interacting-with-protocol/permissionedlendingpool#permissionedlendingpool)

The main contract which exposes all the user-oriented actions that can be invoked using either Solidity or web3 libraries.



### LendingPoolAddressProvider

The main addresses register of the Aave Arc markets. The latest contract addresses should be retrieved from this contract by making the appropriate calls.



### aTokens

The yield-generating, tokenised deposits used throughout the Aave protocol. They implement most of the standard EIP-20/ERC20 token methods with slight modifications, as well as Aave specific methods including:

* scaledBalanceOf
* getScaledUserBalanceAndSupply
* scaledTotalSupply

All aTokens also implement [EIP-2612](https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md), which via the [`permit()`](broken-reference) function enables gas-less transfers and single transaction approve + actions.&#x20;

### [Permissioned Debt Tokens](contracts-interacting-with-protocol/permissioned-debt-tokens)

Debt tokens to track borrowing positions of users

## Supporting Contracts

### [PermissionedWETHGateway](contracts-interacting-with-protocol/permissionedwethgateway)

Helper contract for interacting with native chain token.

### LendingPoolCollateralManager

Using `delegatecall` via the LendingPool contract, the LendingPoolCollateralManager implements actions involving management of collateral in the protocol, including:

* `liquidationCall()`

The above function should only be called via the main `LendingPool` contract to avoid loss of funds and to retrieve decoded error/success messages.

### LendingPoolConfigurator

Provides configuration functions for the LendingPool contracts. It has a number of important methods that can be only called via Aave Arc Pool Admin i.e. Aave Governance:

* Activates / Deactivates reserves,
* Enables / Disables borrowing for a reserve,
* Enables / Disables using a reserve as collateral,
* Enables / Disables stable rate borrowing for a reserve,
* Freezes / Unfreezes reserves,
* Updates a reserve's Loan to Value,
* Updates a reserve's liquidation threshold,
* Updates a reserve's liquidation bonus,
* Updates a reserve's decimals,
* Updates a reserve's interest rate strategy address,
* Activates / Deactivates all functions of a LendingPool in emergencies.

For all of the above functions, relevant events are emitted to the blockchain. Anyone can monitor these changes to know when values have been modified or added/removed.

### Interest Rate Strategy

Holds the information needed to calculate and update the yield relating to specific liquidity pools.

Each contract stores the optimised base curves using the corresponding parameters of each asset. This means that there is a mathematical function which determines the yield of each liquidity pool, with the yield changing based on the amount of borrowed funds and the total liquidity (i.e. utilisation) of the pool.

The parameters for the optimised base curves are:

* `baseVariableBorrowRate`
* `variableRateSlope1`
* `variableRateSlope2`
* `stableRateSlope1`
* `stableRateSlope2`

The yields are calculated depending on the available liquidity and the total borrowed amount.

### Price Oracle

Provides asset price data required throughout the Aave protocol, using Chainlink and a fallback when necessary.
