Smart Contract Reference

Every external/public entry point on the v0.6.0 vault implementation, grouped by caller.

Full ABI reference for the v0.6.0 vault implementation, grouped by who can call each function. Inherited OpenZeppelin ERC20 functions (balanceOf, totalSupply, approve, allowance, name, symbol) are not repeated unless the vault overrides their behaviour. transfer and transferFrom are listed because v0.6.0 adds extra access checks on both sides.

Jump to a role


Anyone (user-facing)

Deposit flow (async)

requestDeposit

Submit assets to the pending silo, queued for the next settlement. Auto-claims any previously claimable amount for controller. The caller must be the owner or an approved operator of owner.

Parameters:

Name
Type
Description

assets

uint256

Amount of underlying assets to deposit.

controller

address

Address that will own the request and claim the resulting shares.

owner

address

Address whose assets are pulled. Must equal msg.sender or have approved the caller as operator.

Return values:

Name
Type
Description

requestId

uint256

Epoch-based request identifier.


requestDeposit (with referral)

Same as requestDeposit above, but emits a Referral event tagging referral.

Parameters:

Name
Type
Description

assets

uint256

Amount of underlying assets to deposit.

controller

address

Address that will own the request and claim the resulting shares.

owner

address

Address whose assets are pulled.

referral

address

Address logged as the referrer.

Return values:

Name
Type
Description

requestId

uint256

Epoch-based request identifier.


cancelRequestDeposit

Pull pending assets back from the silo. Only valid in the same epoch as the request. Cancels the caller's own pending deposit.


cancelRequestDeposit (on behalf)

Cancel a pending deposit on behalf of another controller. The caller must be an operator or super operator of controller. (Operator variant new in v0.6.0.)

Parameters:

Name
Type
Description

controller

address

Controller whose pending deposit is being cancelled.


deposit

Claim shares after settlement. Uses msg.sender as the request controller.

Parameters:

Name
Type
Description

assets

uint256

Amount of assets to claim shares against.

receiver

address

Address receiving the shares.

Return values:

Name
Type
Description

shares

uint256

Shares minted to receiver.


deposit (with controller)

Claim shares from a settled request owned by controller. The caller must be an operator or super operator of controller.

Parameters:

Name
Type
Description

assets

uint256

Amount of assets to claim shares against.

receiver

address

Address receiving the shares.

controller

address

Controller that owns the deposit request.

Return values:

Name
Type
Description

shares

uint256

Shares minted to receiver.


mint

Same as deposit but the caller specifies the share amount instead of the asset amount.

Parameters:

Name
Type
Description

shares

uint256

Shares to claim.

receiver

address

Address receiving the shares.

Return values:

Name
Type
Description

assets

uint256

Assets consumed from the claimable balance.


mint (with controller)

Same as mint above, on behalf of controller. The caller must be an operator or super operator of controller.

Parameters:

Name
Type
Description

shares

uint256

Shares to claim.

receiver

address

Address receiving the shares.

controller

address

Controller that owns the deposit request.

Return values:

Name
Type
Description

assets

uint256

Assets consumed from the claimable balance.


Deposit flow (sync, when SyncMode allows)

syncDeposit

Atomic deposit — mints shares immediately at the current price per share. Reverts if the vault is async-only or if sync deposits are disabled by the current SyncMode.

Parameters:

Name
Type
Description

assets

uint256

Amount of underlying assets to deposit.

receiver

address

Address receiving the shares.

referral

address

Address logged as the referrer (use address(0) for none).

Return values:

Name
Type
Description

shares

uint256

Shares minted at the current valuation, net of entry fees.


Redeem flow (async)

requestRedeem

Transfer shares to the pending silo, queued for the next redeem settlement.

Parameters:

Name
Type
Description

shares

uint256

Number of shares to redeem.

controller

address

Address that will own the request and claim the resulting assets.

owner

address

Address whose shares are pulled. Must equal msg.sender or have approved the caller as operator.

Return values:

Name
Type
Description

requestId

uint256

Epoch-based request identifier.


cancelRequestRedeem

Pull pending shares back from the silo. The caller must be an operator or super operator of controller. (New in v0.6.0.)

Parameters:

Name
Type
Description

controller

address

Controller whose pending redeem is being cancelled.


claimSharesAndRequestRedeem

UX bundle: claim any pending deposit shares first, then immediately request a redeem for them. If there is nothing claimable, behaves like requestRedeem.

Parameters:

Name
Type
Description

sharesToRedeem

uint256

Number of shares to redeem after claiming.

Return values:

Name
Type
Description

requestId

uint40

Epoch-based request identifier of the new redeem request.


redeem

Claim assets after redeem settlement (or in sync if the vault is closed). When called by an operator or super operator of controller, the operator check is bypassed appropriately.

Parameters:

Name
Type
Description

shares

uint256

Shares to convert into assets.

receiver

address

Address receiving the assets.

controller

address

Controller that owns the redeem request (or share balance, if vault is closed).

Return values:

Name
Type
Description

assets

uint256

Assets transferred to receiver.


withdraw

Same as redeem but specified by asset amount.

Parameters:

Name
Type
Description

assets

uint256

Amount of assets to withdraw.

receiver

address

Address receiving the assets.

controller

address

Controller that owns the redeem request (or share balance, if vault is closed).

Return values:

Name
Type
Description

shares

uint256

Shares burned.


Redeem flow (sync, when SyncMode allows)

syncRedeem

Atomic redeem with slippage protection. Burns shares immediately and pays assets directly from the Curator address.

Parameters:

Name
Type
Description

shares

uint256

Shares to redeem.

receiver

address

Address receiving the assets.

minimumAssets

uint256

Minimum assets expected after exit fee and haircut. Reverts if the actual output is lower.

Return values:

Name
Type
Description

assets

uint256

Assets transferred to receiver, net of exit fee and haircut.


Operators

setOperator

Authorize or revoke an operator that can request and claim on the caller's behalf.

Parameters:

Name
Type
Description

operator

address

Operator address.

approved

bool

true to approve, false to revoke.

Return values:

Name
Type
Description

success

bool

Always true.


ERC20 (with extra access checks)

In v0.6.0 the vault overrides transfer and transferFrom to enforce the isAllowed check on both sender and recipient.

transfer

Standard ERC20 transfer, plus an isAllowed(msg.sender) and isAllowed(to) check.

Parameters:

Name
Type
Description

to

address

Recipient. Must pass isAllowed.

value

uint256

Amount of shares to transfer.

Return values:

Name
Type
Description

(unnamed)

bool

Always true on success.


transferFrom

Standard ERC20 transferFrom, plus an isAllowed(from) and isAllowed(to) check.

Parameters:

Name
Type
Description

from

address

Sender. Must pass isAllowed.

to

address

Recipient. Must pass isAllowed.

value

uint256

Amount of shares to transfer.

Return values:

Name
Type
Description

(unnamed)

bool

Always true on success.


Views

totalAssets

Total assets currently managed by the vault, as last committed by the Curator at settlement.

Return values:

Name
Type
Description

(unnamed)

uint256

Total assets in underlying units.


decimals

ERC20 decimals — matches the underlying asset's decimals plus the vault's decimal offset.

Return values:

Name
Type
Description

(unnamed)

uint8

Decimals of the vault share token.


version

Implementation version string.

Return values:

Name
Type
Description

(unnamed)

string

"v0.6.0".


safe

Address bound to the Curator role — vault assets flow into this address at settlement, and out of it on redeems. Named safe in the source code by convention; can be any address.

Return values:

Name
Type
Description

(unnamed)

address

The Curator address.


share

ERC-7575 share token address — always returns address(this) for this vault.

Return values:

Name
Type
Description

(unnamed)

address

The share token (the vault itself).


supportsInterface

ERC-165 interface support check.

Parameters:

Name
Type
Description

interfaceId

bytes4

Interface identifier.

Return values:

Name
Type
Description

(unnamed)

bool

true if the interface is supported.


maxDeposit

Maximum assets controller can claim through deposit. Zero when paused.

Parameters:

Name
Type
Description

controller

address

Controller to check.

Return values:

Name
Type
Description

(unnamed)

uint256

Maximum claimable assets.


maxMint

Maximum shares controller can mint by claiming a settled deposit request.

Parameters:

Name
Type
Description

controller

address

Controller to check.

Return values:

Name
Type
Description

(unnamed)

uint256

Maximum claimable shares.


maxRedeem

Maximum redeemable shares for controller. When the vault is closed and nothing is claimable, returns the share balance instead (sync redeem path).

Parameters:

Name
Type
Description

controller

address

Controller to check.

Return values:

Name
Type
Description

shares

uint256

Maximum redeemable shares.


maxWithdraw

Asset-denominated counterpart of maxRedeem.

Parameters:

Name
Type
Description

controller

address

Controller to check.

Return values:

Name
Type
Description

assets

uint256

Maximum withdrawable assets.


previewSyncDeposit

Shares a depositor would receive for assets via syncDeposit, net of entry fee.

Parameters:

Name
Type
Description

assets

uint256

Assets to deposit.

Return values:

Name
Type
Description

shares

uint256

Shares the caller would mint.


previewSyncRedeem

Assets a redeemer would receive for shares via syncRedeem, net of exit fee and haircut.

Parameters:

Name
Type
Description

shares

uint256

Shares to redeem.

Return values:

Name
Type
Description

assets

uint256

Assets the caller would receive.


previewDeposit / previewMint / previewRedeem / previewWithdraw

All four revert. ERC-7540 mandates that synchronous previews are disabled for asynchronous flows. Use convertToShares / convertToAssets with a specific requestId for settled epochs, or previewSyncDeposit / previewSyncRedeem for the sync flow.


convertToShares

Assets → shares conversion at the settlement price of requestId's epoch.

Parameters:

Name
Type
Description

assets

uint256

Assets to convert.

requestId

uint256

Request / epoch ID whose settlement price to use.

Return values:

Name
Type
Description

(unnamed)

uint256

Equivalent shares at that epoch's price.


convertToAssets

Shares → assets conversion at the settlement price of requestId's epoch.

Parameters:

Name
Type
Description

shares

uint256

Shares to convert.

requestId

uint256

Request / epoch ID whose settlement price to use.

Return values:

Name
Type
Description

(unnamed)

uint256

Equivalent assets at that epoch's price.


pendingDepositRequest

Assets currently waiting to be settled for controller at requestId.

Parameters:

Name
Type
Description

requestId

uint256

Request / epoch ID.

controller

address

Controller to check.

Return values:

Name
Type
Description

assets

uint256

Pending assets.


claimableDepositRequest

Assets at requestId that have been settled and are now claimable by controller.

Parameters:

Name
Type
Description

requestId

uint256

Request / epoch ID.

controller

address

Controller to check.

Return values:

Name
Type
Description

assets

uint256

Claimable assets.


pendingRedeemRequest

Shares currently waiting to be settled for controller at requestId.

Parameters:

Name
Type
Description

requestId

uint256

Request / epoch ID.

controller

address

Controller to check.

Return values:

Name
Type
Description

shares

uint256

Pending shares.


claimableRedeemRequest

Shares at requestId that have been settled and whose assets are now claimable.

Parameters:

Name
Type
Description

requestId

uint256

Request / epoch ID.

controller

address

Controller to check.

Return values:

Name
Type
Description

shares

uint256

Claimable shares.


isOperator

Returns true if operator is approved by controller via setOperator.

Parameters:

Name
Type
Description

controller

address

Controller.

operator

address

Operator to check.

Return values:

Name
Type
Description

(unnamed)

bool

true if approved.


isAllowed

Composite access check — passes the current access mode (whitelist or blacklist) and the external sanctions list, if configured.

Parameters:

Name
Type
Description

account

address

Address to check.

Return values:

Name
Type
Description

(unnamed)

bool

true if the account can interact with the vault.


isTotalAssetsValid

Returns true while the currently posted valuation is still within its totalAssetsLifespan. Sync operations require this to be true.

Return values:

Name
Type
Description

(unnamed)

bool

true if the valuation is still valid.


syncMode

Returns the current sync configuration.

Return values:

Name
Type
Description

(unnamed)

SyncMode

Current mode.


isAsyncOnly

Returns true if activateAsyncOnly has been called — the vault has irreversibly given up sync capability. When true, totalAssets is always treated as invalid.

Return values:

Name
Type
Description

(unnamed)

bool

true if the vault is permanently async-only.


maxCap

Returns the per-vault total-assets cap.

Return values:

Name
Type
Description

(unnamed)

uint256

Max cap in underlying asset units.


feeRates

Returns the current fee rates struct.

All rates are in basis points. The protocol cut is read separately from the FeeRegistry.

Return values:

Name
Type
Description

(unnamed)

Rates

Current management / performance / entry / exit / haircut rates.


Curator

The Curator role is bound to a single on-chain address — referred to as the safe in the source code (hence the onlySafe modifier and the safe() view function). The name reflects the common deployment pattern of using a Gnosis-Safe multi-sig, but no Safe-specific behaviour is enforced: any address can hold the role, including an EOA, an MPC wallet, or a custom contract. The Curator manages strategy allocation, executes settlements, and toggles operational parameters like the sync mode and the max cap.

settleDeposit

Commit a valuation, take fees, mint shares to the silo, and pull silo assets into the Curator address. Opportunistically also calls settleRedeem when possible.

Parameters:

Name
Type
Description

_newTotalAssets

uint256

Confirmed total assets at the moment of settlement. Must equal the value previously posted by the valuation manager or security council.


settleRedeem

Commit a valuation, take fees, burn pending shares from the silo, and pull assets from the Curator address to the vault for claim.

Parameters:

Name
Type
Description

_newTotalAssets

uint256

Confirmed total assets at the moment of settlement.


claimSharesOnBehalf

UX helper — push claimable deposit shares to a list of controllers.

Parameters:

Name
Type
Description

controllers

address[]

Controllers to claim for. Controllers with nothing claimable are skipped.


claimAssetsOnBehalf

UX helper — push claimable redeem assets to a list of controllers. (New in v0.6.0.)

Parameters:

Name
Type
Description

controllers

address[]

Controllers to claim for. Controllers with nothing claimable are skipped.


updateTotalAssetsLifespan

Set how long a posted valuation stays valid for sync operations.

Parameters:

Name
Type
Description

lifespan

uint128

Lifespan in seconds.


expireTotalAssets

Invalidate the currently posted valuation immediately. After this call, sync operations revert until a new valuation is posted and confirmed.


updateMaxCap

Set the deposit cap (in underlying assets).

Parameters:

Name
Type
Description

_maxCap

uint256

New max cap. Use type(uint256).max to effectively disable.


setSyncMode

Switch between async-only, sync-deposit-only, sync-redeem-only, or both. Reverts if the vault is in async-only mode. (New in v0.6.0.)

Parameters:

Name
Type
Description

_mode

SyncMode

Both, SyncDeposit, SyncRedeem, or None.


resetHighWaterMark

Reset the high-water mark to the current price per share — used after a known-loss event so the performance fee re-engages from a fresh baseline. Reverts unless allowHighWaterMarkReset was set to true at vault initialization. (New in v0.6.0.)


close

Finalize closing the vault. The Owner (Admin) must first call initiateClosing. After close, only redemption / withdrawal paths remain available.

Parameters:

Name
Type
Description

_newTotalAssets

uint256

Final total assets at close.


Valuation Manager

updateNewTotalAssets

Propose a new vault valuation. Must satisfy GuardRailsManager.isCompliant if guardrails are active.

Parameters:

Name
Type
Description

_newTotalAssets

uint256

Proposed total assets.


Security Council

securityCouncilUpdateTotalAssets

Same as updateNewTotalAssets but bypasses guardrails. Used to recover from valuation events that legitimately exceed the configured bounds. (New in v0.6.0.)

Parameters:

Name
Type
Description

_newTotalAssets

uint256

Proposed total assets.


updateGuardrails

Update the price-per-share bounds policy.

Parameters:

Name
Type
Description

guardrails_

Guardrails

New upper / lower annual bounds in basis points.


updateActivated

Enable or disable guardrail enforcement.

Parameters:

Name
Type
Description

activated_

bool

true to enforce, false to disable.


Access Manager (former Whitelist Manager)

addToWhitelist

Add accounts to the whitelist.

Parameters:

Name
Type
Description

accounts

address[]

Accounts to whitelist.


revokeFromWhitelist

Remove accounts from the whitelist.

Parameters:

Name
Type
Description

accounts

address[]

Accounts to remove.


addToBlacklist

Add accounts to the blacklist. (New in v0.6.0.)

Parameters:

Name
Type
Description

accounts

address[]

Accounts to blacklist.


revokeFromBlacklist

Remove accounts from the blacklist. (New in v0.6.0.)

Parameters:

Name
Type
Description

accounts

address[]

Accounts to remove from the blacklist.


setExternalSanctionsList

Wire an external sanctions oracle that the vault will query on every isAllowed check — i.e. on every deposit, redeem, request, share transfer, and operator-triggered claim. If the oracle returns true for the address, the call reverts. The hook is intended for the Chainalysis Sanctions Oracle, a free on-chain registry of OFAC-sanctioned addresses, but any contract that implements the one-method interface below works. Pass address(0) to disable the check entirely. (New in v0.6.0.)

The sanctions check stacks on top of the active access mode (whitelist or blacklist) — an address must pass both to interact with the vault.

Parameters:

Name
Type
Description

sanctionsList

SanctionsList

Oracle address. Use the Chainalysis-deployed contract for the target chain (see their docs for per-network addresses), a custom oracle implementing isSanctioned, or address(0) to disable.


Owner (Admin)

The Owner (Admin) is the governance role — it does not run the strategy, but it controls vault configuration, critical safety switches, and role assignments. Enforced on-chain by the standard onlyOwner modifier (Ownable2StepUpgradeable).

Lifecycle & emergency

initialize

Proxy-time initializer. data is an ABI-encoded InitStruct containing the vault's full configuration.

Parameters:

Name
Type
Description

data

bytes

ABI-encoded InitStruct (underlying, name, symbol, roles, rates, sync mode, etc.).

feeRegistry

address

Protocol fee registry address.

wrappedNativeToken

address

Wrapped native token (e.g. WETH) — used by Silo.depositEth.


pause

Halt all core user operations (deposit, redeem, withdraw, requests, settlements, valuation updates).


unpause

Resume operations after a pause.


initiateClosing

Start the vault wind-down. After this, the Curator finalises via close(_newTotalAssets).


activateAsyncOnly

Irreversible. Permanently disable sync deposits and sync redeems. After this call, isAsyncOnly() returns true and totalAssets is always treated as invalid. (New in v0.6.0.)


Roles

updateWhitelistManager

Replace the Access Manager address (the role formerly known as Whitelist Manager — kept under its original name in the source for storage-layout compatibility).

Parameters:

Name
Type
Description

_whitelistManager

address

New Access Manager address.


updateValuationManager

Replace the Valuation Manager address (the role authorised to call updateNewTotalAssets).

Parameters:

Name
Type
Description

_valuationManager

address

New Valuation Manager address.


updateFeeReceiver

Replace the address that receives the share-denominated fees minted at settlement.

Parameters:

Name
Type
Description

_feeReceiver

address

New fee receiver address.


updateSafe

Replace the address bound to the Curator role (called safe in the source for historical reasons — see the Curator section). (New in v0.6.0.) Reverts if lockUpdateSafe has been called.

Parameters:

Name
Type
Description

_safe

address

New address for the Curator role. Can be any address (multi-sig, EOA, MPC wallet, custom contract).


updateSecurityCouncil

Replace the Security Council address (the role that manages guardrails and can bypass them via securityCouncilUpdateTotalAssets). (New in v0.6.0.)

Parameters:

Name
Type
Description

_securityCouncil

address

New Security Council address.


updateSuperOperator

Replace the Super Operator address (the global operator that can act on behalf of any controller and bypasses whitelist / blacklist checks — see Super Operator for the full scope). (New in v0.6.0.) Reverts if lockSuperOperator has been called.

Parameters:

Name
Type
Description

_superOperator

address

New Super Operator address. Use address(0) to remove.


lockUpdateSafe

Irreversible. Permanently disable updateSafe. (New in v0.6.0.)


lockSuperOperator

Irreversible. Permanently disable updateSuperOperator. (New in v0.6.0.)


transferOwnership / acceptOwnership

Two-step transfer of the Owner (Admin) role (Ownable2StepUpgradeable). newOwner must call acceptOwnership for the transfer to take effect.


Access control

switchAccessMode

Switch between whitelist and blacklist mode. (New in v0.6.0.)

Parameters:

Name
Type
Description

newMode

AccessMode

Whitelist or Blacklist.


Fees & metadata

updateRates

Update fee rates. Max bounds are enforced on-chain (entry/exit ≤ 2%, haircut ≤ 20%, management/performance per protocol policy). The protocol cut is not part of this struct — it is read from the FeeRegistry.

Parameters:

Name
Type
Description

newRates

Rates

New management / performance / entry / exit / haircut rates, all in basis points.


updateName

Update the ERC20 name. (New in v0.6.0.)

Parameters:

Name
Type
Description

newName

string

New name.


updateSymbol

Update the ERC20 symbol. (New in v0.6.0.)

Parameters:

Name
Type
Description

newSymbol

string

New symbol.


Super Operator

The Super Operator is a single global address that satisfies the operator check for any controller on every user op except requestDeposit and syncDeposit, and additionally bypasses whitelist / blacklist checks. There is no dedicated function — it works by passing the isOperatorOrSuperOperator check in deposit, mint, redeem, withdraw, cancelRequestDeposit(address), and cancelRequestRedeem.

The address is set by the Owner (Admin) via updateSuperOperator(address) and can be permanently locked via lockSuperOperator(). Use address(0) to disable.


GuardRailsManager (read)

isCompliant

Pure check used by the vault on every updateNewTotalAssets call. Returns true if the proposed PPS change stays within the configured upper/lower annual bounds for the elapsed time.

Parameters:

Name
Type
Description

currentPps

uint256

Current price per share.

nextPps

uint256

Proposed new price per share.

timePast

uint256

Seconds elapsed since the last update.

Return values:

Name
Type
Description

(unnamed)

bool

true if compliant.


Silo (separate contract)

The Silo is a minimal helper contract paired with each vault. It holds pending assets (during async deposits) and pending shares (during async redeems). The vault's constructor configures IERC20(underlying).forceApprove(vault, max) so the vault can pull from the silo; no other entry points exist beyond the one below.

depositEth

Wrap received ETH into WETH. Called by the vault when a user requestDeposits native ETH and the underlying is WETH.

Last updated