arrow-up-to-bracketCover vault shares

Covering vault shares means depositing yield-bearing vault shares into an Insured Vault to activate insurance coverage. The Insured Vault holds the deposited shares, issues covered shares representing the insured position, and streams the insurance premium from accrued yield. Coverage remains active and auto-renews while covered shares are held.

circle-info

The code snippets on this page use Smokehouse USDC as a concrete example: the user deposits bbqUSDC yield-vault shares and receives OC-bbqUSDC covered shares in return.

circle-1 Request a deposit

requestDeposit submits an asynchronous deposit request to cover vault shares.

function requestDeposit(uint256 assets, address controller, address owner)
    external returns (uint256 requestId);

Parameters

Name
Type
Description

assets

uint256

Amount of yield-vault shares to deposit.

controller

address

Controller for the resulting covered shares (user wallet).

owner

address

Owner of the yield-vault shares being deposited (user wallet).

Returns

Name
Type
Description

requestId

uint256

Always 0, deposits are controller-aggregated.

Example

// Approve the Insured Vault to spend bbqUSDC.
bbqUSDC.approve(address(metavault), 10_000e18);

// Request to deposit 10,000 bbqUSDC.
metavault.requestDeposit(10_000e18, msg.sender, msg.sender);
circle-info

Notes

  • Deposits are controller-aggregated: all pending deposits for the same controller share a single requestId of 0. New requests add to the existing pending amount.

  • owner must equal msg.sender.

  • Only authorized bundlers may set controller != owner to operate on behalf of another user.

  • Insured Vaults enforce a minimum request threshold and requests below this amount revert. Please read minimumRequestAssets() to get the minimum amount in the yield-vault underlying e.g. USDC.

Cancel a deposit request

cancelDepositRequest cancels a pending deposit request and refunds the yield-vault shares synchronously in a single transaction.

Parameters

Name
Type
Description

requestId

uint256

Always use 0, deposits are controller-aggregated.

controller

address

Controller whose pending request to cancel (user wallet).

receiver

address

Recipient of the refunded yield-vault shares.

Returns

Name
Type
Description

assets

uint256

Yield-vault shares refunded.

Example

circle-2 Check pending deposits

pendingDepositRequest returns the total yield-vault shares pending settlement for a controller.

Parameters

Name
Type
Description

requestId

uint256

Always use 0, deposits are controller-aggregated.

controller

address

Controller (user wallet) to query.

Returns

Name
Type
Description

pendingAssets

uint256

Yield-vault shares pending coverage.

Example

circle-3 Settlement

Deposit requests are typically batch-settled within 2 Ethereum blocks (~30 seconds). During settlement, the Insured Vault pre-mints OC-bbqUSDC covered shares and holds them on behalf of the controller. Coverage activates at this point. The shares then need to be delivered to the user's wallet via one of two paths:

Keeper push

circle-check

The keeper calls pushDepositShares to claim and deliver OC-bbqUSDC directly to the user's wallet.

User claim

Alternatively, the user can claim settled deposits themselves. Use claimableDepositRequest to check the settled amount, then call deposit or mint to claim.

claimableDepositRequest returns the settled asset amount available to claim.

Parameters

Name
Type
Description

requestId

uint256

Always use 0, deposits are controller-aggregated.

controller

address

Controller (user wallet) to query.

Returns

Name
Type
Description

claimableAssets

uint256

Settled yield-vault shares available to claim.

Example

Claim by assets

deposit claims covered shares from settled deposit requests by specifying the asset amount to consume.

Parameters

Name
Type
Description

assets

uint256

Settled yield-vault share amount to claim.

receiver

address

Recipient of the minted covered shares (user wallet).

controller

address

Controller authorized to claim (user wallet).

Returns

Name
Type
Description

shares

uint256

Amount of covered shares minted.

Example

Claim by shares

mint claims an exact amount of covered shares from settled deposit requests.

Parameters

Name
Type
Description

shares

uint256

Exact amount of covered shares to mint.

receiver

address

Recipient of the minted covered shares (user wallet).

controller

address

Controller authorized to claim (user wallet).

Returns

Name
Type
Description

assets

uint256

Yield-vault shares consumed.

Example

Last updated