> For the complete documentation index, see [llms.txt](https://docs.curvance.com/app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.curvance.com/app/developer-docs/protocol-managers.md).

# Protocol Managers

### Overview

`ProtocolManager` contracts are internal governance and operations helpers for changing privileged Curvance configuration through narrower authority surfaces than the full DAO or Emergency Council.

This family is not one inheritance tree. The base `ProtocolManager` implements scoped, period-limited management for market, oracle, IRM, pause, and position-manager actions. `ProtocolManagerDeployment` and `ProtocolManagerMassPause` are standalone managers for deployment-phase market setup and emergency pause operations.

### Manager Family

| Manager                     | Role                                                                                                                                                                   | Source                                                 |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| `ProtocolManager`           | General manager for bounded configuration updates on approved managed addresses.                                                                                       | `contracts/architecture/ProtocolManager.sol`           |
| `ProtocolManagerDeployment` | Atomic PMD market bootstrap helper that lists two cTokens, seeds cToken reserves, pauses minting, writes token configs, and records a one-time mint-unpause allowance. | `contracts/architecture/ProtocolManagerDeployment.sol` |
| `ProtocolManagerMassPause`  | Emergency helper that pauses or unpauses action groups across explicit markets or all registered markets.                                                              | `contracts/architecture/ProtocolManagerMassPause.sol`  |

### Shared Trust Model

All three managers store the Curvance `centralRegistry` and rely on permissions enforced by the contracts they call.

The base `ProtocolManager` has two authority layers:

1. `centralRegistry.hasElevatedPermissions(msg.sender)` gates `updateManagementConfig()`.
2. The immutable `protocolManager` address gates the operational update functions.

The standalone helpers use an immutable `owner`:

1. `ProtocolManagerDeployment.owner()` can call `deployMarket()` and `unpauseMarket()`.
2. `ProtocolManagerDeployment.revokeUnpause()` can be called by the owner or by an address with market permissions.
3. `ProtocolManagerMassPause.owner()` can call all mass pause and unpause functions.

Target contracts still enforce their own permissions. A deployed protocol manager must be granted the relevant `CentralRegistry` permissions, usually market permissions, before its downstream calls can succeed.

### Lifecycle Map

1. Governance deploys a manager with a `centralRegistry`, an authority address, and any manager-specific capability settings.
2. Governance grants the manager contract the permissions needed by downstream targets, such as market permissions for `MarketManagerIsolated`, `DynamicIRM`, oracle adaptor, or `CombinedAggregator` writes.
3. For the base `ProtocolManager`, elevated permissions configure the managed address set and period limits through `updateManagementConfig()`.
4. The configured authority address executes bounded updates through the manager instead of calling the target contracts directly.
5. For PMD market setup, `ProtocolManagerDeployment` performs the one-time market listing and mint-pause flow, then later consumes or revokes the pending mint-unpause allowance.
6. For emergency operations, `ProtocolManagerMassPause` applies action-specific pause scopes across a provided market list or every registered market.

### Permission Dependencies

| Target action                         | Manager contract                                                           | Downstream permission required by target      |
| ------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------- |
| Market token config                   | `ProtocolManager`, `ProtocolManagerDeployment`                             | Market permissions on `MarketManagerIsolated` |
| Market pause flags                    | `ProtocolManager`, `ProtocolManagerDeployment`, `ProtocolManagerMassPause` | Market permissions on `MarketManagerIsolated` |
| Position manager registry             | `ProtocolManager`                                                          | Market permissions on `MarketManagerIsolated` |
| Dynamic IRM config                    | `ProtocolManager`                                                          | Market permissions on `DynamicIRM`            |
| Oracle adaptor PriceGuard config      | `ProtocolManager`                                                          | Market permissions on `BaseOracleAdaptor`     |
| Combined aggregator PriceGuard config | `ProtocolManager`                                                          | Market permissions on `CombinedAggregator`    |

### Integration Considerations

* Treat these pages as internal operator documentation, not public user guidance.
* Read live manager addresses from the deployment registry for the chain being operated on.
* Do not conflate the base `ProtocolManager.protocolManager()` authority with the standalone helper `owner()` address.
* Before routing a transaction through a manager, confirm both layers: the caller is authorized on the manager, and the manager contract itself has the permission required by the target.
* When a helper can unpause, confirm whether the unpause scope clears only the intended pause flags or every flag in that action group.

### Related Pages

* ProtocolManager
* ProtocolManagerDeployment
* ProtocolManagerMassPause


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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://docs.curvance.com/app/developer-docs/protocol-managers.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.
