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

InstitutionalVaultController

Inherits: Initializable, AccessControlledV8

Title: InstitutionalVaultController

Central orchestrator for the Institutional Vault system. Deploys vault clones, maintains the registry, holds the Venus ACM reference, and proxies governance operations to vaults.

Deployed as a transparent proxy (upgradeable via ProxyAdmin).

Solidity API

State Variables

MANTISSA_ONE

uint256 public constant MANTISSA_ONE = 1e18

MANTISSA_ONE_AND_HALF

Maximum allowed multiplier for rate parameters (LI, LP). Caps bonus/penalty at 50% above mantissa.

uint256 public constant MANTISSA_ONE_AND_HALF = 1.5e18

MAX_APY_BPS

Maximum allowed fixed APY in basis points (100% = 10 000 bps). Interest is calculated as: totalRaised * fixedAPY * lockDuration / (BPS * YEAR).

uint256 public constant MAX_APY_BPS = 10_000

vaultImplementation

InstitutionalLoanVault implementation address for cloning.

liquidationAdapter

LiquidationAdapter contract address.

oracle

Venus ResilientOracle address.

protocolShareReserve

Venus ProtocolShareReserve (PSR) address.

comptroller

Comptroller address for PSR integration.

treasury

Treasury address — recipient for swept tokens.

positionToken

InstitutionPositionToken contract address.

allVaults

Array of all deployed vault addresses.

isRegistered

Whether a vault is registered.

institutionNonce

Per-institution deploy counter (for CREATE2 salt).

Functions

constructor

Note: oz-upgrades-unsafe-allow: constructor

initialize

Initializes the controller proxy.

Parameters

Name
Type
Description

vaultImplementation_

address

InstitutionalLoanVault implementation for cloning.

oracle_

address

Venus ResilientOracle address.

protocolShareReserve_

address

PSR address.

comptroller_

address

Comptroller address for PSR.

treasury_

address

Treasury address — recipient for swept tokens.

positionToken_

address

InstitutionPositionToken address.

acm_

address

Venus AccessControlManager address.

acceptPositionTokenOwnership

Accepts pending ownership of the InstitutionPositionToken. Required because PositionToken uses Ownable2Step. Call after transferOwnership.

createVault

Deploys a new vault clone via deterministic CREATE2.

Note: event: VaultCreated

Parameters

Name
Type
Description

_vaultConfig

VaultConfig

Shared vault configuration (asset, rates, caps, timing).

_instConfig

InstitutionalConfig

Institutional-specific configuration (collateral, sizing, position identity).

_riskConfig

RiskConfig

Risk parameters.

_name

string

ERC-20 share token name for the deployed vault.

_symbol

string

ERC-20 share token symbol for the deployed vault.

Returns

Name
Type
Description

vault

address

Deployed vault address.

openVault

Transitions MarginDeposited -> Fundraising on a vault.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

cancelVault

Cancels a pre-launch vault and refunds any deposited collateral to the NFT position holder. Callable only on a vault still in WaitingForMargin or MarginDeposited.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

partialPauseVault

Partial pause — blocks general operations; repay and liquidation remain available.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

completePauseVault

Complete pause — blocks all operations including repay and liquidation.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

unpauseVault

Unpause vault — removes all pause restrictions.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

closeVault

Transitions vault to Closed state. All operations are blocked after this point.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

sweep

Recovers stuck tokens from a vault to treasury.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

token

address

Token address to sweep.

approvePositionTransfer

Approves transfer of the vault's position token to a specific recipient.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

recipient

address

The address that must be the destination of the next transfer.

revokePositionTransfer

Revokes a previously granted approval.

Note: error: VaultNotRegistered If vault is not in the registry.

Parameters

Name
Type
Description

vault

address

Vault address.

setLiquidationThreshold

Updates liquidation threshold on a vault.

Notes:

  • error: VaultNotRegistered If vault is not in the registry.

  • error: InvalidLiquidationThreshold If newLT == 0 or newLT > MANTISSA_ONE.

  • event: LiquidationThresholdUpdated

Parameters

Name
Type
Description

vault

address

Vault address.

newLT

uint256

New liquidation threshold (mantissa).

setLiquidationIncentive

Updates liquidation incentive on a vault.

Notes:

  • error: VaultNotRegistered If vault is not in the registry.

  • error: InvalidLiquidationIncentive If newLI <= MANTISSA_ONE or newLI > MANTISSA_ONE_AND_HALF.

  • event: LiquidationIncentiveUpdated

Parameters

Name
Type
Description

vault

address

Vault address.

newLI

uint256

New liquidation incentive (mantissa). Must be in range (MANTISSA_ONE, MANTISSA_ONE_AND_HALF].

setLatePenaltyRate

Updates late penalty rate on a vault.

Notes:

  • error: VaultNotRegistered If vault is not in the registry.

  • error: InvalidLatePenaltyRate If newRate <= MANTISSA_ONE or newRate > MANTISSA_ONE_AND_HALF.

  • event: LatePenaltyRateUpdated

Parameters

Name
Type
Description

vault

address

Vault address.

newRate

uint256

New late penalty rate (mantissa). Must be in range (MANTISSA_ONE, MANTISSA_ONE_AND_HALF].

setVaultImplementation

Update clone source. Only affects future vaults.

Notes:

  • error: InvalidAddress if zero address.

  • event: VaultImplementationUpdated

Parameters

Name
Type
Description

impl

address

New implementation address.

setLiquidationAdapter

Update LiquidationAdapter address.

Notes:

  • error: InvalidAddress if zero address.

  • event: LiquidationAdapterUpdated

Parameters

Name
Type
Description

adapter

address

New adapter address.

setOracle

Update ResilientOracle reference.

Notes:

  • error: InvalidAddress if zero address.

  • event: OracleUpdated

Parameters

Name
Type
Description

oracle_

address

New oracle address.

setProtocolShareReserve

Update ProtocolShareReserve address.

Notes:

  • error: InvalidAddress if zero address.

  • event: ProtocolShareReserveUpdated

Parameters

Name
Type
Description

psr

address

New PSR address.

setComptroller

Update comptroller address for PSR.

Notes:

  • error: InvalidAddress if zero address.

  • event: ComptrollerUpdated

Parameters

Name
Type
Description

comptroller_

address

New comptroller address.

setTreasury

Update treasury address for swept tokens.

Notes:

  • error: InvalidAddress if zero address.

  • event: TreasuryUpdated

Parameters

Name
Type
Description

treasury_

address

New treasury address.

predictVaultAddress

Predicts the next vault address for a given institution.

Parameters

Name
Type
Description

institution

address

Institution operator address.

Returns

Name
Type
Description

<none>

address

Predicted vault address.

getAggregatedVaultStates

Returns state summary for all registered vaults.

Returns

Name
Type
Description

<none>

VaultStateInfo[]

Array of VaultStateInfo structs.

allVaultsLength

Returns total number of deployed vaults.

Returns

Name
Type
Description

<none>

uint256

Number of vaults in registry.

renounceOwnership

Disabled — renouncing ownership would permanently brick ACM-gated vault governance.

Note: error: OwnershipCannotBeRenounced Always reverts.

Events

VaultCreated

VaultImplementationUpdated

LiquidationAdapterUpdated

OracleUpdated

ProtocolShareReserveUpdated

ComptrollerUpdated

TreasuryUpdated

LiquidationThresholdUpdated

LiquidationIncentiveUpdated

LatePenaltyRateUpdated

Errors

VaultNotRegistered

InvalidConfig

InvalidLiquidationThreshold

InvalidLiquidationIncentive

InvalidLatePenaltyRate

InvalidAddress

OwnershipCannotBeRenounced

Last updated