ACLManager
ACLManager
Access Control List Manager is the main registry of system roles and permissions.
ACLManager allows a Role Admin to manage roles. Role Admin is itself a role that is managed by the DEFAULT_ADMIN_ROLE
.
DEFAULT_ADMIN_ROLE
is held by the ACLAdmin, which is initialised in PoolAddressesProvider
.
Roles
Below we outline the powers/responsibilities of the roles and the specific methods that are only accessible to the holders of these roles.
Role | Responsibilities / Powers | Methods Accessible |
---|---|---|
FLASH_BORROWER | Flash loan premium is waived for the holders of this role.⛔️ Does not include flashLoanSimple | flashLoan |
BRIDGE | Can leverage the Portal feature | mintUnbacked backUnbacked |
ASSET_LISTING_ADMIN | Can update asset oracle sources fallback oracle add new assets to the Spark market | setAssetSources setFallbackOracle initReserves |
RISK_ADMIN | Can update grace period of Oracle Sentinels reserve params unbacked mint cap liquidation protocol fee existing eMode categories and create new. (not category 0) add/remove asset in silo mode | setGracePeriod setReserveBorrowing configureReserveAsCollateral setReserveStableRateBorrowing setReserveFreeze setBorrowableInIsolation setReserveFactor setDebtCeiling setBorrowCap setSupplyCap setLiquidationProtocolFee setEModeCategory setAssetEModeCategory setUnbackedMintCap setReserveInterestRateStrategyAddress setSiloedBorrowing |
ACL_ADMIN | Manage the role admins in the ACLManager | setRoleAdmin addPoolAdmin removePoolAdmin addEmergencyAdmin removeEmergencyAdmin addRiskAdmin removeRiskAdmin addFlashBorrower removeFlashBorrower addBridge removeBridge addAssetListingAdmin removeAssetListingAdmin |
EMERGENCY_ADMIN | Can pause/unpause the pool or individual reserve | setPoolPause |
POOL_ADMIN | Can update token implementations drop reserves pause/unpause reserves activate/deactivate reserves update premiums do all the things available to RISK_ADMIN ASSET_LISTING_ADMIN | all methods available to RISK_ADMIN all methods available to ASSET_LISTING_ADMIN dropReserve updateSpToken updateStableDebtToken updateVariableDebtToken setReserveActive updateBridgeProtocolFee updateFlashloanPremiumTotal updateFlashloanPremiumToProtocol |
View Methods
isPoolAdmin
function isPoolAdmin(address admin)
Returns true
if the address has POOL_ADMIN
role.
isEmergencyAdmin
function isEmergencyAdmin(address admin)
Returns true
if the address has EMERGENCY_ADMIN
role.
isRiskAdmin
function isRiskAdmin(address admin)
Returns true
if the address has RISK_ADMIN
role.
isFlashBorrower
function isFlashBorrower(address borrower)
Returns true
if the address has FLASH_BORROWER
role.
isBridge
function isBridge(address bridge)
Returns true
if the address has BRIDGE
role.
isAssetListingAdmin
function isAssetListingAdmin(address admin)
Returns true
if the address has ASSET_LISTING_ADMIN
role.
Write Methods
setRoleAdmin
setRoleAdmin(bytes32 role, bytes32 adminRole)
Setup admin to manage Roles.
Call Params
Name | Type | Description |
---|---|---|
role | bytes32 | keccak256 hash of one of the following: POOL_ADMIN EMERGENCY_ADMIN RISK_ADMIN FLASH_BORROWER BRIDGE ASSET_LISTING_ADMIN |
adminRole | bytes32 | adminRole responsible for role. 0x00 is reserved for DEFAULT_ADMIN_ROLE |
addPoolAdmin
addPoolAdmin(address admin)
Add address to the list of members in POOL_ADMIN
role. Holders of this role can update token implementations, drop, (un)pause and (de)activate reserves, update premiums and do everything the ASSET_LISTING_ADMIN
and RISK_ADMIN
can do.
Call Params
Name | Type | Description |
---|---|---|
admin | address | address which will be granted POOL_ADMIN role. |
removePoolAdmin
removePoolAdmin(address admin)
Remove given address from the list of members in POOL_ADMIN
role.
Call Params
Name | Type | Description |
---|---|---|
admin | address | address for which POOL_ADMIN role permissions must be revoked. |
addEmergencyAdmin
addEmergencyAdmin(address admin)
Add address to the list of members in EMERGENCY_ADMIN
role. Holders of this role can pause and unpause the pool or an individual reserve.
Name | Type | Description |
---|---|---|
admin | address | address which will be granted EMERGENCY_ADMIN role. |
removeEmergencyAdmin
function removeEmergencyAdmin(address admin)
Remove given address from the list of members in EMERGENCY_ADMIN
role.
Name | Type | Description |
---|---|---|
admin | address | address for which EMERGENCY_ADMIN role permissions must be revoked. |
addRiskAdmin
function addRiskAdmin(address admin)
Add address to the list of members in RISK_ADMIN
role. Holders of this role can update grace period of Oracle Sentinels, reserve params, unbacked mint cap, liquidation fee and eMode categories.
Name | Type | Description |
---|---|---|
admin | address | address which will be granted RISK_ADMIN role. |
removeRiskAdmin
Remove given address from the list of members in RISK_ADMIN
role.
Name | Type | Description |
---|---|---|
admin | address | address for which RISK_ADMIN role permissions must be revoked. |
addFlashBorrower
function addFlashBorrower(address borrower)
Add address to the list of members in FLASH_BORROWER
role. Holders of this role do not pay premium for flash loan (Does not apply to flashLonaSimple
).
removeFlashBorrower
function removeFlashBorrower(address borrower)
Remove given address from the list of members in FLASH_BORROWER
role.
Name | Type | Description |
---|---|---|
admin | address | address for which FLASH_BORROWER role permissions must be revoked. |
addBridge
addBridge(address bridge)
Add contract address to the list of bridges. Holders of this role can leverage the Portal feature to seamlessly move supplied assets across Spark Lend markets on different networks.
Name | Type | Description |
---|---|---|
bridge | address | address which will be granted BRIDGE role. |
removeBridge
removeBridge(address bridge)
Remove contract address from the list of bridges.
Name | Type | Description |
---|---|---|
bridge | address | address for which BRIDGE role permissions must be revoked. |
addAssetListingAdmin
function addAssetListingAdmin(address admin)
Add address to the list of member in ASSET_LISTING_ADMIN
role. Holder of this role can update oracles & add new asset to the Spark market.
Name | Type | Description |
---|---|---|
admin | address | address which will be granted ASSET_LISTING_ADMIN role. |
removeAssetListingAdmin
function removeAssetListingAdmin(address admin)
Remove address from the list of members in ASSET_LISTING_ADMIN
role.
Name | Type | Description |
---|---|---|
admin | address | address for which ASSET_LISTING_ADMIN role permissions must be revoked. |
ABI
[
{
"inputs": [
{
"internalType": "contract IPoolAddressesProvider",
"name": "provider",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [],
"name": "ADDRESSES_PROVIDER",
"outputs": [
{
"internalType": "contract IPoolAddressesProvider",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "ASSET_LISTING_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "BRIDGE_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "EMERGENCY_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "FLASH_BORROWER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POOL_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RISK_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "addAssetListingAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "bridge",
"type": "address"
}
],
"name": "addBridge",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "addEmergencyAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "borrower",
"type": "address"
}
],
"name": "addFlashBorrower",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "addPoolAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "addRiskAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isAssetListingAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "bridge",
"type": "address"
}
],
"name": "isBridge",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isEmergencyAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "borrower",
"type": "address"
}
],
"name": "isFlashBorrower",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isPoolAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isRiskAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "removeAssetListingAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "bridge",
"type": "address"
}
],
"name": "removeBridge",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "removeEmergencyAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "borrower",
"type": "address"
}
],
"name": "removeFlashBorrower",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "removePoolAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "removeRiskAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "adminRole",
"type": "bytes32"
}
],
"name": "setRoleAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
]