Branch data Line data Source code
1 : : // SPDX-License-Identifier: BUSL-1.1
2 : : pragma solidity ^0.8.10;
3 : :
4 : : import {AccessControl} from '../../dependencies/openzeppelin/contracts/AccessControl.sol';
5 : : import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';
6 : : import {IACLManager} from '../../interfaces/IACLManager.sol';
7 : : import {Errors} from '../libraries/helpers/Errors.sol';
8 : :
9 : : /**
10 : : * @title ACLManager
11 : : * @author Aave
12 : : * @notice Access Control List Manager. Main registry of system roles and permissions.
13 : : */
14 : : contract ACLManager is AccessControl, IACLManager {
15 : : bytes32 public constant override POOL_ADMIN_ROLE = keccak256('POOL_ADMIN');
16 : : bytes32 public constant override EMERGENCY_ADMIN_ROLE = keccak256('EMERGENCY_ADMIN');
17 : : bytes32 public constant override RISK_ADMIN_ROLE = keccak256('RISK_ADMIN');
18 : : bytes32 public constant override FLASH_BORROWER_ROLE = keccak256('FLASH_BORROWER');
19 : : bytes32 public constant override BRIDGE_ROLE = keccak256('BRIDGE');
20 : : bytes32 public constant override ASSET_LISTING_ADMIN_ROLE = keccak256('ASSET_LISTING_ADMIN');
21 : :
22 : : IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;
23 : :
24 : : /**
25 : : * @dev Constructor
26 : : * @dev The ACL admin should be initialized at the addressesProvider beforehand
27 : : * @param provider The address of the PoolAddressesProvider
28 : : */
29 : : constructor(IPoolAddressesProvider provider) {
30 : 0 : ADDRESSES_PROVIDER = provider;
31 : 0 : address aclAdmin = provider.getACLAdmin();
32 : 0 : require(aclAdmin != address(0), Errors.ACL_ADMIN_CANNOT_BE_ZERO);
33 : 0 : _setupRole(DEFAULT_ADMIN_ROLE, aclAdmin);
34 : : }
35 : :
36 : : /// @inheritdoc IACLManager
37 : : function setRoleAdmin(
38 : : bytes32 role,
39 : : bytes32 adminRole
40 : : ) external override onlyRole(DEFAULT_ADMIN_ROLE) {
41 : 5 : _setRoleAdmin(role, adminRole);
42 : : }
43 : :
44 : : /// @inheritdoc IACLManager
45 : : function addPoolAdmin(address admin) external override {
46 : 2028 : grantRole(POOL_ADMIN_ROLE, admin);
47 : : }
48 : :
49 : : /// @inheritdoc IACLManager
50 : : function removePoolAdmin(address admin) external override {
51 : 1 : revokeRole(POOL_ADMIN_ROLE, admin);
52 : : }
53 : :
54 : : /// @inheritdoc IACLManager
55 : : function isPoolAdmin(address admin) external view override returns (bool) {
56 : 140446 : return hasRole(POOL_ADMIN_ROLE, admin);
57 : : }
58 : :
59 : : /// @inheritdoc IACLManager
60 : : function addEmergencyAdmin(address admin) external override {
61 : 683 : grantRole(EMERGENCY_ADMIN_ROLE, admin);
62 : : }
63 : :
64 : : /// @inheritdoc IACLManager
65 : : function removeEmergencyAdmin(address admin) external override {
66 : 1 : revokeRole(EMERGENCY_ADMIN_ROLE, admin);
67 : : }
68 : :
69 : : /// @inheritdoc IACLManager
70 : : function isEmergencyAdmin(address admin) external view override returns (bool) {
71 : 17013 : return hasRole(EMERGENCY_ADMIN_ROLE, admin);
72 : : }
73 : :
74 : : /// @inheritdoc IACLManager
75 : : function addRiskAdmin(address admin) external override {
76 : 14 : grantRole(RISK_ADMIN_ROLE, admin);
77 : : }
78 : :
79 : : /// @inheritdoc IACLManager
80 : : function removeRiskAdmin(address admin) external override {
81 : 1 : revokeRole(RISK_ADMIN_ROLE, admin);
82 : : }
83 : :
84 : : /// @inheritdoc IACLManager
85 : : function isRiskAdmin(address admin) external view override returns (bool) {
86 : 84695 : return hasRole(RISK_ADMIN_ROLE, admin);
87 : : }
88 : :
89 : : /// @inheritdoc IACLManager
90 : : function addFlashBorrower(address borrower) external override {
91 : 4 : grantRole(FLASH_BORROWER_ROLE, borrower);
92 : : }
93 : :
94 : : /// @inheritdoc IACLManager
95 : : function removeFlashBorrower(address borrower) external override {
96 : 2 : revokeRole(FLASH_BORROWER_ROLE, borrower);
97 : : }
98 : :
99 : : /// @inheritdoc IACLManager
100 : : function isFlashBorrower(address borrower) external view override returns (bool) {
101 : 1012 : return hasRole(FLASH_BORROWER_ROLE, borrower);
102 : : }
103 : :
104 : : /// @inheritdoc IACLManager
105 : : function addBridge(address bridge) external override {
106 : 14 : grantRole(BRIDGE_ROLE, bridge);
107 : : }
108 : :
109 : : /// @inheritdoc IACLManager
110 : : function removeBridge(address bridge) external override {
111 : 1 : revokeRole(BRIDGE_ROLE, bridge);
112 : : }
113 : :
114 : : /// @inheritdoc IACLManager
115 : : function isBridge(address bridge) external view override returns (bool) {
116 : 26 : return hasRole(BRIDGE_ROLE, bridge);
117 : : }
118 : :
119 : : /// @inheritdoc IACLManager
120 : : function addAssetListingAdmin(address admin) external override {
121 : 3 : grantRole(ASSET_LISTING_ADMIN_ROLE, admin);
122 : : }
123 : :
124 : : /// @inheritdoc IACLManager
125 : : function removeAssetListingAdmin(address admin) external override {
126 : 2 : revokeRole(ASSET_LISTING_ADMIN_ROLE, admin);
127 : : }
128 : :
129 : : /// @inheritdoc IACLManager
130 : : function isAssetListingAdmin(address admin) external view override returns (bool) {
131 : 10317 : return hasRole(ASSET_LISTING_ADMIN_ROLE, admin);
132 : : }
133 : : }
|