# Functional Requirements

## Roles

### Owner

* `arcUSD`
  * Can upgrade contract
  * Can set a supply cap
  * Can set TaxManager address
  * Can set RebaseManager address
  * Can set arcUSDMinter address
* `arcUSDMinter`
  * Can upgrade contract
  * Can set the claim delay
  * Can set max age for handling stale oracle data
  * Can add/remove new collateral tokens
  * Can update the oracle for a supported token
  * Can set the custodian address
  * Can set the admin address
  * Can set the whitelister address
  * Can whitelist new minters
  * Can set the coverage ratio
  * Can extend a request’s claimAfter timestamp
  * Can enable/disable redemptions
  * Can set the redemption cap
* `arcUSDTaxManager`
  * Can set the tax rate
  * Can set the FeeCollector address
* `arcUSDFeeCollector`
  * Can set the reward distribution
* `CustodianManager`
  * Can set the main custodian address
  * Can set the gelato task address
  * Can upgrade the contract

### Admin

* `arcUSDMinter`
  * Can set the coverage ratio
  * Can extend a request’s claimAfter timestamp

### Whitelister

* `arcUSDMinter`
  * Can whitelist new minters

### Whitelisted

* `arcUSDMinter`
  * Can call mint
  * Can call requestTokens
  * Can call claimTokens

### Custodian

* `arcUSDMinter`
  * Can withdraw collateral

### RebaseManager

* `arcUSD`
  * Can set the rebaseIndex
  * Can opt a contract out of rebase

### GelatoTask

* `CustodianManager`
  * Can withdraw funds from arcUSDMinter if available, transferring it to the main custodian address
