# Globals Singleton: Protocol Configuration

## Overview

MapleGlobals is a singleton contract used to save system-wide parameters that all Pool must abide to, and is also used to control time-locked actions, such as upgrades and pauseablilty.

## Permissioning

The Governor (the `GovernorTimelock` contract) retains primary authority for modifying parameters stored in MapleGlobals. Additionally, the Operational Admin, authorized by the Governor, is empowered to alter specific operational parameters. Furthermore, the Security Admin is responsible for adjusting pause‑related parameters.

## Pausing

A more granular approach was introduced in the June 2023 release with details found [here.](/technical-resources/security/emergency-protocol-pause.md).

1. Global pause
2. Per contract pause
3. Per function un-pause.

## Timelock Scheduling

To perform upgrades in vital pool contracts, pool delegates need to first schedule upgrade calls in the globals contract and only after the pre-determined period has elapsed, that the actions can be triggered. More information on [timelocks](/technical-resources/admin-functions/timelocks.md).

## Whitelisting Instance Deployment from Factories

The Governor (via the `GovernorTimelock`) or Operational Admin can whitelist individual addresses that can use the `createInstance` functions at each factory respectively, which is then stored in the `_canDeployFrom` storage mapping. Factories can call `globals.canDeploy(addressOfCaller)` to determine if the caller is allowed to deploy one of its instances, and the mapping itself can be queried via `globals.canDeployFrom(addressOfFactory, addressOfCaller)`.

## System Parameters

In this section, the parameters stored in the globals contract are outlined.

**Relevant Addresses**

* `MapleTreasury`
* `Governor`
* `SecurityAdmin` - Special account allowed to trigger protocol-wide pause.
* `MigrationAdmin` - Special account used during the liquidity migration.
* `OperationalAdmin` - Special account given the authority by Governor to perform a subset of operational functions.
* Factories, such as:
  * `LiquidatorFactory`
  * `FixedTermLoanFactory`
  * `OpenTermLoanFactory`
  * `FixedTermLoanManagerFactory`
  * `OpenTermLoanManagerFactory`
  * `FixedTermRefinancer`
  * `OpenTermRefinancer`
  * `FeeManager`
  * `LiquidatorFactory`
  * `PoolManagerFactory`
  * `WithdrawalManagerFactory`
* Borrowers
* Pool Delegates
* Pool assets
* Price oracles for pool assets

**Pool Specific Parameters**

* `platformManagementFeeRate`
* `platformOriginationFeeRate`
* `platformServiceFeeRate`
* `minCoverAmount`
* `maxCoverLiquidationPercent`

## Proxy Architecture

The MapleGlobals contract make use of NonTransparentProxy, instead of the transparent proxy used almost everywhere in the Maple code base. The reasoning is to add an extra layer of security, making always possible to set the implementation, even if it was previously set to the wrong address beforehand.


---

# 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://docs.maple.finance/technical-resources/singletons/globals.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.
