For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

  • ProtocolManager

  • ProtocolManagerDeployment

  • ProtocolManagerMassPause

Last updated

Was this helpful?