> For the complete documentation index, see [llms.txt](https://docs-v4.venus.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-v4.venus.io/technical-reference/reference-governance/collateral-factors-risk-steward.md).

# CollateralFactorsRiskSteward

## CollateralFactorsRiskSteward

Contract that can update collateral factors and liquidation thresholds received from `RiskStewardReceiver`.

This page follows [`CollateralFactorsRiskSteward.sol` at v2.15.0](https://github.com/VenusProtocol/governance-contracts/blob/v2.15.0/contracts/RiskSteward/CollateralFactorsRiskSteward.sol). On BNB mainnet at block `118369568`, proxy `0x1414ADf007E324ec1D0A77b9F1A8759Ad33d2879` used implementation `0x92352572478965A0377F57a4A2bebb4B369c22d4`, matching the tagged artifact. Destination-mainnet deployment must be verified separately; the stable tag contains destination instances on testnets.

## Solidity API

#### COLLATERAL\_FACTORS

The update type for collateral factor and liquidation threshold.

```solidity
string COLLATERAL_FACTORS
```

***

#### COLLATERAL\_FACTORS\_KEY

The update type key for collateral factors (keccak256 hash of COLLATERAL\_FACTORS)

```solidity
bytes32 COLLATERAL_FACTORS_KEY
```

***

#### CORE\_POOL\_COMPTROLLER

Address of the BNB Core Pool Comptroller.

```solidity
contract ICorePoolComptroller CORE_POOL_COMPTROLLER
```

***

#### RISK\_STEWARD\_RECEIVER

Address of the `RiskStewardReceiver` used to validate and dispatch incoming updates.

```solidity
contract IRiskStewardReceiver RISK_STEWARD_RECEIVER
```

***

#### constructor

Sets the immutable `CORE_POOL_COMPTROLLER` and `RISK_STEWARD_RECEIVER` addresses and disables initializers.

```solidity
constructor(address corePoolComptroller_, address riskStewardReceiver_) public
```

**Parameters**

| Name                  | Type    | Description                              |
| --------------------- | ------- | ---------------------------------------- |
| corePoolComptroller\_ | address | The address of the Core Pool Comptroller |
| riskStewardReceiver\_ | address | The address of the `RiskStewardReceiver` |

**❌ Errors**

* Throws ZeroAddressNotAllowed if any of the addresses are zero

***

#### initialize

Initializes the contract as ownable and access controlled.

```solidity
function initialize(address accessControlManager_) external
```

**Parameters**

| Name                   | Type    | Description                               |
| ---------------------- | ------- | ----------------------------------------- |
| accessControlManager\_ | address | The address of the access control manager |

***

#### setSafeDeltaBps

Sets the safe delta bps.

```solidity
function setSafeDeltaBps(uint256 safeDeltaBps_) external
```

**Parameters**

| Name           | Type    | Description            |
| -------------- | ------- | ---------------------- |
| safeDeltaBps\_ | uint256 | The new safe delta bps |

**📅 Events**

* Emits SafeDeltaBpsUpdated with the old and new safe delta bps

**⛔️ Access Requirements**

* Controlled by AccessControlManager

**❌ Errors**

* Throws InvalidSafeDeltaBps if the safe delta bps is greater than MAX\_BPS
* Throws RedundantValue if the new safe delta bps is equal to the current value

***

#### isSafeForDirectExecution

Checks if an update is safe for direct execution (no timelock required).

```solidity
function isSafeForDirectExecution(struct RiskParameterUpdate update) external view returns (bool)
```

**Parameters**

| Name   | Type                       | Description          |
| ------ | -------------------------- | -------------------- |
| update | struct RiskParameterUpdate | The update to check. |

**Return Values**

| Name | Type | Description                                                                |
| ---- | ---- | -------------------------------------------------------------------------- |
| \[0] | bool | True if update is safe for direct execution, false if timelock is required |

**❌ Errors**

* Throws UnsupportedUpdateType if the update type is not supported
* Throws RedundantValue if the new collateral factor and liquidation threshold are unchanged

***

#### applyUpdate

Applies a collateral parameter update from the `RiskStewardReceiver`. Delta validation and timelock checks are already performed by `RiskStewardReceiver` before execution.

```solidity
function applyUpdate(struct RiskParameterUpdate update) external
```

**Parameters**

| Name   | Type                       | Description                         |
| ------ | -------------------------- | ----------------------------------- |
| update | struct RiskParameterUpdate | RiskParameterUpdate update to apply |

**📅 Events**

* Emits CollateralFactorsUpdated with updateId

**⛔️ Access Requirements**

* Only callable by the `RiskStewardReceiver`

**❌ Errors**

* Throws OnlyRiskStewardReceiver if the sender is not the `RiskStewardReceiver`
* Throws UnsupportedUpdateType if the update type is not supported

***


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs-v4.venus.io/technical-reference/reference-governance/collateral-factors-risk-steward.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
