Aave V3 ACL Manager Contract
The Access Control List Manager (ACLManager) is the main registry of system roles and permissions.
The Aave Protocol implements an access control list to segregate powers and/or benefits that can be allocated to different entities on the protocol. The ACL_ contract is managed by the Pool contract.
ACLManager keeps track of the individual roles and its holders, and allows a Role Admin to manage roles. Role Admin is itself a role that is managed by the DEFAULT_.
The DEFAULT_ is held by the ACL_, and should be initialized in the Pool beforehand.
The source code is available on GitHub.
Roles
Below we outline the responsibilities/powers of the roles and the specific methods that are only accessible to the holders of these roles.
The FLASH_ and BRIDGE roles have few direct responsibilities and can primarily access specific features of the protocol, while ADMIN roles have the power and responsibility to handle risk or configuration parameters.
FLASH_BORROWER
Holders of this role will have the premium on flash loans waived (this does not include the simple flash loan).
Methods Accessible:
Pool:
BRIDGE
Deprecated. Since Aave V3.4 this role grants no access: mint and back were removed from the Pool. ACLManager still exposes BRIDGE_, add, remove and is.
ASSET_LISTING_ADMIN
Holders of this role can:
- Update asset oracle sources and the fallback oracle.
- Add new assets to the Aave market.
Methods Accessible:
RISK_ADMIN
Holders of this role can:
- Update reserve parameters such as reserve factor, caps, E-Mode category, borrowing enabled, freeze/unfreeze, LTV, liquidation threshold, liquidation bonus (cannot pause/unpause or activate/deactivate a reserve).
- Create new and update existing E-Mode categories (not category 0), including their isolated flag.
- Update the liquidation protocol fee.
Methods Accessible:
setReserve Borrowing() configureReserve As Collateral() setReserve Freeze() setReserve Factor() setBorrow Cap() setSupply Cap() setLiquidation Protocol Fee() setEMode Category() setAsset Collateral In EMode() setAsset Borrowable In EMode() setEMode Category Isolated() setReserve Ltvzero() setAsset Ltvzero In EMode() setReserve Interest Rate Data() setReserve Flash Loaning()
ACL_ADMIN
Holders of this role manage the role admins in the ACLManager. The DEFAULT_ is held by the ACL_, and should be initialized in the Pool beforehand.
Methods Accessible:
setRole Admin() addPool Admin() removePool Admin() addEmergency Admin() removeEmergency Admin() addRisk Admin() removeRisk Admin() addFlash Borrower() removeFlash Borrower() addBridge() removeBridge() addAsset Listing Admin() removeAsset Listing Admin()
EMERGENCY_ADMIN
Holders of this role can pause and unpause the pool or an individual reserve.
Methods Accessible:
setReserve Pause() setPool Pause() setReserve Freeze() disableLiquidation Grace Period() setEMode Category Isolated() setReserve Ltvzero() setAsset Ltvzero In EMode()
POOL_ADMIN
Holders of this role can update token implementations, (un)pause and (de)activate reserves, update premiums along with everything the ASSET_ and RISK_ can do.
All deployers have resigned their POOL_ roles. All instances of the POOL_ role, across all V3 networks, are now governed by the Guardians multisig or by the Governance Bridge executors.
Methods Accessible:
All methods accessible to ASSET_.
All methods accessible to RISK_.
Pool:
updateAToken() updateVariable Debt Token() setReserve Active() updateFlashloan Premium() setReserve Interest Rate Data()
Write Methods
setRoleAdmin
function setRoleAdmin(bytes32 role, bytes32 adminRole) external override onlyRole(DEFAULT_ADMIN_ROLE)
Sets admin as the admin of role. By default, the admin for all roles is DEFAULT_.
Only callable by an address with DEFAULT_.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| role | bytes32 | The role to be managed by the admin role - keccak256 hash of one of the following: POOL_, EMERGENCY_, RISK_, FLASH_, BRIDGE, ASSET_ |
| adminRole | bytes32 | The admin role. 0x00 is reserved for the DEFAULT_ |
addPoolAdmin
function addPoolAdmin(address admin) external override
Adds a new admin as Pool Admin. The address is added to the list of members with the POOL_ role. Holders of this role can update token implementations, (un)pause and (de)activate reserves, update premiums and do everything the ASSET_ and RISK_ can do.
Only callable by the Role Admin of the POOL_ role, set
by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address which will be granted the POOL_ role |
removePoolAdmin
function removePoolAdmin(address admin) external override
Removes an admin as Pool Admin. The given address is removed from the list of members with the POOL_ role.
Only callable by the Role Admin of the POOL_ role, set
by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address for which the POOL_ role permissions will be removed |
addEmergencyAdmin
function addEmergencyAdmin(address admin) external override
Adds a new admin as an Emergency Admin. The address is added to the list of members with the EMERGENCY_ role. Holders of this role can pause and unpause the pool or an individual reserve.
Only callable by the Role Admin of the EMERGENCY_
role, set by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address which will be granted the EMERGENCY_ role |
removeEmergencyAdmin
function removeEmergencyAdmin(address admin) external override
Removes an admin as Emergency Admin. The given address is removed from the list of members with the EMERGENCY_ role.
Only callable by the Role Admin of the EMERGENCY_
role, set by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address for which the EMERGENCY_ role permissions will be removed |
addRiskAdmin
function addRiskAdmin(address admin) external override
Adds a new admin as a Risk Admin. The address is added to the list of members with the RISK_ role. Holders of this role can update reserve params, liquidation fee and E-Mode categories.
Only callable by the Role Admin of the RISK_ role, set
by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address which will be granted the RISK_ role |
removeRiskAdmin
function removeRiskAdmin(address admin) external override
Removes an admin as Risk Admin. The given address is removed from the list of members with the RISK_ role.
Only callable by the Role Admin of the RISK_ role, set
by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address for which the RISK_ role permissions will be removed |
addFlashBorrower
function addFlashBorrower(address borrower) external override
Adds a new borrower address as Flash Borrower. The address is added to the list of members with the FLASH_ role. Holders of this role do not pay premium for flash loan (does not apply to flash).
Only callable by the Role Admin of the FLASH_
role, set by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| borrower | address | The address which will be granted the FLASH_ role |
removeFlashBorrower
function removeFlashBorrower(address borrower) external override
Removes borrower as Flash Borrower. The given borrower address is removed from the list of members with the FLASH_ role.
Only callable by the Role Admin of the FLASH_
role, set by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| borrower | address | The address for which the FLASH_ role permissions will be removed |
addAssetListingAdmin
function addAssetListingAdmin(address admin) external override
Adds a new admin as Asset Listing Admin. The address is added to the list of members with the ASSET_ role. Holders of this role can update oracles and add new assets to the Aave market.
Only callable by the Role Admin of the
ASSET_ role, set by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address which will be granted ASSET_ role |
removeAssetListingAdmin
function removeAssetListingAdmin(address admin) external override
Removes an admin as Asset Listing Admin. The given address is removed from the list of members with the ASSET_ role.
Only callable by the Role Admin of the
ASSET_ role, set by Aave Governance.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address for which ASSET_ role permissions will be removed |
View Methods
isPoolAdmin
function isPoolAdmin(address admin) external view override returns (bool)
Returns true if the address has the POOL_ role, false otherwise.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address to check |
Return Values:
| Type | Description |
|---|---|
bool | true if the given address is POOL_, false otherwise |
isEmergencyAdmin
function isEmergencyAdmin(address admin) external view override returns (bool)
Returns true if the address has the EMERGENCY_ role, false otherwise.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address to check |
Return Values:
| Type | Description |
|---|---|
bool | true if the given address is EMERGENCY_, false otherwise |
isRiskAdmin
function isRiskAdmin(address admin) external view override returns (bool)
Returns true if the address has the RISK_ role, false otherwise.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address to check |
Return Values:
| Type | Description |
|---|---|
bool | true if the given address is RISK_, false otherwise |
isFlashBorrower
function isFlashBorrower(address borrower) external view override returns (bool)
Returns true if the address has the FLASH_ role, false otherwise.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| borrower | address | The address to check |
Return Values:
| Type | Description |
|---|---|
bool | true if the given address is FLASH_, false otherwise |
isBridge
function isBridge(address bridge) external view override returns (bool)
Returns true if the address has BRIDGE role, false otherwise.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| bridge | address | The address to check |
Return Values:
| Type | Description |
|---|---|
bool | true if the given address is BRIDGE, false otherwise |
isAssetListingAdmin
function isAssetListingAdmin(address admin) external view override returns (bool)
Returns true if the address has the ASSET_ role, false otherwise.
Input Parameters:
| Name | Type | Description |
|---|---|---|
| admin | address | The address to check |
Return Values:
| Type | Description |
|---|---|
bool | true if the given address is ASSET_, false otherwise |