# Role Management

## Role & Permissions

### DEFAULT\_ADMIN

The DEFAULT\_ADMIN role serves as the highest administrative authority in the system, possessing complete control over role management and critical system parameters. This role can manage all other roles, control emergency functions, configure core system parameters, and execute privileged operations across all contracts. It is typically assigned to a secure multisig wallet or governance contract and cannot be renounced to prevent system lockup.\
A delay of three days must be observed before granting that role to a new address.

**Role Holders**: Usual Multisig

* Add USD0 RWA (TokenMapping)
* Unpause (AirdropDistribution, AirdropTaxCollector, DaoCollateral, DistributionModule, L2Usd0, L2Usd0PP, SwapperEngine, Usd0, USD0pp, Usual, UsualS, USUALSP, UsualX)
* Activate/Deactivate CBR (DaoCollateral)
* Set redeem fee (DaoCollateral)
* Redeem DAO (DaoCollateral)
* Unpause redeem/swap (DaoCollateral)
* Set max depeg threshold (AbstractContract)
* Initialize token oracle (ClassicalOracle, UsualOracle)
* Set role admin (RegistryAccess)
* Set contract (RegistryContract)
* Update minimum USDC amount provided (SwapperEngine)
* Emergency withdraw (USD0pp)

### PAUSING\_CONTRACTS\_ROLE

The PAUSING\_CONTRACTS\_ROLE exists as an emergency control mechanism to halt contract operations when critical issues are detected. This role has the ability to pause functionality across multiple core contracts including token transfers, DAO collateral operations, and swapper engine activities. It serves as a first line of defense against potential exploits or system anomalies.

**Role Holders**: Usual Multisig

* Pause ( DaoCollateral, DistributionModule, L2Usd0, L2Usd0PP, SwapperEngine, Usd0, USD0pp, Usual, UsualS, USUALSP, UsualX)

### UNPAUSING\_CONTRACTS\_ROLE

The UNPAUSING\_CONTRACTS\_ROLE is crucial for resuming normal operations after an emergency pause has been enacted. This role ensures that, after thorough checks and validations, the systems and contract functionalities that were halted can be safely reactivated. It is critical for maintaining operational continuity and system integrity.

**Role Holders**: Usual Multisig

* Unpause ( DaoCollateral, DistributionModule, L2Usd0, L2Usd0PP, SwapperEngine, Usd0, USD0pp, Usual, UsualS, USUALSP, UsualX)

### USUAL\_M\_PAUSE

The USUAL\_M\_PAUSE role is dedicated to managing pause functions for wrapped m. Holders of this role have the authority to initiate emergency pauses, ensuring immediate response to critical threats or issues within the system's operations. This ability is essential for maintaining system security and operational stability during unforeseen events.

**Role Holders**: Usual Pauser

* Pause (UsualM)

### USUAL\_M\_UNPAUSE

The USUAL\_M\_UNPAUSE role is critical for resuming operations that were halted due to an emergency pause. Holders of this role can safely unpause the system once the underlying issues are addressed, ensuring that the system returns to normal operations without compromising security and stability.

**Role Holders**: Usual Multisig

* Unpause (UsualM)

### USUAL\_M\_UNWRAP

The USUAL\_M\_UNWRAP role is responsible for managing the unwrapping operations within the system. This involves managing the conversion of wrapped tokens back to their original form in a secure and efficient manner, ensuring liquidity and accessibility for stakeholders.

**Role Holders**: Usual Multisig

* Unwrap (UsualM)

### USUAL\_M\_MINTCAP\_ALLOCATOR

The USUAL\_M\_MINTCAP\_ALLOCATOR is responsible for managing the allocation of the minting cap within the system. This role ensures that minting operations are within the predefined limits, maintaining stability and preventing excessive token creation which could impact the market.

**Role Holders**: Usual Mintcap Multisig

* setMintCap (UsualM)

### NONCE\_THRESHOLD\_MANAGER

The NONCE\_THRESHOLD\_MANAGER is tasked with continuous monitoring and management of the nonce thresholds within the DAO collateral system. This role requires frequent adjustments based on transaction volume and emerging security requirements, ensuring robust protection against unauthorized transaction replays.

**Role Holders**: Usual Multisig

* Monitor and adjust nonce thresholds (NonceManagement)

### NONCE\_THRESHOLD\_SETTER\_ROLE

The NONCE\_THRESHOLD\_SETTER\_ROLE exists to manage the nonce threshold parameters in the DAO collateral system. This role is responsible for setting and adjusting the nonce threshold that determines the validity of swap intents, helping prevent replay attacks and ensuring transaction ordering in the RWA to STBC swap process.

**Role Holders**: Usual Multisig

* Set nonce threshold (DaoCollateral)

### INTENT\_MATCHING\_ROLE

The INTENT\_MATCHING\_ROLE exists to facilitate secure RWA to STBC token swaps in the DAO collateral system. This role is responsible for executing swap intents by matching off-chain orders with on-chain transactions, ensuring proper order execution and token transfers between parties. The role is typically assigned to trusted swap operators or automated market makers authorized by the Usual Multisig.

**Role Holders**: Swapper Engine Keeper

* Swap RWA to STBC intent (DaoCollateral)

### DISTRIBUTION\_OPERATOR\_ROLE

The DISTRIBUTION\_OPERATOR\_ROLE exists to manage the daily distribution of USUAL tokens across various protocol buckets and off-chain distributions. This role is responsible for executing the core token distribution mechanics, including calculating new emissions, distributing tokens to on-chain vaults (Usual+ and Usual\*), and managing the off-chain distribution queue through merkle proofs. The role is typically assigned to an automated keeper managed.

**Role Holders**: Google KMS Service Account (Keeper)

* Distribute USUAL to buckets (DistributionModule)
* Queue off-chain USUAL distribution (DistributionModule)
* Reset off-chain distribution queue (DistributionModule)

### DISTRIBUTION\_ALLOCATOR\_ROLE

The DISTRIBUTION\_ALLOCATOR\_ROLE exists to manage the core economic parameters of the USUAL token distribution system. This role is responsible for configuring the distribution mechanics by setting emission rates, bucket allocations, and key distribution parameters that determine how USUAL tokens are distributed across different protocol components. The role has significant control over the tokenomics and must be carefully managed to ensure fair and efficient token distribution. It is typically assigned to a Usual Multisig under DAO oversight.

**Role Holders**: Usual DAO

* Set buckets distribution (DistributionModule)
* Set gamma (DistributionModule)
* Set rate min (DistributionModule)
* Set D (DistributionModule)
* Set M0 (DistributionModule)

### DISTRIBUTION\_CHALLENGER\_ROLE

The DISTRIBUTION\_CHALLENGER\_ROLE exists as a security mechanism to ensure the integrity of off-chain USUAL token distributions. This role has the authority to challenge and invalidate potentially incorrect or malicious distributions before they are finalized. It can challenge all distributions in the queue that are older than a specified timestamp and optionally propose new valid distributions with corrected merkle roots. The role serves as a critical safeguard against distribution errors or manipulation attempts and is typically assigned to the Usual Multisig.

**Role Holders**: Usual Multisig

* Challenge distribution (DistributionModule)

### BLACKLIST\_ROLE

The BLACKLIST\_ROLE exists as a security mechanism to protect the protocol from malicious actors, comply with regulatory requirements, and ensure rapid response to security incidents. This role has the authority to restrict specific addresses from participating in token transfers and protocol operations across multiple core contracts including L2USD0, L2USD0PP, USD0PP, USD0, USUAL, USUALS, and USUALX.

**Role Holders**: Usual Multisig

* Blacklist/Unblacklist (L2Usd0, L2Usd0PP, USD0pp, Usd0, Usual, UsualS, UsualX)

### USD0\_MINT

The USD0\_MINT role exists as a critical control mechanism for managing the supply of USD0 tokens in the system. This role has the authority to mint new USD0 tokens across multiple contracts including L2USD0, L2USD0PP, and USD0, but only when there is sufficient backing in the treasury. The role is typically assigned to the DAO Collateral contract and other protocol-controlled contracts to ensure automated and secure minting operations.

**Role Holders**: DAO Collateral Contract, SwapperEngine

* Mint (L2Usd0, L2Usd0PP, Usd0)

### USD0\_BURN

The USD0\_BURN role exists as a critical control mechanism for managing the supply of USD0 tokens in the system. This role has the authority to burn USD0 tokens across multiple contracts including L2USD0, L2USD0PP, and USD0, ensuring proper supply management and redemption functionality. The role is typically assigned to the DAO Collateral contract and SwapperEngine to enable automated burning operations during redemptions and swaps.

**Role Holders**: DAO Collateral Contract, SwapperEngine

* Burn (L2Usd0, L2Usd0PP, Usd0)
* Burn from (L2Usd0, L2Usd0PP, Usd0)

### EARLY\_BOND\_UNLOCK\_ROLE

The EARLY\_BOND\_UNLOCK\_ROLE exists to manage early bond unlocking functionality in the USD0PP (USD0 Plus Plus) contract. This role is responsible for configuring and executing early bond release mechanisms, allowing authorized entities to set up special unlock periods and allocate early unlock balances for specific bond holders.

**Role Holders**: Usual Multisig

* Allocate early unlock balance (USD0pp)
* Setup early unlock period (USD0pp)

### PEG\_MAINTAINER\_ROLE

The PEG\_MAINTAINER\_ROLE exists to maintain the USD0 peg through interactions with Curve pools and peg maintenance mechanisms. This role is responsible for triggering the Par mechanism on the USD0/USD0PP Curve pools in the case the peg is broken.

**Role Holders**: Usual Multisig

* Trigger PAR mechanism Curvepool (USD0pp)
* Unwrap peg maintainer (USD0pp)

### USUAL\_MINT

The USUAL\_MINT role exists to control the minting of new USUAL tokens. This role has the authority to mint new USUAL tokens to specified addresses, ensuring that token supply expansion follows protocol rules and economic parameters. The role is typically assigned to the Distribution Module contract to handle automated emissions and rewards distribution.

**Role Holders**: Distribution Module Contract

* Mint (Usual)

### USUAL\_BURN

The USUAL\_BURN role exists as a critical control mechanism for managing the supply of USUAL tokens in the system. This role has the authority to burn USUAL tokens from any address, ensuring proper supply management during redemptions, liquidations, or other protocol operations that require token destruction. The role is typically assigned to protocol-controlled contracts.

**Role Holders**: N/A

* Burn (Usual)
* Burn from (Usual)

### USUALS\_BURN

The USUALS\_BURN role exists as a critical control mechanism for managing the supply of USUALS tokens in the system. This role has the authority to burn USUALS tokens from any address. The role is typically assigned to protocol-controlled contracts that need to manage USUALS token supply, particularly during staking and unstaking operations.

**Role Holders**: USUALSP Contract

* Burn (UsualS)
* Burn from (UsualS)

### USUALSP\_OPERATOR\_ROLE

The USUALSP\_OPERATOR\_ROLE exists to manage the staking and allocation mechanics of the USUALS token staking program. This role is responsible for configuring initial token allocations, managing the staking process, and handling original allocation removals in the USUALSP (USUAL Staking Pool) contract. The role has significant control over the staking parameters and must be carefully managed to ensure fair distribution and proper vesting of tokens.

**Role Holders**: Usual Multisig

* Allocate (USUALSP)
* Remove original allocation (USUALSP)
* Stake UsualS (USUALSP)

### WITHDRAW\_FEE\_UPDATER\_ROLE

The WITHDRAW\_FEE\_UPDATER\_ROLE exists to manage withdrawal fee parameters in the UsualX contract. This role is responsible for adjusting the fees charged when users withdraw their tokens, allowing the protocol to maintain economic stability and prevent exploitation of the withdrawal mechanism.

**Role Holders**: Usual Multisig

* Update withdraw fee (UsualX)

### FLOOR\_PRICE\_UPDATER\_ROLE

The FLOOR\_PRICE\_UPDATER\_ROLE exists to manage the minimum price threshold for USD0PP tokens in the system. This role is responsible for adjusting the floor price parameter that helps maintain price stability and protect token holders from excessive devaluation. The role has the authority to update floor prices in the USD0PP contract, which directly impacts the minimum value guarantee of the token.

**Role Holders**: Usual Multisig

* Update floor price (USD0pp)

### USD0PP\_USUAL\_DISTRIBUTION\_ROLE

The USD0PP\_USUAL\_DISTRIBUTION\_ROLE exists to manage the USUAL token distribution rate per USD0PP token. This role is responsible for adjusting the distribution rate parameter that determines how much USUAL is distributed per USD0PP token.

**Role Holders**: Usual Multisig

* Update usualDistributionPerUsd0pp (USD0pp)

### USD0PP\_DURATION\_COST\_FACTOR\_ROLE

The USD0PP\_DURATION\_COST\_FACTOR\_ROLE exists to manage the duration cost factor that affects early redemption costs. This role is responsible for adjusting the duration cost factor parameter that helps determine the USUAL burn amount required for early redemptions.

**Role Holders**: Usual Multisig

* Update durationCostFactor (USD0pp)

### USD0PP\_TREASURY\_ALLOCATION\_RATE\_ROLE

The USD0PP\_TREASURY\_ALLOCATION\_RATE\_ROLE exists to manage the percentage of burned USUAL that goes to the treasury during early redemptions. This role is responsible for adjusting the treasury allocation rate in basis points.

**Role Holders**: Usual Multisig

* Update treasuryAllocationRate (USD0pp)

### USD0PP\_TARGET\_REDEMPTION\_RATE\_ROLE

The USD0PP\_TARGET\_REDEMPTION\_RATE\_ROLE exists to manage the daily redemption target rate for USD0PP tokens. This role is responsible for adjusting the target redemption rate (in basis points of total supply) that affects the USUAL burn calculations for early redemptions.

**Role Holders**: Usual Multisig

* Update targetRedemptionRate (USD0pp)

### USD0PP\_CAPPED\_UNWRAP\_ROLE

The `USD0PP_CAPPED_UNWRAP_ROLE` has certain responsibilities to ensure the stability and integrity of the protocol.

**Role Holders**: Usual Multisig, Joint Partner Vault Multisig, VaultRouter

* unwrapWithCa&#x70;**()**: Role holders can adjust the capped unwrap limits, which control the maximum amount of tokens that can be unwrapped in a certain period

### REDIRECTION\_ADMIN\_ROLE

The `REDIRECTION_ADMIN_ROLE` is responsible for redirecting off-chain distribution from an account to a new account

**Role Holders**: Redirection Maintainers Multisig

* redirection management of Offchain distribution: (DistributionModule)

### YIELD\_MODULE\_MAX\_DATA\_AGE\_ROLE

the `YIELD_MODULE_MAX_DATA_AGE_ROLE` is responsible for setting the maximum data age for the RWA data.

**Role Holders**: Usual Tokenomics Multisig

* can manage maximum data age for yield module. (YieldModule)

### YIELD\_MODULE\_P90\_INTEREST\_ROLE

The `YIELD_MODULE_P90_INTEREST_ROLE` is tasked with managing the P90 interest rate within the yield module.

**Role Holders**: Usual Tokenomics Multisig

* can modify P90 interest settings within the YieldModule.

### YIELD\_MODULE\_UPDATER\_ROLE

The `YIELD_MODULE_UPDATER_ROLE` is responsible for making updates within the Yield Module.

**Role Holders**: Usual Tokenomics Multisig

* Update Interest Rate to ensure accurate data.
* Update yield data feed updates to various interest and yield settings.

### YIELD\_MODULE\_TOKENOMICS\_OPERATOR\_ROLE

The `YIELD_MODULE_TOKENOMICS_OPERATOR_ROLE` is designed to manage and oversee the tokenomics aspect within the Yield Module.

**Role Holders**: Usual Tokenomics Multisig

* Add yield data feed updates to various interest and yield settings.

### YIELD\_MODULE\_SUPER\_ADMIN\_ROLE

The `YIELD_MODULE_SUPER_ADMIN_ROLE` encompasses comprehensive control over the Yield Module.

**Role Holders**: Usual Tokenomics Multisig

* Remove yield data feed.
* Manage the treasuries that are being used for the different calculations.

### VAULT\_SET\_ROUTER\_ROLE

The `VAULT_SET_ROUTER_ROLE` allows authorized entities to configure and manage router within the wrapped dollar vault system.

**Role Holders**: Usual Vault Router Multisig

* Enabling or disabling vault for wrapped dollar vaults.

### VAULT\_PAUSER\_ROLE

The `VAULT_PAUSER_ROLE` grants the authority to pause vault operations temporarily.

**Role Holders**: Usual Vault Admin Multisig

* Halting all transactions to address emergency scenarios or unforeseen issues.
* Safeguarding assets by preventing unauthorized access or fraud during a pause.
* Ensuring system integrity and stability by providing a controlled cessation of operations when necessary.

### VAULT\_UNPAUSER\_ROLE

The `VAULT_UNPAUSER_ROLE` is designated to resume vault operations after they have been paused.

**Role Holders**: Usual Vault Admin Multisig

* Reactivating transactions once it is deemed safe and all issues have been resolved.
* Restoring normal system functionality and access to vaults.
* Collaborating with relevant parties to ensure a secure and well-managed transition back to normal operations.

### FEE\_SWEEPER\_ROLE

The `FEE_SWEEPER_ROLE` can transfer the fees accumulating to the distribution module.

**Role Holders**: Yield treasury Multisig

* Collecting and distributing accrued fees from vault or bond withdrawals.

### FEE\_RATE\_SETTER\_ROLE

The `FEE_RATE_SETTER_ROLE` plays a crucial role in managing the fee rates within the system.

**Role Holders**: Yield treasury Multisig

* Alters the usualX, burn and treasury fee rate in basis points.

### UNWRAP\_CAP\_ALLOCATOR\_ROLE

the UNWRAP\_CAP\_ALLOCATOR\_ROLE can update the unwrap bUSD0 (formerly USD0++) amount of a user

**Role Holders**: Usual unwrap cap Multisig

### USUAL\_\*\*\*\_MINTCAP\_ALLOCATOR

Roles like `USUAL_USDC_MINTCAP_ALLOCATOR`, `USUAL_M_MINTCAP_ALLOCATOR` or `USUAL_USDTB_MINTCAP_ALLOCATOR` allows to set the mintcap for the corresponding tokens.

**Role Holders**: Usual mint allocator Multisig

* set the maximum amount of token that can be minted.

### WrappedDollarVault

* `VAULT_PAUSER_ROLE`
  * can call `pause`
* `VAULT_UNPAUSER_ROLE`
  * can call `unpause`
* `VAULT_SET_ROUTER_ROLE`
  * can call `setRouter`
* `VAULT_HARVESTER_ROLE`
  * can call `harvest`
* `VAULT_SET_FEE_ROLE`
  * can call `setWithdrawFeeRateBps`
  * can call `setHarvestFeeRateBps`

### YieldModule

* `YIELD_MODULE_SUPER_ADMIN_ROLE`
  * can call `removeTreasury`
  * can call `addTreasury`
  * can call `removeYieldSource`
* `YIELD_MODULE_TOKENOMICS_OPERATOR_ROLE`
  * can call `addYieldSourceWithFeed`
  * can call `addYieldSourceWithWeeklyInterest`
* `YIELD_MODULE_UPDATER_ROLE`
  * can call `updateInterestRate`
  * can call `updateFeed`
* `YIELD_MODULE_P90_INTEREST_ROLE`
  * can call `setP90InterestRate`
* `YIELD_MODULE_MAX_DATA_AGE_ROLE`
  * can call `setMaxDataAge`

### TokenMapping

* `DEFAULT_ADMIN_ROLE`
  * can call `addUsd0Rwa`

### DaoCollateral.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `activateCBR`
  * can call `deactivateCBR`
  * can call `setRedeemFee`
  * can call `redeemDao`
  * can call `unpause`
  * can call `unpauseRedeem`
  * can call `unpauseSwap`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
  * can call `pauseSwap`
  * can call `pauseRedeem`
* `NONCE_THRESHOLD_SETTER_ROLE`
  * can call `setNonceThreshold`
* `INTENT_MATCHING_ROLE`
  * can call `swapRWAtoStbcIntent`

### DistributionModule.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `DISTRIBUTION_OPERATOR_ROLE`
  * can call `distributeUsualToBuckets`
  * can call `queueOffChainUsualDistribution`
  * can call `resetOffChainDistributionQueue`
* `DISTRIBUTION_ALLOCATOR_ROLE`
  * can call `setBucketsDistribution`
  * can call `setGamma`
  * can call `setRateMin`
  * can call `setD`
  * can call `setM0`
* `DISTRIBUTION_CHALLENGER_ROLE`
  * can call `challengeDistribution`
* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `BLACKLIST_ROLE`
  * can call `blacklist`
  * can call `unBlacklist`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `USD0_MINT`
  * can call `mint`
* `USD0_BURN`
  * can call `burn`
  * can call `burnFrom`
* `REDIRECTION_ADMIN_ROLE`
  * can call `acceptRedirectedOffChainDistribution`
  * can call `removeRedirectedOffChainDistribution`
  * can call `cancelInitiatedRedirectedOffChainDistribution`
  * can call `redirectOffChainDistribution`
* `FEE_RATE_SETTER_ROLE`
  * can call `setFeeRates`

### RevenueDistributionModule.sol <a href="#revenue-distribution-module---roles-documentation" id="revenue-distribution-module---roles-documentation"></a>

`OPERATOR_REVSWITCH_DISTRIBUTOR_ROLE`

* can call `distributeRevenueSwitch`

`OPERATOR_ACC_DT_DISTRIBUTOR_ROLE`

* can call `distributeAccruingDT`

`OPERATOR_REB_DT_DISTRIBUTOR_ROLE`

* can call `distributeRebasingDT`

`OPERATOR_ADMIN_ROLE`

* can call `setDailyAccruingYieldRate`
* can call `setOperatorMintCap`
* can call `setMaxRevSwitchMintCap`
* can call `setMaxAccruingMintCap`
* can call `setMaxRebasingDTMintCap`
* can call `setRewardClaimForRevenueSwitch`
* can call `setRewardClaimForAccruingDT`
* can call `setRewardClaimForRebasingDT`

`PAUSING_CONTRACTS_ROLE`

* can call `pause`
* can call `pauseRevenueSwitchDistribution`
* can call `pauseAccruingDTDistribution`
* can call `pauseRebasingDTDistribution`

`UNPAUSING_CONTRACTS_ROLE`

* can call `unpause`
* can call `unpauseRevenueSwitchDistribution`
* can call `unpauseAccruingDTDistribution`
* can call `unpauseRebasingDTDistribution`

`USD0_MINT` (on USD0 Contract)

* can call `mint` (required for the Revenue Distribution Module to mint USD0 tokens during distributions)

**Note**: The `USD0_MINT` role is granted to the RevenueDistributionModule contract on the USD0 token contract, not directly to individual operators. This allows the module to mint USD0 tokens when executing distributions.

### sUSD0.sol <a href="#susd0sol" id="susd0sol"></a>

* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `UNPAUSING_CONTRACTS_ROLE`
  * can call `unpause`
* `BLACKLIST_ROLE`
  * can call `blacklist`
  * can call `unBlacklist`
* `SUSD0_WITHDRAW_FEE_UPDATER_ROLE`
  * can call `updateWithdrawFee`
* `SUSD0_YIELD_DISTRIBUTOR_ROLE`
  * can call `startYieldDistribution`

### L2Usd0PP.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `USD0_MINT`
  * can call `mint`
* `USD0_BURN`
  * can call `burn`
  * can call `burnFrom`

### AbstractContract.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `setMaxDepegThreshold`

### ClassicalOracle.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `initializeTokenOracle`

### UsualOracle.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `initializeTokenOracle`

### RegistryAccess.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `setRoleAdmin`

### RegistryContract.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `setContract`

### SwapperEngine.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
  * can call `updateMinimumUSDCAmountProvided`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `DEFAULT_ADMIN_ROLE`
  * can call `blacklist`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `USD0_BURN`
  * can call `burn`
  * can call `burnFrom`
* `USD0_MINT`
  * can call `mint`
* `BLACKLIST_ROLE`
  * can call `blacklist`
  * can call `unBlacklist`

### USD0pp.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
  * can call `emergencyWithdraw`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `EARLY_BOND_UNLOCK_ROLE`
  * can call `allocateEarlyUnlockBalance`
  * can call `setupEarlyUnlockPeriod`
* `PEG_MAINTAINER_ROLE`
  * can call `triggerPARMechanismCurvepool`
  * can call `unwrapPegMaintainer`
* `FLOOR_PRICE_UPDATER_ROLE`
  * can call `updateFloorPrice`
* `USD0PP_USUAL_DISTRIBUTION_ROLE`
  * can call `setUsualDistributionPerUsd0pp`
* `USD0PP_DURATION_COST_FACTOR_ROLE`
  * can call `setDurationCostFactor`
* `USD0PP_TREASURY_ALLOCATION_RATE_ROLE`
  * can call `setTreasuryAllocationRate`
* `USD0PP_USUAL_BURN_TARGET_REDEMPTION_ROLE`
  * can call `setTargetRedemptionRate`
* `FEE_SWEEPER_ROLE`
  * can call `sweepFees`

### Usual.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `BLACKLIST_ROLE`
  * can call `blacklist`
  * can call `unBlacklist`
* `USUAL_MINT`
  * can call `mint`
* `USUAL_BURN`
  * can call `burn`
  * can call `burnFrom`

### UsualS.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `BLACKLIST_ROLE`
  * can call `blacklist`
  * can call `unBlacklist`
* `USUALS_BURN`
  * can call `burn`
  * can call `burnFrom`

### USUALSP.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `USUALSP_OPERATOR_ROLE`
  * can call `allocate`
  * can call `removeOriginalAllocation`
  * can call `stakeUsualS`

### UsualX.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `unpause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `BLACKLIST_ROLE`
  * can call `blacklist`
  * can call `unBlacklist`
* `WHITELIST_ROLE`
  * can call `whitelist`
  * can call `unWhitelist`
* `WITHDRAW_FEE_UPDATER_ROLE`
  * can call `updateWithdrawFee`
* `FEE_SWEEPER_ROLE`
  * can call `sweepFees`

### USUALM.sol

The `USUALM` contract includes specific roles designed to manage particular functionalities and maintain the security and efficiency of the platform.

* `USUAL_M_UNPAUSE`
  * can call `unpause`
* `USUAL_M_PAUSE`
  * can call `pause`
* `BLACKLIST_ROLE`
  * can call `blacklist`
  * can call `unblacklist`
* `USUAL_M_MINTCAP_ALLOCATOR`
  * can call `setMintCap`
* `USUAL_M_UNWRAP`
  * can call `unwrap`

##

***

## ETH0 Role Management

### MINT\_CAP\_OPERATOR

The MINT\_CAP\_OPERATOR role is pivotal in controlling the minting activities for specific tokens. Holders of this role are empowered to adjust the cap on the amount of new tokens that can be minted within a certain period, ensuring that the minting process remains within defined limits to maintain token stability and prevent inflationary pressures.

**Role Holders**: Token Governance Multisig

* Update mintCap
* Monitor compliance with minting policies
* Enforce minting restrictions if caps are breached

### BLACKLIST\_ROLE

The BLACKLIST\_ROLE exists as a security mechanism to protect the protocol from malicious actors, comply with regulatory requirements, and ensure rapid response to security incidents. This role has the authority to restrict specific addresses from participating in token transfers and protocol operations across multiple core contracts including L2USD0, L2USD0PP, USD0PP, USD0, USUAL, USUALS, and USUALX.

**Role Holders**: Usual Multisig

* Blacklist/Unblacklist (ETH0)

###

### ETH0\_MINT

The ETH0\_MINT role exists as a critical control mechanism for managing the supply of ETH0 tokens in the system. This role has the authority to mint new ETH0 tokens across multiple contracts including ETH0, but only when there is sufficient backing in the treasury. The role is typically assigned to the DAO Collateral contract to ensure automated and secure minting operations.

**Role Holders**: DAO Collateral Contract

* Mint (ETH0)

### ETH0\_BURN

The ETH0\_BURN role exists as a critical control mechanism for managing the supply of ETH0 tokens in the system. This role has the authority to burn ETH0 tokens across multiple contracts including ETH0, ensuring proper supply management and redemption functionality. The role is typically assigned to the DAO Collateral contract to enable automated burning operations during redemptions and swaps.

**Role Holders**: DAO Collateral Contract

* Burn (ETH0)
* Burn from (ETH0)

### DaoCollateral.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `activateCBR`
  * can call `deactivateCBR`
  * can call `setRedeemFee`
  * can call `redeemDao`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
  * can call `pauseSwap`
  * can call `pauseRedeem`
* `UNPAUSING_CONTRACTS_ROLE`
  * can call `unpause`
  * can call `unpauseRedeem`
  * can call `unpauseSwap`
* `NONCE_THRESHOLD_SETTER_ROLE`
  * can call `setNonceThreshold`

***

## EUR0 Role Management

### BLACKLIST\_ROLE

The BLACKLIST\_ROLE exists as a security mechanism to protect the protocol from malicious actors, comply with regulatory requirements, and ensure rapid response to security incidents. This role has the authority to restrict specific addresses from participating in token transfers and protocol operations across multiple core contracts including L2USD0, L2USD0PP, USD0PP, USD0, USUAL, USUALS, and USUALX.

**Role Holders**: Usual Multisig

* Blacklist/Unblacklist (EUR0)

### EUR0\_MINT

The EUR0\_MINT role exists as a critical control mechanism for managing the supply of EUR0 tokens in the system. This role has the authority to mint new EUR0 tokens across multiple contracts including EUR0, but only when there is sufficient backing in the treasury. The role is typically assigned to the DAO Collateral contract to ensure automated and secure minting operations.

**Role Holders**: DAO Collateral Contract

* Mint (EUR0)

### EUR0\_BURN

The EUR0\_BURN role exists as a critical control mechanism for managing the supply of EUR0 tokens in the system. This role has the authority to burn EUR0 tokens across multiple contracts including EUR0, ensuring proper supply management and redemption functionality. The role is typically assigned to the DAO Collateral contract to enable automated burning operations during redemptions and swaps.

**Role Holders**: DAO Collateral Contract

* Burn (EUR0)
* Burn from (EUR0)

### DaoCollateral.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `activateCBR`
  * can call `deactivateCBR`
  * can call `setRedeemFee`
  * can call `redeemDao`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
  * can call `pauseSwap`
  * can call `pauseRedeem`
* `UNPAUSING_CONTRACTS_ROLE`
  * can call `unpause`
  * can call `unpauseRedeem`
  * can call `unpauseSwap`
* `NONCE_THRESHOLD_SETTER_ROLE`
  * can call `setNonceThreshold`

### sEUR0.sol <a href="#revenue-distribution-module---roles-documentation" id="revenue-distribution-module---roles-documentation"></a>

* **`PAUSING_CONTRACTS_ROLE`**
  * can call `pause`
* **`UNPAUSING_CONTRACTS_ROLE`**
  * can call `unpause`
* **`BLACKLIST_ROLE`**
  * can call `blacklist`
  * can call `unBlacklist`
* **`SEUR0_WITHDRAW_FEE_UPDATER_ROLE`**
  * can call `updateWithdrawFee`
* **`SEUR0_YIELD_DISTRIBUTOR_ROLE`**
  * can call `startYieldDistribution`

### SwapperEngine.sol

* `DEFAULT_ADMIN_ROLE`
  * can call `updateMinimumEURCAmountProvided`
  * can call `unpause`
* `PAUSING_CONTRACTS_ROLE`
  * can call `pause`
* `UNPAUSING_CONTRACT_ROLE`
  * can call `unpause`

### RevenueDistributionModule.sol <a href="#revenue-distribution-module---roles-documentation" id="revenue-distribution-module---roles-documentation"></a>

**`OPERATOR_REVSWITCH_DISTRIBUTOR_ROLE`**

* can call `distributeRevenueSwitch`

**`OPERATOR_ACC_DT_DISTRIBUTOR_ROLE`**

* can call `distributeAccruingDT`

**`OPERATOR_REB_DT_DISTRIBUTOR_ROLE`**

* can call `distributeRebasingDT`

**`OPERATOR_ADMIN_ROLE`**

* can call `setDailyAccruingYieldRate`
* can call `setOperatorMintCap`
* can call `setMaxRevSwitchMintCap`
* can call `setMaxAccruingMintCap`
* can call `setMaxRebasingDTMintCap`
* can call `setRewardClaimForRevenueSwitch`
* can call `setRewardClaimForAccruingDT`
* can call `setRewardClaimForRebasingDT`

**`PAUSING_CONTRACTS_ROLE`**

* can call `pause`
* can call `pauseRevenueSwitchDistribution`
* can call `pauseAccruingDTDistribution`
* can call `pauseRebasingDTDistribution`

**`UNPAUSING_CONTRACTS_ROLE`**

* can call `unpause`
* can call `unpauseRevenueSwitchDistribution`
* can call `unpauseAccruingDTDistribution`
* can call `unpauseRebasingDTDistribution`

**`EUR0_MINT` (on EUR0 Contract)**

* can call `mint` (required for the Revenue Distribution Module to mint EUR0 tokens during distributions)

**Note:** The `EUR0_MINT` role is granted to the RevenueDistributionModule contract on the EUR0 token contract, not directly to individual operators. This allows the module to mint EUR0 tokens when executing distributions.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tech.usual.money/overview/architecture/role-management.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
