Vault Factory

API reference for deploying Lotus lending vaults and adapters via LotusVaultFactory and LotusV2AdapterFactory with CREATE2 deterministic addresses.

The LotusVaultFactory deploys fully configured Morpho VaultV2 instances with integrated Lotus adapters. The LotusV2AdapterFactory handles standalone adapter deployment.

LotusVaultFactory

Constructor

constructor(address _vaultV2Factory, address _lotus)
Parameter
Type
Description

_vaultV2Factory

address

The Morpho VaultV2Factory address

_lotus

address

The Lotus protocol address

Reverts with "Invalid vault factory" or "Invalid lotus address" if either is the zero address.

Immutables:

Name
Type
Description

vaultV2Factory

IVaultV2Factory

The Morpho VaultV2Factory

lotus

address

The Lotus protocol address


createVault

function createVault(
    address owner,
    address asset,
    bytes32 salt,
    string calldata name,
    string calldata symbol
) external returns (address vault, address adapter);
Parameter
Type
Description
Required

owner

address

Initial vault owner

Yes

asset

address

Denomination asset (e.g., USDC)

Yes

salt

bytes32

CREATE2 salt for deterministic vault address

Yes

name

string

ERC-20 vault token name

Yes

symbol

string

ERC-20 vault token symbol

Yes

Returns:

Value
Type
Description

vault

address

The created VaultV2 address

adapter

address

The created LotusV2Adapter address

Creates a vault and adapter with no additional role configuration. Internally delegates to createVaultWithRoles with zero-address curator and empty allocator/sentinel arrays.

Event:


createVaultWithRoles

Parameter
Type
Description
Required

owner

address

Initial vault owner

Yes

asset

address

Denomination asset (e.g., USDC)

Yes

salt

bytes32

CREATE2 salt for deterministic vault address

Yes

name

string

ERC-20 vault token name

Yes

symbol

string

ERC-20 vault token symbol

Yes

curator

address

Curator address (pass address(0) to skip)

No

allocators

address[]

Addresses to grant allocator role

No

sentinels

address[]

Addresses to grant sentinel role

No

Returns:

Value
Type
Description

vault

address

The created VaultV2 address

adapter

address

The created LotusV2Adapter address

Revert Conditions:

Error
Condition

"Invalid owner"

owner is the zero address

"Invalid asset"

asset is the zero address

Event: Emits VaultCreated (same as createVault).

Deployment flow:

  1. Deploys a new Morpho VaultV2 instance via the VaultV2Factory.

  2. Deploys a new LotusV2Adapter with deterministic address based on keccak256(abi.encodePacked(vault, lotus)).

  3. Configures the vault to use the adapter. The factory temporarily owns the vault to configure it via the VaultV2 timelock system (submit+execute), then transfers ownership to the specified owner.

  4. If curator is non-zero, assigns the curator role.

  5. For each entry in allocators, grants the allocator role (zero-address entries are skipped).

  6. For each entry in sentinels, grants the sentinel role (zero-address entries are skipped).


LotusV2AdapterFactory

Handles standalone adapter deployment using CREATE2 for deterministic addresses.

deployAdapter

Parameter
Type
Description
Required

vault

address

The Morpho VaultV2 address

Yes

lotus

address

The Lotus protocol address

Yes

Returns: The deployed adapter address. If the adapter already exists for this vault/lotus pair, returns the existing address.

Revert Conditions:

Error
Condition

"Invalid vault address"

vault is the zero address

"Invalid Lotus address"

lotus is the zero address

Event:

Uses salt keccak256(abi.encodePacked(vault, lotus)) for CREATE2 deployment.

computeAdapterAddress

Returns the deterministic address where the adapter would be deployed for the given vault and Lotus addresses. Useful for pre-computing addresses before deployment.

isDeployed

Returns whether an adapter has been deployed for the given vault/lotus pair.


See Also

Last updated