Skip to content
Open app

Fees

Aqueduct charges one fee: 5% (Bedrock) or 10% (Rapids) of yield above each vault's high-water mark, taken as newly minted shares. There are no deposit, withdrawal or management fees.

On this page

The fee schedule#

  • Performance fee, on yield above the high-water mark
    Bedrock
    5%
    Rapids
    10%
    On-chain limit
    30%
  • Management fee, on assets per year
    Bedrock
    0%
    Rapids
    0%
    On-chain limit
    2%
  • Deposit fee
    Bedrock
    None
    Rapids
    None
    On-chain limit
    Not supported
  • Withdrawal fee
    Bedrock
    None
    Rapids
    None
    On-chain limit
    Not supported
Schedule from packages/sdk/src/registry.ts; limits from programs/aqueduct/src/constants.rs. The deployed devnet vaults match.

Aqueduct only earns when depositors do. If a vault earns nothing, or loses money and has not yet recovered, nobody pays anything. The APY shown in the app is the net APY, already after the fee: net = gross × (1 − fee).

The high-water mark#

Each vault stores a high-water mark: the highest share price on which a performance fee has been charged. The fee applies only to the part of the share price above it:

fee (USDC) = (share price − high-water mark) × shares outstanding × fee rate
Computed by the program each time it accrues the vault's fees.

After charging, the mark moves up to the new share price after the fee. If the price later falls, for example because a venue loses money, no fee is charged until the price has climbed back above the mark. A drawdown is never charged twice.

The mark belongs to the vault, not to each depositor. If you deposit while a vault is below its mark, the recovery up to the mark is yours fee-free. The mark started at the first share price the program saw after the fee was introduced.

Worked example#

A Rapids vault (10% fee) holds 1,000,000 USDC in 1,000,000 shares, and its high-water mark is 1.0000. Each row is one fee accrual by the program.

  • Start
    Total assets
    1,000,000
    Shares
    1,000,000.00
    Share price
    1.0000
    Mark
    1.0000
    Fee charged
    none
  • Strategies earn 5,000
    Total assets
    1,005,000
    Shares
    1,000,497.76
    Share price
    1.0045
    Mark
    1.0045
    Fee charged
    500 USDC
  • A venue loses 3,000
    Total assets
    1,002,000
    Shares
    1,000,497.76
    Share price
    1.0015
    Mark
    1.0045
    Fee charged
    none
  • Earns the 3,000 back
    Total assets
    1,005,000
    Shares
    1,000,497.76
    Share price
    1.0045
    Mark
    1.0045
    Fee charged
    none
  • Earns another 1,000
    Total assets
    1,006,000
    Shares
    1,000,597.22
    Share price
    1.0054
    Mark
    1.0054
    Fee charged
    100 USDC

On the first gain the fee is 10% of 5,000 = 500 USDC. The program mints 497.76 new shares for the treasury, exactly enough to be worth 500 USDC at the post-fee price of 1.0045. Depositors keep 4,500 of the 5,000. The loss and its recovery cost nothing; only the last 1,000 above the old mark is charged.

Estimate your fee#

A year at a constant rate, ignoring compounding:

Tier
Gross yield
$600.00
Performance fee
$30.00
You keep
$570.00
Net APY
5.70%

One year at a constant rate, before compounding. No deposit, withdrawal or management fee applies, so this is the whole cost.

How fees are collected#

The fee never moves USDC out of the vault. It dilutes: new shares are minted to the treasury and the treasury redeems them like anyone else.

  1. Accrual. Every deposit, withdrawal and fee sweep first values the vault, then adds the fee owed since the last accrual to the vault's pending_fee_shares. Those shares already count in the share price, so nobody can deposit or withdraw around a fee.
  2. Sweep. The collect_fees instruction accrues once more and mints the pending shares to the treasury's share account. It is permissionless: anyone can call it, but the shares can only go to the treasury set in the program config.
  3. Schedule. The keeper calls collect_fees for both vaults every 60 minutes.

The mark only moves once at least one base unit of shares (0.000001) is due, so frequent tiny accruals can never round the fee away. The keeper reports its latest sweep at /fees:

GET/fees

Other costs#

  • Solana network fees. You pay the normal transaction fee for each deposit and withdrawal, plus a refundable rent deposit the first time a token account is created for you. The keeper pays for its own transactions.
  • Bridge fees. Moving funds to or from a cross-chain venue costs a CCTP fee. On devnet the program simulates it by burning 1 bp of every cross-chain allocate and deallocate, which lowers total assets for every depositor. The keeper only makes such a move when it expects the yield to cover the cost at least twice; see the cost check.
Who can change the fees

The admin can change a vault's performance fee and management fee with update_vault, within the on-chain limits of 30% and 2% a year. A new performance fee applies only to gains above the existing high-water mark. See Admin powers.

Written against programs/aqueduct/src/state.rs, programs/aqueduct/src/instructions/admin.rs, apps/keeper/src/fees.ts and packages/sdk/src/registry.ts. If the code and this page disagree, the code wins.