# Interactions

The **Risk Engine** contract provides a set of functions that enable market management, risk assessment, and user position tracking across multiple **pToken** markets. These methods allow users to interact with the risk framework

#### **supportMarket**

Add the market to the markets mapping and set it as listed

```solidity
function supportMarket(IPToken pToken) external;
```

**Parameters**

| **Name** | **Type**  | **Description**                           |
| -------- | --------- | ----------------------------------------- |
| `pToken` | `IPToken` | The address of the market (token) to list |

#### **supportEMode**

Add the e-mode and configure its status with admin access

```solidity
function supportEMode(
    uint8 categoryId,
    bool isAllowed,
    address[] calldata pTokens,
    bool[] calldata collateralPermissions,
    bool[] calldata borrowPermissions
) external;
```

**Parameters**

| **Name**                | **Type**    | **Description**                                      |
| ----------------------- | ----------- | ---------------------------------------------------- |
| `categoryId`            | `uint8`     | Id representing e-mode identifier                    |
| `isAllowed`             | `bool`      | The identifier to active or deactivate e-mode        |
| `pTokens`               | `address[]` | The array of addresses to add to e-mode              |
| `collateralPermissions` | `bool[]`    | The array of collateral status for pTokens in e-mode |
| `borrowPermissions`     | `bool[]`    | The array of borrowable status for pTokens in e-mode |

#### **switchEMode**

Switch caller E-Mode category

*0 is the initial and default category for all markets*

```solidity
function switchEMode(uint8 newCategoryId) external;
```

**Parameters**

| **Name**        | **Type** | **Description**                                     |
| --------------- | -------- | --------------------------------------------------- |
| `newCategoryId` | `uint8`  | The new e-mode category that caller wants to switch |

#### **enterMarkets**

Add assets to be included in account liquidity calculation

```solidity
function enterMarkets(address[] memory pTokens) external returns (uint256[] memory);
```

**Parameters**

| **Name**  | **Type**    | **Description**                                           |
| --------- | ----------- | --------------------------------------------------------- |
| `pTokens` | `address[]` | The list of addresses of the pToken markets to be enabled |

**Returns**

| **Name** | **Type**    | **Description**                                                     |
| -------- | ----------- | ------------------------------------------------------------------- |
| `none`   | `uint256[]` | Success indicator for whether each corresponding market was entered |

#### **exitMarket**

Removes asset from sender's account liquidity calculation

```solidity
function exitMarket(address pTokenAddress) external;
```

**Parameters**

| **Name**        | **Type**  | **Description**                        |
| --------------- | --------- | -------------------------------------- |
| `pTokenAddress` | `address` | The address of the asset to be removed |

#### setOracle

* Admin Functions

Sets the oracle engine for a the risk engine

*Admin function to set oracle*

```solidity
functionset Oracle(address newOracle) external;
```

**Parameters**

| Name        | Type      | Description                   |
| ----------- | --------- | ----------------------------- |
| `newOracle` | `address` | The address of the new oracle |
|             |           |                               |

#### setReserveShares

Updates the reserve share percentages for the owner and configurator that applies to all ptokens.

*needs protocol owner access to update*

```solidity
function setReserveShares(
    uint256 newOwnerShareMantissa,
    uint256 newConfiguratorShareMantissa
) external;
```

**Parameters**

| Name                           | Type      | Description                                                                |
| ------------------------------ | --------- | -------------------------------------------------------------------------- |
| `newOwnerShareMantissa`        | `uint256` | The new share of reserve percentage for the owner (scaled by 1e18).        |
| `newConfiguratorShareMantissa` | `uint256` | The new share of reserve percentage for the configurator (scaled by 1e18). |

#### setCloseFactor

Sets the closeFactor for a market used when liquidating borrows

*Admin function to set closeFactor*

```solidity
function setCloseFactor(address pTokenAddress, uint256 newCloseFactorMantissa) external;
```

**Parameters**

| Name                     | Type      | Description                            |
| ------------------------ | --------- | -------------------------------------- |
| `pTokenAddress`          | `address` | address of ptoken set close factor for |
| `newCloseFactorMantissa` | `uint256` | New close factor, scaled by 1e18       |

#### configureMarket

Sets the collateralFactor and liquidation threshold for a market

*Admin function to set per-market collateralFactor*

```solidity

function configureMarket(IPToken pToken, BaseConfiguration calldata baseConfig)
    external;

```

**Parameters**

| Name         | Type                | Description                                                   |
| ------------ | ------------------- | ------------------------------------------------------------- |
| `pToken`     | `IPToken`           |                                                               |
| `baseConfig` | `BaseConfiguration` | The collateralFactor, liqThreshold and liqIncentive of market |

#### supportMarket

Add the market to the markets mapping and set it as listed

*Admin function to set isListed and add support for the market*

```solidity

function supportMarket(IPToken pToken) external;

```

**Parameters**

| Name     | Type      | Description                               |
| -------- | --------- | ----------------------------------------- |
| `pToken` | `IPToken` | The address of the market (token) to list |

#### supportEMode

Add the e-mode and configure its status with amdin access

```solidity

function supportEMode(
    uint8 categoryId,
    bool isAllowed,
    address[] calldata pTokens,
    bool[] calldata collateralPermissions,
    bool[] calldata borrowPermissions
) external;

```

**Parameters**

| Name                    | Type        | Description                                          |
| ----------------------- | ----------- | ---------------------------------------------------- |
| `categoryId`            | `uint8`     | Id representing e-mode identifier                    |
| `isAllowed`             | `bool`      | The identifier to active or deactivate e-mode        |
| `pTokens`               | `address[]` | The array of addresses to add to e-mode              |
| `collateralPermissions` | `bool[]`    | The array of collateral status for pTokens in e-mode |
| `borrowPermissions`     | `bool[]`    | The array of borrowable status for pTokens in e-mode |

#### setMarketBorrowCaps

Set the given borrow caps for the given pToken markets. Borrowing that brings total borrows to or above borrow cap will revert.

*borrowCapGuardian function to set the borrow caps. A borrow cap of type(uint256).max corresponds to unlimited borrowing.*

```solidity

function setMarketBorrowCaps(IPToken[] calldata pTokens, uint256[] calldata newBorrowCaps)
    external;

```

**Parameters**

| Name            | Type        | Description                                                                                                         |
| --------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| `pTokens`       | `IPToken[]` | The addresses of the markets (tokens) to change the borrow caps for                                                 |
| `newBorrowCaps` | `uint256[]` | The new borrow cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited borrowing. |

#### setMarketSupplyCaps

Set the given supply caps for the given pToken markets. Supplying that brings total supply to or above supply cap will revert.

*supplyCapGuardian function to set the supply caps. A supply cap of type(uint256).max corresponds to unlimited supplying.*

```solidity

function setMarketSupplyCaps(IPToken[] calldata pTokens, uint256[] calldata newSupplyCaps)
    external;

```

**Parameters**

| Name            | Type        | Description                                                                                                         |
| --------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| `pTokens`       | `IPToken[]` | The addresses of the markets (tokens) to change the supply caps for                                                 |
| `newSupplyCaps` | `uint256[]` | The new supply cap values in underlying to be set. A value of type(uint256).max corresponds to unlimited supplying. |

#### setMintPaused

Admin function to pause mint

```solidity

function setMintPaused(IPToken pToken, bool state) external returns (bool);

```

#### setBorrowPaused

Admin function to pause borrow

```solidity

function setBorrowPaused(IPToken pToken, bool state) external returns (bool);

```

#### setTransferPaused

Admin function to pause transfer

```solidity

function setTransferPaused(bool state) external returns (bool);

```

#### setSeizePaused

Admin function to pause sieze

```solidity

function setSeizePaused(bool state) external returns (bool);

```


---

# 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.pike.finance/developer-docs/smart-contracts/risk-engine/interactions.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.
