Skip to main content

IERC4626Custom Interface

The IERC4626Custom interface is a modified version of the ERC-4626 Tokenized Vault Standard. It provides methods to manage deposits, withdrawals, and related metadata for tokenized vaults.

note

This interface excludes the standard IERC20 and IERC20Metadata (already included in IERC20Full). It focuses on vault-specific functionality.

Functions

Below is an overview of each function defined in the IERC4626Custom interface. Refer to the ERC-4626 specification for additional context on these methods.


asset

function asset() external view returns (address assetTokenAddress);

Returns the address of the underlying token used for the Vault (an ERC-20 token contract).

Returns

TypeDescription
addressThe address of the underlying asset token contract

totalAssets

function totalAssets() external view returns (uint256 totalManagedAssets);

Returns the total amount of underlying assets managed by the Vault, including any yield or fees.

Returns

TypeDescription
uint256The total amount of underlying assets managed by the Vault

convertToShares

function convertToShares(uint256 assets) external view returns (uint256 shares);

Calculates the number of shares that would be received for a given amount of assets, in an ideal scenario without fees or slippage.

Parameters

NameTypeDescription
assetsuint256Amount of underlying assets to convert

Returns

TypeDescription
uint256Amount of Vault shares equivalent

convertToAssets

function convertToAssets(uint256 shares) external view returns (uint256 assets);

Calculates the amount of assets that would be obtained by redeeming a given number of shares, in an ideal scenario without fees or slippage.

Parameters

NameTypeDescription
sharesuint256Amount of Vault shares to convert

Returns

TypeDescription
uint256Underlying assets equivalent

maxDeposit

function maxDeposit(address receiver) external view returns (uint256 maxAssets);

Returns the maximum amount of underlying assets that can be deposited for a given receiver. If no limit, returns 2**256 - 1.

Parameters

NameTypeDescription
receiveraddressAddress for which deposit is checked

Returns

TypeDescription
uint256Maximum number of assets allowed for receiver

previewDeposit

function previewDeposit(uint256 assets) external view returns (uint256 shares);

Simulates the effect of depositing assets at the current state, returning the number of shares that would be minted (accounting for any deposit fees).

Parameters

NameTypeDescription
assetsuint256Amount of underlying assets to deposit

Returns

TypeDescription
uint256Estimated number of shares to be minted

deposit

function deposit(uint256 assets, address receiver)
external
payable
returns (uint256 shares);

Mints Vault shares by depositing exactly assets of the underlying tokens for receiver. Emits a Deposit event.

Parameters

NameTypeDescription
assetsuint256Amount of underlying assets to deposit
receiveraddressAccount to receive the minted shares

Returns

TypeDescription
uint256The number of Vault shares minted for receiver

Important Notes:

  • May revert if deposit limit is exceeded or not enough tokens are approved.
  • Requires sending native tokens (assets) with msg.value if needed by the implementation.

maxMint

function maxMint(address receiver) external view returns (uint256 maxShares);

Returns the maximum amount of Vault shares that can be minted for receiver. If no limit, returns 2**256 - 1.

Parameters

NameTypeDescription
receiveraddressAddress for which mint is checked

Returns

TypeDescription
uint256Maximum number of shares that can be minted for receiver

previewMint

function previewMint(uint256 shares) external view returns (uint256 assets);

Simulates the effect of minting shares at the current state, returning the number of underlying assets that would be required (accounting for any deposit fees).

Parameters

NameTypeDescription
sharesuint256Number of Vault shares to mint

Returns

TypeDescription
uint256Estimated amount of underlying assets required

mint

function mint(uint256 shares, address receiver)
external
payable
returns (uint256 assets);

Mints exactly shares of the Vault for receiver by depositing the necessary underlying assets. Emits a Deposit event.

Parameters

NameTypeDescription
sharesuint256Number of Vault shares to mint
receiveraddressAccount to receive the minted shares

Returns

TypeDescription
uint256The amount of underlying assets deposited

Important Notes:

  • May revert if mint limit is exceeded or not enough tokens are approved.
  • Requires sending native tokens (assets) with msg.value if needed by the implementation.

maxWithdraw

function maxWithdraw(address owner) external view returns (uint256 maxAssets);

Returns the maximum amount of underlying assets that can be withdrawn from the Vault by owner. If no limit, it might return the full balance or 2**256 - 1.

Parameters

NameTypeDescription
owneraddressAddress whose maximum withdrawal is checked

Returns

TypeDescription
uint256Maximum amount of underlying assets withdrawable

previewWithdraw

function previewWithdraw(uint256 assets) external view returns (uint256 shares);

Simulates the effect of withdrawing assets from the Vault, returning the number of shares that would be burned (accounting for any withdrawal fees).

Parameters

NameTypeDescription
assetsuint256Amount of underlying assets to withdraw

Returns

TypeDescription
uint256Number of Vault shares that would be burned

withdraw

function withdraw(uint256 assets, address receiver, address owner)
external
returns (uint256 shares);

Burns Vault shares from owner to send exactly assets of the underlying tokens to receiver. Emits a Withdraw event.

Parameters

NameTypeDescription
assetsuint256Number of underlying assets to withdraw
receiveraddressAddress receiving the withdrawn assets
owneraddressAddress whose Vault shares are burned

Returns

TypeDescription
uint256Number of Vault shares burned in the operation

Important Notes:

  • May revert if the withdrawal limit is exceeded or owner lacks sufficient shares.

maxRedeem

function maxRedeem(address owner) external view returns (uint256 maxShares);

Returns the maximum number of Vault shares that can be redeemed from owner. If no limit, returns the balance of owner.

Parameters

NameTypeDescription
owneraddressAddress whose maximum redemption is checked

Returns

TypeDescription
uint256Maximum shares that can be redeemed by the owner

previewRedeem

function previewRedeem(uint256 shares) external view returns (uint256 assets);

Simulates the effect of redeeming shares from the Vault, returning the underlying assets that would be received (accounting for any withdrawal fees).

Parameters

NameTypeDescription
sharesuint256Vault shares to redeem

Returns

TypeDescription
uint256Amount of underlying assets received

redeem

function redeem(uint256 shares, address receiver, address owner)
external
returns (uint256 assets);

Burns exactly shares from owner to send the corresponding assets to receiver. Emits a Withdraw event.

Parameters

NameTypeDescription
sharesuint256Number of shares to be redeemed
receiveraddressAddress receiving the redeemed underlying assets
owneraddressAddress whose shares are burned

Returns

TypeDescription
uint256Amount of underlying assets transferred

boostYield

function boostYield() external payable;

Allows users (or contracts) to boost the yield of the Vault by depositing additional assets (msg.value). The specific mechanics of how this yield is utilized or distributed may depend on the implementation details in the ShMonad contract.

Important Notes:

  • msg.value must be sent if the implementation expects native token (e.g. Ether on Monad).
  • May revert if not enough gas or incorrect msg.value is provided.

Events

Deposit

event Deposit(
address indexed sender,
address indexed owner,
uint256 assets,
uint256 shares
);

Emitted when a deposit of assets results in shares being minted for owner.

Withdraw

event Withdraw(
address indexed sender,
address indexed receiver,
address indexed owner,
uint256 assets,
uint256 shares
);

Emitted when a withdrawal of assets burns shares from owner and sends the underlying assets to receiver.


Errors

ERC4626ExceededMaxDeposit

error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max);

Reverted when attempting to deposit more assets than the maximum allowed (max) for the specified receiver.

ERC4626ExceededMaxMint

error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max);

Reverted when attempting to mint more shares than the maximum allowed (max) for the specified receiver.

ERC4626ExceededMaxWithdraw

error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max);

Reverted when attempting to withdraw more assets than the maximum allowed (max) for the specified owner.

ERC4626ExceededMaxRedeem

error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max);

Reverted when attempting to redeem more shares than the maximum allowed (max) for the specified owner.