Skip to main content

Smart Contract Reference

This page describes the public interface of each Multyr contract. Full ABI definitions and NatSpec documentation will be published alongside the verified source code at mainnet launch.

CoreVault

CoreVault is the primary entry point for all user interactions. It implements the ERC-4626 Tokenized Vault Standard over USDC.

ERC-4626 Interface

FunctionSignatureDescription
depositdeposit(uint256 assets, address receiver) → uint256 sharesDeposit USDC, receive vault shares
mintmint(uint256 shares, address receiver) → uint256 assetsMint exact shares by supplying the required USDC
withdrawwithdraw(uint256 assets, address owner, address receiver) → uint256 sharesWithdraw exact USDC amount, burning the required shares
redeemredeem(uint256 shares, address owner, address receiver) → uint256 assetsBurn exact shares, receive the corresponding USDC

View Functions

FunctionSignatureDescription
totalAssetstotalAssets() → uint256Total USDC managed by the vault (buffer + deployed capital)
convertToSharesconvertToShares(uint256 assets) → uint256Preview how many shares a given USDC deposit would yield
convertToAssetsconvertToAssets(uint256 shares) → uint256Preview how much USDC a given share count is worth
maxDepositmaxDeposit(address) → uint256Maximum USDC amount accepted for deposit
maxWithdrawmaxWithdraw(address owner) → uint256Maximum USDC the owner can withdraw
previewDepositpreviewDeposit(uint256 assets) → uint256Simulate deposit and return expected shares
previewRedeempreviewRedeem(uint256 shares) → uint256Simulate redeem and return expected assets

Share Price

The vault share price is derived from totalAssets() / totalSupply(). As yield accrues from underlying strategies, totalAssets increases while totalSupply remains constant (absent new deposits or withdrawals), causing the share price to appreciate.

Module Contracts

CoreVault delegates specialized logic to the following modules:

StrategyRouter

Routes capital between lending-market adapters according to configured allocation weights. Responsible for deposit routing, withdrawal sourcing, and rebalancing.

Key functions:

  • harvest() -- Collect yield from all active strategies
  • rebalance() -- Rebalance allocations to match target weights
  • getStrategyAllocations() -- Return current allocation per adapter

BufferManager

Maintains an idle USDC buffer inside the vault to service instant withdrawals without triggering strategy unwinds.

Key functions:

  • targetBuffer() -- Return the configured buffer target (basis points)
  • currentBuffer() -- Return the current idle USDC balance

FeeCollector

Calculates and distributes protocol fees (performance fee on yield, management fee on AUM).

OpsCollector

Accounts for operational costs (gas reimbursements, keeper compensation) deducted from protocol revenue.

RewardsVault

Holds and distributes reward tokens or incentive allocations to depositors.

Incentives

Manages depositor incentive programs (e.g., early-depositor boosts, loyalty multipliers).

PriceOracleMiddleware

Provides normalized price feeds to the vault and strategy router. Wraps underlying oracle sources (Chainlink, protocol-native) behind a unified interface.

GlobalConfig

Stores protocol-wide configuration parameters (fee rates, buffer targets, strategy caps). Governed via the timelock.

SystemSealer

One-way immutability lock. Once sealed, specific configuration slots become permanently immutable and cannot be modified even by governance.

Adapter Interface

Each lending-market adapter implements IStrategyAdapter:

interface IStrategyAdapter {
/// @notice Deposit assets into the underlying lending market
function adapterDeposit(uint256 assets) external;

/// @notice Withdraw assets from the underlying lending market
function adapterWithdraw(uint256 assets) external returns (uint256 withdrawn);

/// @notice Return the total value of assets deployed through this adapter
function deployedAssets() external view returns (uint256);

/// @notice Return the current APY estimate (basis points, annualized)
function estimatedAPY() external view returns (uint256);

/// @notice Harvest accrued yield and return it to the vault
function harvest() external returns (uint256 harvested);
}

Deployed Adapters (Arbitrum)

The table below lists the adapters deployed on Arbitrum. Other supported chains will have their own set of adapters targeting the lending markets available on that chain.

AdapterUnderlying ProtocolMarket
AaveV3AdapterAave V3USDC
EulerAdapterEulerUSDC
MorphoAdapterMorphoUSDC
CompoundAdapterCompoundUSDC
note

Full Solidity source, ABI JSON files, and NatSpec-generated documentation will be published in the protocol repository at mainnet launch.


Document version: 1.1 Last updated: 2026-03-29