Skip to content

Deposit Flow

Trigger: Investor wishes to deposit USDC into the vault. Caller: Any address — deposit is always accepted regardless of pause state

Steps

  1. Investor approves USDC — calls USDC.approve(vaultAddress, assets) to grant the vault transfer authorization.

  2. Investor calls deposit(assets, receiver) on LiquidityVault.

  3. Vault computes shares to mint:

    if totalShares == 0:
        sharesToMint = assets × 1e12        // first-deposit initialisation rule
    else:
        sharesToMint = assets × totalShares / aggModeledNav()   // floor division
    
    The 1e12 scaling factor on the first deposit aligns USDC (6 decimals) with shares (18 decimals) and prevents share price manipulation. See Section 6.10 — Arithmetic Precision for the full rationale.

  4. USDC transferred from msg.sender to the vault.

  5. Assets added to idleReserve — capital stays idle. It is NOT immediately deployed.

  6. Shares minted to receiver.

  7. Deposit event emitted with (sender, receiver, assets, shares).

Important: Decoupled Deployment

Capital deployment is separate

Deposited USDC enters idleReserve and stays there until the operator deploys it via openPosition(). The vault can accept deposits at any time without a ready market. This decoupling prevents rushed capital deployment just because a deposit arrived.

Share Price at Deposit

The deposit exchange rate is based on aggregateModeledNav() — the modeled NAV including all active positions and idle reserve. This means:

  • A new depositor pays a share price that reflects existing positions at their modeled value (not market value)
  • If there is a significant gap (modeled > market), the new depositor is buying into that gap at the modeled price
  • Once deployed, the new depositor's capital accrues yield along with existing holders

Example

Vault state:
  totalShares      = 1,000,000
  aggModeledNAV    = $1,050,000   (share price = $1.05)

Depositor deposits $100,000:
  shares = 100,000 × 1,000,000 / 1,050,000 = 95,238 shares

After deposit:
  totalShares      = 1,095,238
  idleReserve     += $100,000
  aggModeledNAV    = $1,150,000   (share price still ~$1.05)