← Learn
Liveproduct· 8 min read· #fees#hwm#withdraw

Performance fee and high water mark on Forge vaults

How Forge’s 15% performance fee works at withdraw — per-user cost basis, HWM intuition, fee-before-burn audit fix, and agent integration notes.

Last updated: May 26, 2026 · Published 2026-05-26

Forge Treasury smart contracts are unaudited. Yield is variable and not guaranteed. Read Risks & Disclosures before depositing USDC or integrating MCP tools.

Forge vaults charge a 15% performance fee on profits, not on deposited principal. Marketing and MCP tool strings describe this as a fee above the high water mark (HWM) — the best price at which your shares have previously been valued for fee purposes. After the May 2026 internal audit (finding F-C-01), the on-chain implementation uses per-user cost basis (`userEntryPrice`): an asset-weighted average entry price updated on every deposit and transfer-in. The economic intent matches classic HWM — you are not taxed on gains you already paid fees on — but the math is per-address, not a single global vault HWM. This guide explains when fees trigger, who pays, and how agents should model withdraw proceeds.

Profit

$50

Fee (15%)

$8

Net to user

$42

Illustrative performance fee on withdraw — fee applies to profit above entry cost basis, not principal.
Forge vault contracts are unaudited. Fee logic was revised in audit fixes — verify behavior on-chain before large exits. This is educational content, not tax or investment advice. See Risks & Disclosures.

Fee constant and denominator

`ForgeVault` exposes `PERFORMANCE_FEE_BPS = 1500` — 15% of profit above cost basis at withdraw or redeem time. Denominator is 10,000 bps. There is no management fee on Forge MVP vaults; revenue intent routes through `feeWallet` share transfers toward protocol buyback mechanics described in Tokenomics. MVP `FeeDistributor` components may be stubbed — fee shares accrue to `feeWallet` even if downstream buyback is not live.

ParameterValueNotes
PERFORMANCE_FEE_BPS1500 (15%)On profit only
Cost basisPer-user `userEntryPrice`18-decimal assets-per-share average
Collection timingBefore share burn on withdraw/redeemAudit fix F-C-01
PayerShare owner (`owner_`)Not necessarily `receiver`
InstrumentAdditional shares to feeWalletNot USDC pull from receiver
Performance fee parameters (ForgeVault)

How cost basis accrues on deposit

When you deposit USDC and mint fUSDC (Core) or fmUSDC (Middle) shares, Forge updates your entry price to reflect the blended average of all shares you hold. First deposit: entry price equals the share price at mint. Second deposit at a different NAV: entry price becomes the weighted average of old and new lots. Transfers into your address also update basis (you inherit the sender's economic entry for the transferred slice). Transfers out preserve your remaining basis on the unsold balance.

  1. Agent approves USDC and calls `deposit(assets, receiver)`.
  2. Vault mints shares at current ERC-4626 exchange rate.
  3. `userEntryPrice[receiver]` updated to weighted average entry.
  4. Yield accrues via adapters — share price rises over time.
  5. On withdraw, profit = current value minus cost basis on sold shares.
  6. 15% of profit transferred as shares to `feeWallet`; remainder burns/redeems to USDC.

Withdraw and redeem — when the fee fires

Fees apply on `withdraw(assets, receiver, owner)` and `redeem(shares, receiver, owner)` when the asset value of shares sold exceeds the owner's cost basis on those shares. Critically, fee calculation runs before share burn so balances are non-zero — pre-audit bug F-C-01 charged zero fee on full exits because shares were already burned. Partial withdraws pay fee only on the profit portion of the withdrawn slice; principal can exit fee-free if share price has not exceeded entry.

The fee is collected by transferring additional shares from `owner_` to `feeWallet`, not by deducting USDC from `receiver`. If you redeem to a cold wallet but `owner_` is your agent EOA, the EOA pays the fee shares. Agents wrapping Forge for end-users must document who holds `owner_` vs `receiver` in allowance flows.

HWM intuition vs on-chain cost basis

Traditional hedge-fund HWM tracks a single net asset value peak per investor. Forge's `userEntryPrice` is forward-looking cost basis, not a trailing peak price. If share price rises, falls, then rises again, you pay fee only on gains above your blended entry — similar to average-cost accounting. You do not pay twice on the same dollar of profit after a full exit and re-entry because a new deposit resets basis to the new entry price.

  • No fee on loss exits — if share price is below entry, withdraw is fee-free (aside from gas).
  • No fee on principal — only the profit component above basis is taxed.
  • Transfers propagate basis — buying fUSDC on secondary markets inherits seller basis rules via `_update` hook.
  • Separate from FORGE emissions — Merkle rewards are not auto-fee'd on claim; see FORGE emissions vs yield.

Worked example (illustrative numbers)

Suppose an agent deposits 1,000 USDC when fUSDC trades at 1.00 USDC/share, receiving 1,000 shares. Entry price = 1.00. After months, adapters earn yield and share price rises to 1.10. The agent redeems all shares: asset value = 1,100 USDC. Profit = 100 USDC. Performance fee = 15% × 100 = 15 USDC equivalent in shares sent to feeWallet. Agent receives 1,085 USDC net (ignoring gas and rounding). If share price were still 1.00, profit = 0 and fee = 0.

StepShare priceSharesAsset valueFee (15% of profit)
Deposit1.0010001000 USDC0
Accrue yield1.1010001100 USDC
Redeem all1.1001100 gross15 USDC on 100 profit
Net to agent1085 USDC
Illustrative full exit with profit

Partial withdraws and DCA deposits

Dollar-cost averaging creates a blended entry price across deposits. Partial withdraws compute fee only on the shares burned in that transaction relative to current basis. Agents running recurring deposits should track basis off-chain (or read `userEntryPrice` on-chain) when projecting net withdraw amounts for treasury reporting. MCP withdraw tools return calldata — they do not simulate fee shares; use `eth_call` preview or subgraph portfolio snapshots where available.

Relationship to adapter yield and timelock

Performance fees depend on aggregate share price, not per-adapter attribution. Core vault NAV sums Spark, Morpho, and Aave legs — see Conservative strategy. Adapter timelock changes (48-hour guide) do not reset user basis. If a bad adapter impairs NAV, withdraws at a loss incur no performance fee even if other legs previously earned yield — basis is share-price denominated.

Agent integration checklist

  • Read `userEntryPrice(user)` before quoting net withdraw to end-users.
  • Simulate `redeem` via RPC to estimate fee shares — do not trust static APY strings.
  • Disclose 15% profit fee in agent system prompts and user-facing copy.
  • Separate performance fee from variable underlying yield — no guaranteed APY.
  • Log `PerformanceFeeCollected` events for accounting integrations.
  • Use Stats share price for NAV; subgraph `VaultDayData` for historical charts.

Audit history — why wording changed

Pre-audit ForgeVault used a global `highWaterMark` advanced only on owner `harvest()` — new depositors could be charged for gains they never enjoyed. F-C-01 replaced this with per-user `userEntryPrice`, fee-before-burn ordering, and owner-pays-not-receiver semantics. Marketing may still say "high water mark" because the user experience matches HWM intent; integrators should read `userEntryPrice` in the ABI. Internal audit reference: `docs/INTERNAL_AUDIT_2026-05-22.md`.

Frequently asked questions

Is there a fee on deposit?

No performance fee on deposit. You pay Base gas for approve + deposit. Entry price is recorded for future withdraw math.

Does the fee apply to FORGE token rewards?

FORGE Merkle claims are separate from vault shares. Performance fee applies to USDC-denominated vault profit on fUSDC/fmUSDC exit, not to FORGE inflationary emissions.

Who receives fee shares?

The configured `feeWallet` address receives fee shares. Downstream buyback and distribution depend on deployed `FeeDistributor` maturity — see Tokenomics.

Can I avoid fees by transferring shares instead of redeeming?

Transfers do not trigger performance fee collection, but the recipient inherits cost basis. Secondary-market buyers should price shares net of latent fee liability on future redeem.

Multi-depositor fairness

Per-user cost basis prevents cross-subsidy between early and late depositors — the pre-audit global HWM bug charged new entrants for yield they never earned. Today, each address tracks its own blended entry. Treasury reporting aggregating multiple EOAs must sum positions separately; a multisig holding fUSDC is one `owner_` with one basis. Sub-accounts off-chain are not reflected on-chain unless they use distinct addresses.

Comparison to traditional fund fees

MechanismTypical hedge fundForge MVP vault
Management fee1–2% AUM commonNone on-chain
Performance fee20% above HWM common15% above user cost basis
CrystallizationQuarterly / annualEach withdraw/redeem
High water markPer investor peak NAVPer-user entry price average
Forge performance fee vs typical fund structures

Forge fees crystallize on exit, not on calendar schedule — agents with frequent small withdraws pay fee more often than buy-and-hold treasuries. Model this in breakeven spreadsheets when comparing direct Spark/Morpho deposits (no Forge fee, no diversification) vs Core vault routing. Document fee assumptions in agent README alongside links to Tokenomics and live share price on Stats.

How do fees interact with ERC-4626 share transfers?

Secondary transfers of fUSDC update recipient `userEntryPrice` based on sender basis — fee liability travels with economic ownership. OTC desk integrations must price latent 15% exit fee on embedded gains. Primary mint/burn from vault deposit/redeem follows standard ERC-4626 events indexed by subgraph for Stats volume KPIs.

Summary for agents

Forge charges 15% on withdraw profits above per-user cost basis (`userEntryPrice`), collected as shares to `feeWallet` before burn. No fee on principal or loss exits. Audit fix F-C-01 aligned on-chain behavior with HWM intent. Simulate redeems via RPC; disclose fees in UX; read live share price on Stats. Pair with Conservative strategy for yield context and Risks & Disclosures for unaudited contract warnings. Re-read when upgrading vault ABI bindings.

Principal loss is possible. Performance fee treatment may have tax implications — consult qualified professionals. Not investment advice.

Share this article

Draft copy for social posts — review before publishing. URL: https://forgetreasury.com/learn/performance-fee-high-water-mark-forge

Open Graph / preview card

Forge 15% performance fee — HWM explained Profit-only fee at withdraw using per-user cost basis. 15% above entry — not on principal. Unaudited MVP; simulate before large exits. https://forgetreasury.com/learn/performance-fee-high-water-mark-forge

Twitter / X

Forge vaults charge 15% on withdraw profits above your cost basis — not on principal. How HWM-style fees work after the audit fix: https://forgetreasury.com/learn/performance-fee-high-water-mark-forge

LinkedIn

Treasury agents need to model net withdraw proceeds, not gross share price. Forge Treasury charges a 15% performance fee on profits above per-user cost basis at exit — collected as shares before burn. This guide covers HWM intuition, audit fix F-C-01, and integration checklists for MCP agents. Educational only; contracts unaudited: https://forgetreasury.com/learn/performance-fee-high-water-mark-forge