# Global variables

## Gas price and oracle

**Gas price** (given in Mwei per gas unit) is a key parameter of Mangrove that determines the bounty of takers for removing a failing offer from an offer list. In order to make sure takers are consistently over-compensated for the gas used, it should be kept well above average `tx.gasprice`.

**Gas price** can be read from an outside Monitor Contract. When the governance wishes to do so, it **must** enable this feature by letting the monitor (if any) act as a gas price oracle. This can be done using the governance restricted function `setUseOracle` of Mangrove.

If monitoring the gas price is not enabled, or if the value returned by the monitor is ill formed, Mangrove will use its global `gasprice` parameter as fallback.

```solidity
// Sets whether Mangrove uses the monitor as oracle for `gasprice` and `density` values.
function setUseOracle(bool useOracle) external;

// Sets the gasprice (in Mwei, 26 bits).
function setGasprice(uint gasprice) external;

// Sets the monitor/oracle. The `monitor/oracle` can provide real-time values for `gasprice` and `density` to Mangrove. It can also receive liquidity event notifications.
function setMonitor(address monitor) external;
```

```solidity
event SetGasprice(uint value);   // Emitted when gas price is updated.
event SetMonitor(address value); // Emitted when a new monitor is set.
event SetUseOracle(bool value);  // Logs `true` if Mangrove is set to use an external monitor to read gasprice. Logs `false` otherwise.
```

**Important point**

If allowing the monitor to act as a gas price Oracle, Governance **must** have previously deployed a Monitor Contract and set its address in Mangrove's configuration.

### Other governance controlled setters

```solidity
// Sets the gasmax for Mangrove, the maximum amount of gas an offer can require to execute.
function setGasmax(uint gasmax) external;

// Sets a new governance address.
function setGovernance(address governanceAddress) external;

// Sets whether Mangrove notifies the Monitor when and offer is taken.
function setNotify(bool notify) external;

// Sets the maximum number of times a market order can recursively execute offers. This is a protection against stack overflows.
function setMaxRecursionDepth(uint maxRecursionDepth) external;

// Sets the maximum cumulative `gasreq` for failing offers during a market order before doing a partial fill.
function setMaxGasreqForFailingOffers(uint maxGasreqForFailingOffers) external;

// Kills the Mangrove instance. A dead instance cannot have offers executed or funds received, but offers can be retracted and funds can be withdrawn.
function kill() external;
```


---

# 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.mangrove.exchange/dev/protocol/technical-references/governance-parameters/global-variables.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.
